CC: [email protected] CC: [email protected] In-Reply-To: <[email protected]> References: <[email protected]> TO: Adrian Hunter <[email protected]> TO: "Martin K . Petersen" <[email protected]> CC: "James E . J . Bottomley" <[email protected]> CC: Bart Van Assche <[email protected]> CC: Avri Altman <[email protected]> CC: Bean Huo <[email protected]> CC: Can Guo <[email protected]> CC: Asutosh Das <[email protected]> CC: [email protected]
Hi Adrian, I love your patch! Perhaps something to improve: [auto build test WARNING on mkp-scsi/for-next] [also build test WARNING on scsi/for-next next-20210819] [cannot apply to bvanassche/for-next v5.14-rc6] [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] url: https://github.com/0day-ci/linux/commits/Adrian-Hunter/scsi-ufs-Fix-ufshcd_request_sense_async-for-Samsung-KLUFG8RHDA-B2D1/20210819-173718 base: https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next :::::: branch date: 13 hours ago :::::: commit date: 13 hours ago config: riscv-randconfig-c006-20210818 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project d2b574a4dea5b718e4386bf2e26af0126e5978ce) 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 # install riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://github.com/0day-ci/linux/commit/f923de99302b30cd626ccb6cfc7f075da31c4a89 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Adrian-Hunter/scsi-ufs-Fix-ufshcd_request_sense_async-for-Samsung-KLUFG8RHDA-B2D1/20210819-173718 git checkout f923de99302b30cd626ccb6cfc7f075da31c4a89 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) drivers/scsi/ufs/ufshcd.c:6114:6: note: Left side of '||' is false drivers/scsi/ufs/ufshcd.c:6116:8: note: Assuming the condition is false ((hba->saved_err & UIC_ERROR) && ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/scsi/ufs/ufshcd.c:6116:36: note: Left side of '&&' is false ((hba->saved_err & UIC_ERROR) && ^ drivers/scsi/ufs/ufshcd.c:6127:2: note: Taking true branch if (hba->saved_uic_err & UFSHCD_UIC_PA_GENERIC_ERROR) { ^ drivers/scsi/ufs/ufshcd.c:6129:13: note: Field 'saved_uic_err' is 0 if (!hba->saved_uic_err) ^ drivers/scsi/ufs/ufshcd.c:6129:3: note: Taking true branch if (!hba->saved_uic_err) ^ drivers/scsi/ufs/ufshcd.c:6132:7: note: Calling 'ufshcd_is_pwr_mode_restore_needed' if (ufshcd_is_pwr_mode_restore_needed(hba)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/scsi/ufs/ufshcd.c:6032:2: note: 'mode' declared without an initial value u32 mode; ^~~~~~~~ drivers/scsi/ufs/ufshcd.c:6034:2: note: Calling 'ufshcd_dme_get' ufshcd_dme_get(hba, UIC_ARG_MIB(PA_PWRMODE), &mode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/scsi/ufs/ufshcd.h:1108:9: note: Calling 'ufshcd_dme_get_attr' return ufshcd_dme_get_attr(hba, attr_sel, mib_val, DME_LOCAL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/scsi/ufs/ufshcd.c:3872:6: note: 'peer' is 0 if (peer && (hba->quirks & UFSHCD_QUIRK_DME_PEER_ACCESS_AUTO_MODE)) { ^~~~ drivers/scsi/ufs/ufshcd.c:3872:11: note: Left side of '&&' is false if (peer && (hba->quirks & UFSHCD_QUIRK_DME_PEER_ACCESS_AUTO_MODE)) { ^ drivers/scsi/ufs/ufshcd.c:3894:20: note: 'peer' is 0 uic_cmd.command = peer ? ^~~~ drivers/scsi/ufs/ufshcd.c:3894:20: note: '?' condition is false drivers/scsi/ufs/ufshcd.c:3901:7: note: Assuming 'ret' is not equal to 0 if (ret) ^~~ drivers/scsi/ufs/ufshcd.c:3901:3: note: Taking true branch if (ret) ^ drivers/scsi/ufs/ufshcd.c:3902:4: note: Taking false branch dev_dbg(hba->dev, "%s: attr-id 0x%x error code %d\n", ^ include/linux/dev_printk.h:130:2: note: expanded from macro 'dev_dbg' if (0) \ ^ drivers/scsi/ufs/ufshcd.c:3904:11: note: 'ret' is not equal to 0 } while (ret && peer && --retries); ^~~ drivers/scsi/ufs/ufshcd.c:3904:11: note: Left side of '&&' is true drivers/scsi/ufs/ufshcd.c:3904:18: note: 'peer' is 0 } while (ret && peer && --retries); ^~~~ drivers/scsi/ufs/ufshcd.c:3904:23: note: Left side of '&&' is false } while (ret && peer && --retries); ^ drivers/scsi/ufs/ufshcd.c:3898:2: note: Loop condition is false. Exiting loop do { ^ drivers/scsi/ufs/ufshcd.c:3906:6: note: 'ret' is not equal to 0 if (ret) ^~~ drivers/scsi/ufs/ufshcd.c:3906:2: note: Taking true branch if (ret) ^ drivers/scsi/ufs/ufshcd.c:3911:6: note: 'mib_val' is non-null if (mib_val && !ret) ^~~~~~~ drivers/scsi/ufs/ufshcd.c:3911:6: note: Left side of '&&' is true drivers/scsi/ufs/ufshcd.c:3911:18: note: 'ret' is not equal to 0 if (mib_val && !ret) ^~~ drivers/scsi/ufs/ufshcd.c:3911:2: note: Taking false branch if (mib_val && !ret) ^ drivers/scsi/ufs/ufshcd.c:3914:6: note: 'peer' is 0 if (peer && (hba->quirks & UFSHCD_QUIRK_DME_PEER_ACCESS_AUTO_MODE) ^~~~ drivers/scsi/ufs/ufshcd.c:3914:11: note: Left side of '&&' is false if (peer && (hba->quirks & UFSHCD_QUIRK_DME_PEER_ACCESS_AUTO_MODE) ^ drivers/scsi/ufs/ufshcd.c:3918:2: note: Returning without writing to '*mib_val' return ret; ^ drivers/scsi/ufs/ufshcd.h:1108:9: note: Returning from 'ufshcd_dme_get_attr' return ufshcd_dme_get_attr(hba, attr_sel, mib_val, DME_LOCAL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/scsi/ufs/ufshcd.h:1108:2: note: Returning without writing to '*mib_val' return ufshcd_dme_get_attr(hba, attr_sel, mib_val, DME_LOCAL); ^ drivers/scsi/ufs/ufshcd.c:6034:2: note: Returning from 'ufshcd_dme_get' ufshcd_dme_get(hba, UIC_ARG_MIB(PA_PWRMODE), &mode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/scsi/ufs/ufshcd.c:6036:33: note: The left operand of '>>' is a garbage value if (pwr_info->pwr_rx != ((mode >> PWRMODE_RX_OFFSET) & PWRMODE_MASK)) ~~~~ ^ >> drivers/scsi/ufs/ufshcd.c:7965:10: warning: Potential leak of memory pointed >> to by 'buffer' [clang-analyzer-unix.Malloc] return PTR_ERR(req); ^ drivers/scsi/ufs/ufshcd.c:8155:6: note: Assuming 'ret' is 0 if (ret) ^~~ drivers/scsi/ufs/ufshcd.c:8155:2: note: Taking false branch if (ret) ^ drivers/scsi/ufs/ufshcd.c:8159:8: note: Calling 'ufshcd_add_lus' ret = ufshcd_add_lus(hba); ^~~~~~~~~~~~~~~~~~~ drivers/scsi/ufs/ufshcd.c:7907:6: note: 'ret' is 0 if (ret) ^~~ drivers/scsi/ufs/ufshcd.c:7907:2: note: Taking false branch if (ret) ^ drivers/scsi/ufs/ufshcd.c:7910:2: note: Calling 'ufshcd_clear_ua_wluns' ufshcd_clear_ua_wluns(hba); ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/scsi/ufs/ufshcd.c:8027:6: note: Assuming field 'wlun_dev_clr_ua' is true if (!hba->wlun_dev_clr_ua) ^~~~~~~~~~~~~~~~~~~~~ drivers/scsi/ufs/ufshcd.c:8027:2: note: Taking false branch if (!hba->wlun_dev_clr_ua) ^ drivers/scsi/ufs/ufshcd.c:8030:8: note: Calling 'ufshcd_clear_ua_wlun' ret = ufshcd_clear_ua_wlun(hba, UFS_UPIU_UFS_DEVICE_WLUN); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/scsi/ufs/ufshcd.c:7994:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(hba->host->host_lock, flags); ^ include/linux/spinlock.h:384:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:274:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:68:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:8: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ include/linux/irqflags.h:237:36: note: expanded from macro 'local_irq_save' #define local_irq_save(flags) do { raw_local_irq_save(flags); } while (0) ^ include/linux/irqflags.h:169:2: note: expanded from macro 'raw_local_irq_save' do { \ ^ drivers/scsi/ufs/ufshcd.c:7994:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(hba->host->host_lock, flags); ^ include/linux/spinlock.h:384:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:274:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:68:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:8: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ include/linux/irqflags.h:237:31: note: expanded from macro 'local_irq_save' #define local_irq_save(flags) do { raw_local_irq_save(flags); } while (0) ^ drivers/scsi/ufs/ufshcd.c:7994:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(hba->host->host_lock, flags); ^ include/linux/spinlock.h:384:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:274:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:68:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:31: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ include/linux/spinlock_api_up.h:31:8: note: expanded from macro '__LOCK' do { preempt_disable(); ___LOCK(lock); } while (0) ^ include/linux/preempt.h:175:27: note: expanded from macro 'preempt_disable' #define preempt_disable() \ ^ drivers/scsi/ufs/ufshcd.c:7994:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(hba->host->host_lock, flags); ^ include/linux/spinlock.h:384:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:274:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:68:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) vim +/buffer +7965 drivers/scsi/ufs/ufshcd.c ac1bc2ba060f96 Bart Van Assche 2021-07-21 7944 4f3e900b628226 Jaegeuk Kim 2020-11-17 7945 static int ac1bc2ba060f96 Bart Van Assche 2021-07-21 7946 ufshcd_request_sense_async(struct ufs_hba *hba, struct scsi_device *sdev) ac1bc2ba060f96 Bart Van Assche 2021-07-21 7947 { ac1bc2ba060f96 Bart Van Assche 2021-07-21 7948 /* ac1bc2ba060f96 Bart Van Assche 2021-07-21 7949 * From SPC-6: the REQUEST SENSE command with any allocation length f923de99302b30 Adrian Hunter 2021-08-19 7950 * clears the sense data, but not all UFS devices behave that way. ac1bc2ba060f96 Bart Van Assche 2021-07-21 7951 */ f923de99302b30 Adrian Hunter 2021-08-19 7952 static const u8 cmd[6] = {REQUEST_SENSE, 0, 0, 0, UFS_SENSE_SIZE, 0}; ac1bc2ba060f96 Bart Van Assche 2021-07-21 7953 struct scsi_request *rq; ac1bc2ba060f96 Bart Van Assche 2021-07-21 7954 struct request *req; f923de99302b30 Adrian Hunter 2021-08-19 7955 char *buffer; f923de99302b30 Adrian Hunter 2021-08-19 7956 int ret; f923de99302b30 Adrian Hunter 2021-08-19 7957 f923de99302b30 Adrian Hunter 2021-08-19 7958 buffer = kzalloc(UFS_SENSE_SIZE, GFP_KERNEL); f923de99302b30 Adrian Hunter 2021-08-19 7959 if (!buffer) f923de99302b30 Adrian Hunter 2021-08-19 7960 return -ENOMEM; ac1bc2ba060f96 Bart Van Assche 2021-07-21 7961 f923de99302b30 Adrian Hunter 2021-08-19 7962 req = blk_get_request(sdev->request_queue, REQ_OP_DRV_IN, f923de99302b30 Adrian Hunter 2021-08-19 7963 /*flags=*/BLK_MQ_REQ_PM); ac1bc2ba060f96 Bart Van Assche 2021-07-21 7964 if (IS_ERR(req)) ac1bc2ba060f96 Bart Van Assche 2021-07-21 @7965 return PTR_ERR(req); ac1bc2ba060f96 Bart Van Assche 2021-07-21 7966 f923de99302b30 Adrian Hunter 2021-08-19 7967 ret = blk_rq_map_kern(sdev->request_queue, req, f923de99302b30 Adrian Hunter 2021-08-19 7968 buffer, UFS_SENSE_SIZE, GFP_NOIO); f923de99302b30 Adrian Hunter 2021-08-19 7969 if (ret) { f923de99302b30 Adrian Hunter 2021-08-19 7970 blk_put_request(req); f923de99302b30 Adrian Hunter 2021-08-19 7971 kfree(buffer); f923de99302b30 Adrian Hunter 2021-08-19 7972 return ret; f923de99302b30 Adrian Hunter 2021-08-19 7973 } f923de99302b30 Adrian Hunter 2021-08-19 7974 ac1bc2ba060f96 Bart Van Assche 2021-07-21 7975 rq = scsi_req(req); ac1bc2ba060f96 Bart Van Assche 2021-07-21 7976 rq->cmd_len = ARRAY_SIZE(cmd); ac1bc2ba060f96 Bart Van Assche 2021-07-21 7977 memcpy(rq->cmd, cmd, rq->cmd_len); ac1bc2ba060f96 Bart Van Assche 2021-07-21 7978 rq->retries = 3; ac1bc2ba060f96 Bart Van Assche 2021-07-21 7979 req->timeout = 1 * HZ; ac1bc2ba060f96 Bart Van Assche 2021-07-21 7980 req->rq_flags |= RQF_PM | RQF_QUIET; f923de99302b30 Adrian Hunter 2021-08-19 7981 req->end_io_data = buffer; ac1bc2ba060f96 Bart Van Assche 2021-07-21 7982 ac1bc2ba060f96 Bart Van Assche 2021-07-21 7983 blk_execute_rq_nowait(/*bd_disk=*/NULL, req, /*at_head=*/true, ac1bc2ba060f96 Bart Van Assche 2021-07-21 7984 ufshcd_request_sense_done); ac1bc2ba060f96 Bart Van Assche 2021-07-21 7985 return 0; ac1bc2ba060f96 Bart Van Assche 2021-07-21 7986 } 4f3e900b628226 Jaegeuk Kim 2020-11-17 7987 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
