Re: [PATCH v4 4/7] ufs: mcq: Add support for clean up mcq resources

From: kernel test robot
Date: Fri May 12 2023 - 00:51:04 EST


Hi Bao,

kernel test robot noticed the following build warnings:

[auto build test WARNING on jejb-scsi/for-next]
[also build test WARNING on mkp-scsi/for-next linus/master v6.4-rc1 next-20230511]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Bao-D-Nguyen/ufs-core-Combine-32-bit-command_desc_base_addr_lo-hi/20230512-060009
base: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
patch link: https://lore.kernel.org/r/33fe3d5bd6223d0ca1b5002efb7efc7bb90f3495.1683841772.git.quic_nguyenb%40quicinc.com
patch subject: [PATCH v4 4/7] ufs: mcq: Add support for clean up mcq resources
config: x86_64-randconfig-a014 (https://download.01.org/0day-ci/archive/20230512/202305121245.uSA6swAd-lkp@xxxxxxxxx/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/e05a8eb3fd257b04965c2333d4bf0161177ef504
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Bao-D-Nguyen/ufs-core-Combine-32-bit-command_desc_base_addr_lo-hi/20230512-060009
git checkout e05a8eb3fd257b04965c2333d4bf0161177ef504
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Link: https://lore.kernel.org/oe-kbuild-all/202305121245.uSA6swAd-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

>> drivers/ufs/core/ufshcd.c:7526:32: warning: variable 'reg' is uninitialized when used here [-Wuninitialized]
if (!is_mcq_enabled(hba) && !(reg & (1 << tag))) {
^~~
drivers/ufs/core/ufshcd.c:7489:9: note: initialize the variable 'reg' to silence this warning
u32 reg;
^
= 0
1 warning generated.


vim +/reg +7526 drivers/ufs/core/ufshcd.c

7473
7474 /**
7475 * ufshcd_abort - scsi host template eh_abort_handler callback
7476 * @cmd: SCSI command pointer
7477 *
7478 * Returns SUCCESS/FAILED
7479 */
7480 static int ufshcd_abort(struct scsi_cmnd *cmd)
7481 {
7482 struct Scsi_Host *host = cmd->device->host;
7483 struct ufs_hba *hba = shost_priv(host);
7484 int tag = scsi_cmd_to_rq(cmd)->tag;
7485 struct ufshcd_lrb *lrbp = &hba->lrb[tag];
7486 unsigned long flags;
7487 int err = FAILED;
7488 bool outstanding;
7489 u32 reg;
7490
7491 WARN_ONCE(tag < 0, "Invalid tag %d\n", tag);
7492
7493 ufshcd_hold(hba, false);
7494
7495 if (!is_mcq_enabled(hba) && !test_bit(tag, &hba->outstanding_reqs)) {
7496 reg = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
7497 /* If command is already aborted/completed, return FAILED. */
7498 dev_err(hba->dev,
7499 "%s: cmd at tag %d already completed, outstanding=0x%lx, doorbell=0x%x\n",
7500 __func__, tag, hba->outstanding_reqs, reg);
7501 goto release;
7502 }
7503
7504 /* Print Transfer Request of aborted task */
7505 dev_info(hba->dev, "%s: Device abort task at tag %d\n", __func__, tag);
7506
7507 /*
7508 * Print detailed info about aborted request.
7509 * As more than one request might get aborted at the same time,
7510 * print full information only for the first aborted request in order
7511 * to reduce repeated printouts. For other aborted requests only print
7512 * basic details.
7513 */
7514 scsi_print_command(cmd);
7515 if (!hba->req_abort_count) {
7516 ufshcd_update_evt_hist(hba, UFS_EVT_ABORT, tag);
7517 ufshcd_print_evt_hist(hba);
7518 ufshcd_print_host_state(hba);
7519 ufshcd_print_pwr_info(hba);
7520 ufshcd_print_tr(hba, tag, true);
7521 } else {
7522 ufshcd_print_tr(hba, tag, false);
7523 }
7524 hba->req_abort_count++;
7525
> 7526 if (!is_mcq_enabled(hba) && !(reg & (1 << tag))) {
7527 /* only execute this code in single doorbell mode */
7528 dev_err(hba->dev,
7529 "%s: cmd was completed, but without a notifying intr, tag = %d",
7530 __func__, tag);
7531 __ufshcd_transfer_req_compl(hba, 1UL << tag);
7532 goto release;
7533 }
7534
7535 /*
7536 * Task abort to the device W-LUN is illegal. When this command
7537 * will fail, due to spec violation, scsi err handling next step
7538 * will be to send LU reset which, again, is a spec violation.
7539 * To avoid these unnecessary/illegal steps, first we clean up
7540 * the lrb taken by this cmd and re-set it in outstanding_reqs,
7541 * then queue the eh_work and bail.
7542 */
7543 if (lrbp->lun == UFS_UPIU_UFS_DEVICE_WLUN) {
7544 ufshcd_update_evt_hist(hba, UFS_EVT_ABORT, lrbp->lun);
7545
7546 spin_lock_irqsave(host->host_lock, flags);
7547 hba->force_reset = true;
7548 ufshcd_schedule_eh_work(hba);
7549 spin_unlock_irqrestore(host->host_lock, flags);
7550 goto release;
7551 }
7552
7553 /* Skip task abort in case previous aborts failed and report failure */
7554 if (lrbp->req_abort_skip) {
7555 dev_err(hba->dev, "%s: skipping abort\n", __func__);
7556 ufshcd_set_req_abort_skip(hba, hba->outstanding_reqs);
7557 goto release;
7558 }
7559
7560 err = ufshcd_try_to_abort_task(hba, tag);
7561 if (err) {
7562 dev_err(hba->dev, "%s: failed with err %d\n", __func__, err);
7563 ufshcd_set_req_abort_skip(hba, hba->outstanding_reqs);
7564 err = FAILED;
7565 goto release;
7566 }
7567
7568 /*
7569 * Clear the corresponding bit from outstanding_reqs since the command
7570 * has been aborted successfully.
7571 */
7572 spin_lock_irqsave(&hba->outstanding_lock, flags);
7573 outstanding = __test_and_clear_bit(tag, &hba->outstanding_reqs);
7574 spin_unlock_irqrestore(&hba->outstanding_lock, flags);
7575
7576 if (outstanding)
7577 ufshcd_release_scsi_cmd(hba, lrbp);
7578
7579 err = SUCCESS;
7580
7581 release:
7582 /* Matches the ufshcd_hold() call at the start of this function. */
7583 ufshcd_release(hba);
7584 return err;
7585 }
7586

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests