CC: [email protected] CC: [email protected] CC: [email protected] TO: Miquel Raynal <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git spi-mem-ecc head: 00360ebae483e603d55ec9a7231b787cb80ffe13 commit: 48e6633a9fa2400b53a964358753769f291a7eb0 [14/29] mtd: nand: mxic-ecc: Add Macronix external ECC engine support :::::: branch date: 12 hours ago :::::: commit date: 2 days ago config: riscv-randconfig-c006-20220210 (https://download.01.org/0day-ci/archive/20220211/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project aa845d7a245d85c441d0bd44fc7b6c3be8f3de8d) 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://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git/commit/?id=48e6633a9fa2400b53a964358753769f291a7eb0 git remote add mtd https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git git fetch --no-tags mtd spi-mem-ecc git checkout 48e6633a9fa2400b53a964358753769f291a7eb0 # save the config file 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 >>) 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. 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. 9 warnings generated. drivers/gpu/drm/etnaviv/etnaviv_dump.c:213:14: warning: Dereference of null pointer [clang-analyzer-core.NullDereference] *bomap++ = cpu_to_le64(page_to_phys(*pages++)); ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/etnaviv/etnaviv_dump.c:124:6: note: Assuming 'etnaviv_dump_core' is true if (!etnaviv_dump_core) ^~~~~~~~~~~~~~~~~~ drivers/gpu/drm/etnaviv/etnaviv_dump.c:124:2: note: Taking false branch if (!etnaviv_dump_core) ^ drivers/gpu/drm/etnaviv/etnaviv_dump.c:140:14: note: Assuming 'i' is >= field 'nr_bos' for (i = 0; i < submit->nr_bos; i++) { ^~~~~~~~~~~~~~~~~~ drivers/gpu/drm/etnaviv/etnaviv_dump.c:140:2: note: Loop condition is false. Execution continues on line 148 for (i = 0; i < submit->nr_bos; i++) { ^ drivers/gpu/drm/etnaviv/etnaviv_dump.c:148:6: note: 'n_bomap_pages' is 0 if (n_bomap_pages) { ^~~~~~~~~~~~~ drivers/gpu/drm/etnaviv/etnaviv_dump.c:148:2: note: Taking false branch if (n_bomap_pages) { ^ drivers/gpu/drm/etnaviv/etnaviv_dump.c:159:6: note: Assuming field 'start' is non-null if (!iter.start) { ^~~~~~~~~~~ drivers/gpu/drm/etnaviv/etnaviv_dump.c:159:2: note: Taking false branch if (!iter.start) { ^ drivers/gpu/drm/etnaviv/etnaviv_dump.c:186:6: note: 'n_bomap_pages' is 0 if (n_bomap_pages) { ^~~~~~~~~~~~~ drivers/gpu/drm/etnaviv/etnaviv_dump.c:186:2: note: Taking false branch if (n_bomap_pages) { ^ drivers/gpu/drm/etnaviv/etnaviv_dump.c:196:14: note: Assuming 'i' is < field 'nr_bos' for (i = 0; i < submit->nr_bos; i++) { ^~~~~~~~~~~~~~~~~~ drivers/gpu/drm/etnaviv/etnaviv_dump.c:196:2: note: Loop condition is true. Entering loop body for (i = 0; i < submit->nr_bos; i++) { ^ drivers/gpu/drm/etnaviv/etnaviv_dump.c:207:8: note: Calling 'IS_ERR' if (!IS_ERR(pages)) { ^~~~~~~~~~~~~ include/linux/err.h:36:9: note: Assuming the condition is false return IS_ERR_VALUE((unsigned long)ptr); ^ include/linux/err.h:22:34: note: expanded from macro 'IS_ERR_VALUE' #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO) ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/err.h:36:2: note: Returning zero, which participates in a condition later return IS_ERR_VALUE((unsigned long)ptr); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/etnaviv/etnaviv_dump.c:207:8: note: Returning from 'IS_ERR' if (!IS_ERR(pages)) { ^~~~~~~~~~~~~ drivers/gpu/drm/etnaviv/etnaviv_dump.c:207:3: note: Taking true branch if (!IS_ERR(pages)) { ^ drivers/gpu/drm/etnaviv/etnaviv_dump.c:212:16: note: Assuming the condition is true for (j = 0; j < obj->base.size >> PAGE_SHIFT; j++) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/etnaviv/etnaviv_dump.c:212:4: note: Loop condition is true. Entering loop body for (j = 0; j < obj->base.size >> PAGE_SHIFT; j++) ^ drivers/gpu/drm/etnaviv/etnaviv_dump.c:213:6: note: Null pointer value stored to 'bomap' *bomap++ = cpu_to_le64(page_to_phys(*pages++)); ^~~~~~~ drivers/gpu/drm/etnaviv/etnaviv_dump.c:213:14: note: Dereference of null pointer *bomap++ = cpu_to_le64(page_to_phys(*pages++)); ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 8 warnings (8 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 (8 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. 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. >> drivers/mtd/nand/ecc-mxic.c:538:6: warning: Branch condition evaluates to a >> garbage value [clang-analyzer-core.uninitialized.Branch] if (ret) ^~~ drivers/mtd/nand/ecc-mxic.c:500:27: note: 'ret' declared without an initial value int offset, nents, step, ret; ^~~ drivers/mtd/nand/ecc-mxic.c:502:6: note: Assuming field 'mode' is not equal to MTD_OPS_RAW if (req->mode == MTD_OPS_RAW) ^~~~~~~~~~~~~~~~~~~~~~~~ drivers/mtd/nand/ecc-mxic.c:502:2: note: Taking false branch if (req->mode == MTD_OPS_RAW) ^ drivers/mtd/nand/ecc-mxic.c:508:6: note: Assuming field 'type' is not equal to NAND_PAGE_READ if (req->type == NAND_PAGE_READ) ^~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/mtd/nand/ecc-mxic.c:508:2: note: Taking false branch if (req->type == NAND_PAGE_READ) ^ drivers/mtd/nand/ecc-mxic.c:519:6: note: Assuming 'nents' is not equal to 0 if (!nents) ^~~~~~ drivers/mtd/nand/ecc-mxic.c:519:2: note: Taking false branch if (!nents) ^ drivers/mtd/nand/ecc-mxic.c:524:17: note: Assuming 'step' is >= field 'steps' for (step = 0; step < ctx->steps; step++) { ^~~~~~~~~~~~~~~~~ drivers/mtd/nand/ecc-mxic.c:524:2: note: Loop condition is false. Execution continues on line 534 for (step = 0; step < ctx->steps; step++) { ^ drivers/mtd/nand/ecc-mxic.c:538:6: note: Branch condition evaluates to a garbage value if (ret) ^~~ 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. 39 warnings generated. drivers/mtd/nand/onenand/onenand_base.c:3751:23: warning: The result of the left shift is undefined due to shifting by '4294967264', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult] this->page_mask = (1 << (this->erase_shift - this->page_shift)) - 1; ^ drivers/mtd/nand/onenand/onenand_base.c:3818:6: note: Assuming field 'read_word' is non-null if (!this->read_word) ^~~~~~~~~~~~~~~~ drivers/mtd/nand/onenand/onenand_base.c:3818:2: note: Taking false branch if (!this->read_word) ^ drivers/mtd/nand/onenand/onenand_base.c:3820:6: note: Assuming field 'write_word' is non-null if (!this->write_word) ^~~~~~~~~~~~~~~~~ drivers/mtd/nand/onenand/onenand_base.c:3820:2: note: Taking false branch if (!this->write_word) ^ drivers/mtd/nand/onenand/onenand_base.c:3823:6: note: Assuming field 'command' is non-null if (!this->command) ^~~~~~~~~~~~~~ drivers/mtd/nand/onenand/onenand_base.c:3823:2: note: Taking false branch if (!this->command) ^ drivers/mtd/nand/onenand/onenand_base.c:3825:6: note: Assuming field 'wait' is non-null if (!this->wait) ^~~~~~~~~~~ drivers/mtd/nand/onenand/onenand_base.c:3825:2: note: Taking false branch if (!this->wait) ^ drivers/mtd/nand/onenand/onenand_base.c:3827:6: note: Assuming field 'bbt_wait' is non-null if (!this->bbt_wait) ^~~~~~~~~~~~~~~ drivers/mtd/nand/onenand/onenand_base.c:3827:2: note: Taking false branch if (!this->bbt_wait) ^ drivers/mtd/nand/onenand/onenand_base.c:3829:6: note: Assuming field 'unlock_all' is non-null if (!this->unlock_all) ^~~~~~~~~~~~~~~~~ drivers/mtd/nand/onenand/onenand_base.c:3829:2: note: Taking false branch if (!this->unlock_all) ^ drivers/mtd/nand/onenand/onenand_base.c:3832:6: note: Assuming field 'chip_probe' is non-null if (!this->chip_probe) ^~~~~~~~~~~~~~~~~ drivers/mtd/nand/onenand/onenand_base.c:3832:2: note: Taking false branch if (!this->chip_probe) ^ drivers/mtd/nand/onenand/onenand_base.c:3835:6: note: Assuming field 'read_bufferram' is non-null if (!this->read_bufferram) ^~~~~~~~~~~~~~~~~~~~~ drivers/mtd/nand/onenand/onenand_base.c:3835:2: note: Taking false branch if (!this->read_bufferram) ^ drivers/mtd/nand/onenand/onenand_base.c:3837:6: note: Assuming field 'write_bufferram' is non-null if (!this->write_bufferram) ^~~~~~~~~~~~~~~~~~~~~~ drivers/mtd/nand/onenand/onenand_base.c:3837:2: note: Taking false branch if (!this->write_bufferram) ^ drivers/mtd/nand/onenand/onenand_base.c:3840:6: note: Assuming field 'block_markbad' is non-null if (!this->block_markbad) ^~~~~~~~~~~~~~~~~~~~ drivers/mtd/nand/onenand/onenand_base.c:3840:2: note: Taking false branch if (!this->block_markbad) ^ drivers/mtd/nand/onenand/onenand_base.c:3842:6: note: Assuming field 'scan_bbt' is non-null if (!this->scan_bbt) vim +538 drivers/mtd/nand/ecc-mxic.c 48e6633a9fa240 Miquel Raynal 2021-12-16 492 48e6633a9fa240 Miquel Raynal 2021-12-16 493 /* External ECC engine helpers */ 48e6633a9fa240 Miquel Raynal 2021-12-16 494 static int mxic_ecc_prepare_io_req_external(struct nand_device *nand, 48e6633a9fa240 Miquel Raynal 2021-12-16 495 struct nand_page_io_req *req) 48e6633a9fa240 Miquel Raynal 2021-12-16 496 { 48e6633a9fa240 Miquel Raynal 2021-12-16 497 struct mxic_ecc_engine *mxic = nand_to_mxic(nand); 48e6633a9fa240 Miquel Raynal 2021-12-16 498 struct mxic_ecc_ctx *ctx = nand_to_ecc_ctx(nand); 48e6633a9fa240 Miquel Raynal 2021-12-16 499 struct mtd_info *mtd = nanddev_to_mtd(nand); 48e6633a9fa240 Miquel Raynal 2021-12-16 500 int offset, nents, step, ret; 48e6633a9fa240 Miquel Raynal 2021-12-16 501 48e6633a9fa240 Miquel Raynal 2021-12-16 502 if (req->mode == MTD_OPS_RAW) 48e6633a9fa240 Miquel Raynal 2021-12-16 503 return 0; 48e6633a9fa240 Miquel Raynal 2021-12-16 504 48e6633a9fa240 Miquel Raynal 2021-12-16 505 nand_ecc_tweak_req(&ctx->req_ctx, req); 48e6633a9fa240 Miquel Raynal 2021-12-16 506 ctx->req = req; 48e6633a9fa240 Miquel Raynal 2021-12-16 507 48e6633a9fa240 Miquel Raynal 2021-12-16 508 if (req->type == NAND_PAGE_READ) 48e6633a9fa240 Miquel Raynal 2021-12-16 509 return 0; 48e6633a9fa240 Miquel Raynal 2021-12-16 510 48e6633a9fa240 Miquel Raynal 2021-12-16 511 mxic_ecc_add_room_in_oobbuf(ctx, ctx->oobwithstat, 48e6633a9fa240 Miquel Raynal 2021-12-16 512 ctx->req->oobbuf.out); 48e6633a9fa240 Miquel Raynal 2021-12-16 513 48e6633a9fa240 Miquel Raynal 2021-12-16 514 sg_set_buf(&ctx->sg[0], req->databuf.out, req->datalen); 48e6633a9fa240 Miquel Raynal 2021-12-16 515 sg_set_buf(&ctx->sg[1], ctx->oobwithstat, 48e6633a9fa240 Miquel Raynal 2021-12-16 516 req->ooblen + (ctx->steps * STAT_BYTES)); 48e6633a9fa240 Miquel Raynal 2021-12-16 517 48e6633a9fa240 Miquel Raynal 2021-12-16 518 nents = dma_map_sg(mxic->dev, ctx->sg, 2, DMA_BIDIRECTIONAL); 48e6633a9fa240 Miquel Raynal 2021-12-16 519 if (!nents) 48e6633a9fa240 Miquel Raynal 2021-12-16 520 return -EINVAL; 48e6633a9fa240 Miquel Raynal 2021-12-16 521 48e6633a9fa240 Miquel Raynal 2021-12-16 522 mutex_lock(&mxic->lock); 48e6633a9fa240 Miquel Raynal 2021-12-16 523 48e6633a9fa240 Miquel Raynal 2021-12-16 524 for (step = 0; step < ctx->steps; step++) { 48e6633a9fa240 Miquel Raynal 2021-12-16 525 writel(sg_dma_address(&ctx->sg[0]) + (step * ctx->data_step_sz), 48e6633a9fa240 Miquel Raynal 2021-12-16 526 mxic->regs + SDMA_MAIN_ADDR); 48e6633a9fa240 Miquel Raynal 2021-12-16 527 writel(sg_dma_address(&ctx->sg[1]) + (step * (ctx->oob_step_sz + STAT_BYTES)), 48e6633a9fa240 Miquel Raynal 2021-12-16 528 mxic->regs + SDMA_SPARE_ADDR); 48e6633a9fa240 Miquel Raynal 2021-12-16 529 ret = mxic_ecc_process_data(mxic, ctx->req->type); 48e6633a9fa240 Miquel Raynal 2021-12-16 530 if (ret) 48e6633a9fa240 Miquel Raynal 2021-12-16 531 break; 48e6633a9fa240 Miquel Raynal 2021-12-16 532 } 48e6633a9fa240 Miquel Raynal 2021-12-16 533 48e6633a9fa240 Miquel Raynal 2021-12-16 534 mutex_unlock(&mxic->lock); 48e6633a9fa240 Miquel Raynal 2021-12-16 535 48e6633a9fa240 Miquel Raynal 2021-12-16 536 dma_unmap_sg(mxic->dev, ctx->sg, 2, DMA_BIDIRECTIONAL); 48e6633a9fa240 Miquel Raynal 2021-12-16 537 48e6633a9fa240 Miquel Raynal 2021-12-16 @538 if (ret) 48e6633a9fa240 Miquel Raynal 2021-12-16 539 return ret; 48e6633a9fa240 Miquel Raynal 2021-12-16 540 48e6633a9fa240 Miquel Raynal 2021-12-16 541 /* Retrieve the calculated ECC bytes */ 48e6633a9fa240 Miquel Raynal 2021-12-16 542 for (step = 0; step < ctx->steps; step++) { 48e6633a9fa240 Miquel Raynal 2021-12-16 543 offset = ctx->meta_sz + (step * ctx->oob_step_sz); 48e6633a9fa240 Miquel Raynal 2021-12-16 544 mtd_ooblayout_get_eccbytes(mtd, 48e6633a9fa240 Miquel Raynal 2021-12-16 545 (u8 *)ctx->req->oobbuf.out + offset, 48e6633a9fa240 Miquel Raynal 2021-12-16 546 ctx->oobwithstat + (step * STAT_BYTES), 48e6633a9fa240 Miquel Raynal 2021-12-16 547 step * ctx->parity_sz, 48e6633a9fa240 Miquel Raynal 2021-12-16 548 ctx->parity_sz); 48e6633a9fa240 Miquel Raynal 2021-12-16 549 } 48e6633a9fa240 Miquel Raynal 2021-12-16 550 48e6633a9fa240 Miquel Raynal 2021-12-16 551 return 0; 48e6633a9fa240 Miquel Raynal 2021-12-16 552 } 48e6633a9fa240 Miquel Raynal 2021-12-16 553 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
