CC: l...@lists.linux.dev CC: kbuild-...@lists.01.org BCC: l...@intel.com CC: Linux Memory Management List <linux...@kvack.org> TO: Alan Adamson <alan.adam...@oracle.com> CC: Christoph Hellwig <h...@lst.de> CC: Chaitanya Kulkarni <k...@nvidia.com> CC: "Martin K. Petersen" <martin.peter...@oracle.com> CC: Himanshu Madhani <himanshu.madh...@oracle.com> CC: Keith Busch <kbu...@kernel.org>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git pending-fixes head: 412036f22f464f3889fa2c2a8fc0ee1ba9e205d6 commit: bd83fe6f2cd2133beaac7c423fd36c3515048fc8 [8096/13747] nvme: add verbose error logging :::::: branch date: 2 days ago :::::: commit date: 5 weeks ago config: arm-randconfig-c002-20220328 (https://download.01.org/0day-ci/archive/20220401/202204011816.zetsmq91-...@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 0f6d9501cf49ce02937099350d08f20c4af86f3d) 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 arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=bd83fe6f2cd2133beaac7c423fd36c3515048fc8 git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next pending-fixes git checkout bd83fe6f2cd2133beaac7c423fd36c3515048fc8 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> clang-analyzer warnings: (new ones prefixed by >>) ^ drivers/spi/spi-bcm-qspi.c:840:7: note: Assuming field 'bits_per_word' is > 8 if (tp.trans->bits_per_word <= 8) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/spi/spi-bcm-qspi.c:840:3: note: Taking false branch if (tp.trans->bits_per_word <= 8) { ^ drivers/spi/spi-bcm-qspi.c:847:14: note: Assuming field 'bits_per_word' is > 16 } else if (tp.trans->bits_per_word <= 16) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/spi/spi-bcm-qspi.c:847:10: note: Taking false branch } else if (tp.trans->bits_per_word <= 16) { ^ drivers/spi/spi-bcm-qspi.c:855:14: note: Assuming field 'bits_per_word' is > 32 } else if (tp.trans->bits_per_word <= 32) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/spi/spi-bcm-qspi.c:855:10: note: Taking false branch } else if (tp.trans->bits_per_word <= 32) { ^ drivers/spi/spi-bcm-qspi.c:864:14: note: Assuming field 'bits_per_word' is > 64 } else if (tp.trans->bits_per_word <= 64) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/spi/spi-bcm-qspi.c:864:10: note: Taking false branch } else if (tp.trans->bits_per_word <= 64) { ^ drivers/spi/spi-bcm-qspi.c:839:2: note: Loop condition is false. Execution continues on line 880 for (slot = 0; slot < slots; slot++) { ^ drivers/spi/spi-bcm-qspi.c:880:2: note: The value of 'tp' is assigned to field 'trans_pos' qspi->trans_pos = tp; ^~~~~~~~~~~~~~~~~~~~ drivers/spi/spi-bcm-qspi.c:1143:3: note: Returning from 'read_from_hw' read_from_hw(qspi, slots); ^~~~~~~~~~~~~~~~~~~~~~~~~ drivers/spi/spi-bcm-qspi.c:1134:9: note: Assuming field 'byte' is < field 'len' while (qspi->trans_pos.byte < trans->len) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/spi/spi-bcm-qspi.c:1134:2: note: Loop condition is true. Entering loop body while (qspi->trans_pos.byte < trans->len) { ^ drivers/spi/spi-bcm-qspi.c:1137:11: note: Calling 'write_to_hw' slots = write_to_hw(qspi, spi); ^~~~~~~~~~~~~~~~~~~~~~ drivers/spi/spi-bcm-qspi.c:943:2: note: Null pointer value stored to 'tp.trans' tp = qspi->trans_pos; ^~~~~~~~~~~~~~~~~~~~ drivers/spi/spi-bcm-qspi.c:944:35: note: Passing null pointer value via 3rd parameter 'trans' bcm_qspi_update_parms(qspi, spi, tp.trans); ^~~~~~~~ drivers/spi/spi-bcm-qspi.c:944:2: note: Calling 'bcm_qspi_update_parms' bcm_qspi_update_parms(qspi, spi, tp.trans); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/spi/spi-bcm-qspi.c:699:16: note: Access to field 'speed_hz' results in a dereference of a null pointer (loaded from variable 'trans') xp.speed_hz = trans->speed_hz; ^~~~~ Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. Suppressed 8 warnings (7 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. Suppressed 11 warnings (7 in non-user code, 4 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. Suppressed 8 warnings (6 in non-user code, 2 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. Suppressed 8 warnings (6 in non-user code, 2 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. >> drivers/nvme/host/core.c:305:23: warning: Value stored to 'nr' during its >> initialization is never read [clang-analyzer-deadcode.DeadStores] struct nvme_request *nr = nvme_req(req); ^~ ~~~~~~~~~~~~~ drivers/nvme/host/core.c:305:23: note: Value stored to 'nr' during its initialization is never read struct nvme_request *nr = nvme_req(req); ^~ ~~~~~~~~~~~~~ drivers/nvme/host/core.c:3988:3: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] nvme_put_ns(ns); ^ drivers/nvme/host/core.c:4178:6: note: Assuming field 'state' is equal to NVME_CTRL_LIVE if (ctrl->state != NVME_CTRL_LIVE || !ctrl->tagset) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/nvme/host/core.c:4178:6: note: Left side of '||' is false drivers/nvme/host/core.c:4178:39: note: Assuming field 'tagset' is non-null if (ctrl->state != NVME_CTRL_LIVE || !ctrl->tagset) ^~~~~~~~~~~~~ drivers/nvme/host/core.c:4178:2: note: Taking false branch if (ctrl->state != NVME_CTRL_LIVE || !ctrl->tagset) ^ drivers/nvme/host/core.c:4181:6: note: '?' condition is true if (test_and_clear_bit(NVME_AER_NOTICE_NS_CHANGED, &ctrl->events)) { ^ arch/arm/include/asm/bitops.h:193:34: note: expanded from macro 'test_and_clear_bit' #define test_and_clear_bit(nr,p) ATOMIC_BITOP(test_and_clear_bit,nr,p) ^ arch/arm/include/asm/bitops.h:181:3: note: expanded from macro 'ATOMIC_BITOP' (__builtin_constant_p(nr) ? ____atomic_##name(nr, p) : _##name(nr,p)) ^ drivers/nvme/host/core.c:4181:6: note: Assuming the condition is false if (test_and_clear_bit(NVME_AER_NOTICE_NS_CHANGED, &ctrl->events)) { ^ arch/arm/include/asm/bitops.h:193:34: note: expanded from macro 'test_and_clear_bit' #define test_and_clear_bit(nr,p) ATOMIC_BITOP(test_and_clear_bit,nr,p) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/arm/include/asm/bitops.h:181:3: note: expanded from macro 'ATOMIC_BITOP' (__builtin_constant_p(nr) ? ____atomic_##name(nr, p) : _##name(nr,p)) ^~~~~~~~~~~~~~~~~~~~ drivers/nvme/host/core.c:4181:2: note: Taking false branch if (test_and_clear_bit(NVME_AER_NOTICE_NS_CHANGED, &ctrl->events)) { ^ drivers/nvme/host/core.c:4187:6: note: Calling 'nvme_scan_ns_list' if (nvme_scan_ns_list(ctrl) != 0) ^~~~~~~~~~~~~~~~~~~~~~~ drivers/nvme/host/core.c:4092:2: note: Taking false branch if (nvme_ctrl_limited_cns(ctrl)) ^ drivers/nvme/host/core.c:4096:6: note: Assuming 'ns_list' is non-null if (!ns_list) ^~~~~~~~ drivers/nvme/host/core.c:4096:2: note: Taking false branch if (!ns_list) ^ drivers/nvme/host/core.c:4099:2: note: Loop condition is true. Entering loop body for (;;) { ^ drivers/nvme/host/core.c:4108:7: note: Assuming 'ret' is 0 if (ret) { ^~~ drivers/nvme/host/core.c:4108:3: note: Taking false branch if (ret) { ^ drivers/nvme/host/core.c:4114:3: note: Loop condition is true. Entering loop body for (i = 0; i < nr_entries; i++) { ^ drivers/nvme/host/core.c:4117:8: note: Assuming 'nsid' is not equal to 0 if (!nsid) /* end of the list? */ ^~~~~ drivers/nvme/host/core.c:4117:4: note: Taking false branch if (!nsid) /* end of the list? */ ^ drivers/nvme/host/core.c:4120:11: note: Assuming the condition is true while (++prev < nsid) ^~~~~~~~~~~~~ drivers/nvme/host/core.c:4120:4: note: Loop condition is true. Entering loop body while (++prev < nsid) ^ drivers/nvme/host/core.c:4121:5: note: Calling 'nvme_ns_remove_by_nsid' nvme_ns_remove_by_nsid(ctrl, prev); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/nvme/host/core.c:3986:6: note: 'ns' is non-null if (ns) { ^~ drivers/nvme/host/core.c:3986:2: note: Taking true branch if (ns) { ^ drivers/nvme/host/core.c:3987:3: note: Calling 'nvme_ns_remove' nvme_ns_remove(ns); ^~~~~~~~~~~~~~~~~~ drivers/nvme/host/core.c:3946:6: note: '?' condition is true if (test_and_set_bit(NVME_NS_REMOVING, &ns->flags)) ^ arch/arm/include/asm/bitops.h:192:33: note: expanded from macro 'test_and_set_bit' #define test_and_set_bit(nr,p) ATOMIC_BITOP(test_and_set_bit,nr,p) ^ arch/arm/include/asm/bitops.h:181:3: note: expanded from macro 'ATOMIC_BITOP' (__builtin_constant_p(nr) ? ____atomic_##name(nr, p) : _##name(nr,p)) ^ drivers/nvme/host/core.c:3946:6: note: Assuming the condition is false if (test_and_set_bit(NVME_NS_REMOVING, &ns->flags)) ^ arch/arm/include/asm/bitops.h:192:33: note: expanded from macro 'test_and_set_bit' vim +/nr +305 drivers/nvme/host/core.c 49cd84b6f8b677e Keith Busch 2018-11-27 301 bd83fe6f2cd2133 Alan Adamson 2022-02-03 302 static void nvme_log_error(struct request *req) bd83fe6f2cd2133 Alan Adamson 2022-02-03 303 { bd83fe6f2cd2133 Alan Adamson 2022-02-03 304 struct nvme_ns *ns = req->q->queuedata; bd83fe6f2cd2133 Alan Adamson 2022-02-03 @305 struct nvme_request *nr = nvme_req(req); bd83fe6f2cd2133 Alan Adamson 2022-02-03 306 bd83fe6f2cd2133 Alan Adamson 2022-02-03 307 if (ns) { bd83fe6f2cd2133 Alan Adamson 2022-02-03 308 pr_err_ratelimited("%s: %s(0x%x) @ LBA %llu, %llu blocks, %s (sct 0x%x / sc 0x%x) %s%s\n", bd83fe6f2cd2133 Alan Adamson 2022-02-03 309 ns->disk ? ns->disk->disk_name : "?", bd83fe6f2cd2133 Alan Adamson 2022-02-03 310 nvme_get_opcode_str(nr->cmd->common.opcode), bd83fe6f2cd2133 Alan Adamson 2022-02-03 311 nr->cmd->common.opcode, bd83fe6f2cd2133 Alan Adamson 2022-02-03 312 (unsigned long long)nvme_sect_to_lba(ns, blk_rq_pos(req)), bd83fe6f2cd2133 Alan Adamson 2022-02-03 313 (unsigned long long)blk_rq_bytes(req) >> ns->lba_shift, bd83fe6f2cd2133 Alan Adamson 2022-02-03 314 nvme_get_error_status_str(nr->status), bd83fe6f2cd2133 Alan Adamson 2022-02-03 315 nr->status >> 8 & 7, /* Status Code Type */ bd83fe6f2cd2133 Alan Adamson 2022-02-03 316 nr->status & 0xff, /* Status Code */ bd83fe6f2cd2133 Alan Adamson 2022-02-03 317 nr->status & NVME_SC_MORE ? "MORE " : "", bd83fe6f2cd2133 Alan Adamson 2022-02-03 318 nr->status & NVME_SC_DNR ? "DNR " : ""); bd83fe6f2cd2133 Alan Adamson 2022-02-03 319 return; bd83fe6f2cd2133 Alan Adamson 2022-02-03 320 } bd83fe6f2cd2133 Alan Adamson 2022-02-03 321 bd83fe6f2cd2133 Alan Adamson 2022-02-03 322 pr_err_ratelimited("%s: %s(0x%x), %s (sct 0x%x / sc 0x%x) %s%s\n", bd83fe6f2cd2133 Alan Adamson 2022-02-03 323 dev_name(nr->ctrl->device), bd83fe6f2cd2133 Alan Adamson 2022-02-03 324 nvme_get_admin_opcode_str(nr->cmd->common.opcode), bd83fe6f2cd2133 Alan Adamson 2022-02-03 325 nr->cmd->common.opcode, bd83fe6f2cd2133 Alan Adamson 2022-02-03 326 nvme_get_error_status_str(nr->status), bd83fe6f2cd2133 Alan Adamson 2022-02-03 327 nr->status >> 8 & 7, /* Status Code Type */ bd83fe6f2cd2133 Alan Adamson 2022-02-03 328 nr->status & 0xff, /* Status Code */ bd83fe6f2cd2133 Alan Adamson 2022-02-03 329 nr->status & NVME_SC_MORE ? "MORE " : "", bd83fe6f2cd2133 Alan Adamson 2022-02-03 330 nr->status & NVME_SC_DNR ? "DNR " : ""); bd83fe6f2cd2133 Alan Adamson 2022-02-03 331 } bd83fe6f2cd2133 Alan Adamson 2022-02-03 332 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org