CC: [email protected] CC: [email protected] CC: [email protected] TO: Andrew Gabbasov <[email protected]> CC: Krzysztof Kozlowski <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl.git for-v5.16/renesas-rpc head: 1869023e24c0de73a160a424dac4621cefd628ae commit: 1869023e24c0de73a160a424dac4621cefd628ae [3/3] memory: renesas-rpc-if: Avoid unaligned bus access for HyperFlash :::::: branch date: 4 days ago :::::: commit date: 4 days ago config: mips-randconfig-c004-20211001 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 962e503cc8bc411f7523cc393acae8aae425b1c4) 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 mips cross compiling tool for clang build # apt-get install binutils-mips-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl.git/commit/?id=1869023e24c0de73a160a424dac4621cefd628ae git remote add krzk-mem-ctrl https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl.git git fetch --no-tags krzk-mem-ctrl for-v5.16/renesas-rpc git checkout 1869023e24c0de73a160a424dac4621cefd628ae # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=mips 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/staging/rtl8712/rtl8712_efuse.c:548:7: note: Assuming 'word_en' is not equal to 15 if (word_en != 0xF) ^~~~~~~~~~~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:548:3: note: Taking true branch if (word_en != 0xF) ^ drivers/staging/rtl8712/rtl8712_efuse.c:549:9: note: Calling 'r8712_efuse_pg_packet_write' if (!r8712_efuse_pg_packet_write(adapter, offset, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:367:6: note: Assuming 'efuse_data' is equal to 3 if (efuse_data != 0x03) ^~~~~~~~~~~~~~~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:367:2: note: Taking false branch if (efuse_data != 0x03) ^ drivers/staging/rtl8712/rtl8712_efuse.c:373:9: note: Assuming 'efuse_addr' is < 'efuse_available_max_size' while (efuse_addr < efuse_available_max_size) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:373:2: note: Loop condition is true. Entering loop body while (efuse_addr < efuse_available_max_size) { ^ drivers/staging/rtl8712/rtl8712_efuse.c:375:7: note: Assuming the condition is false if ((curr_size + 1 + target_word_cnts * 2) > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:375:3: note: Taking false branch if ((curr_size + 1 + target_word_cnts * 2) > ^ drivers/staging/rtl8712/rtl8712_efuse.c:382:10: note: Assuming the condition is false while (!efuse_one_byte_read(adapter, efuse_addr, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:382:3: note: Loop condition is false. Execution continues on line 389 while (!efuse_one_byte_read(adapter, efuse_addr, ^ drivers/staging/rtl8712/rtl8712_efuse.c:389:8: note: 'sub_repeat' is <= _REPEAT_THRESHOLD_ if ((sub_repeat > _REPEAT_THRESHOLD_) || ^~~~~~~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:389:7: note: Left side of '||' is false if ((sub_repeat > _REPEAT_THRESHOLD_) || ^ drivers/staging/rtl8712/rtl8712_efuse.c:390:8: note: Assuming 'pg_header' is not equal to 'efuse_data' (pg_header == efuse_data)) { ^~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:389:3: note: Taking false branch if ((sub_repeat > _REPEAT_THRESHOLD_) || ^ drivers/staging/rtl8712/rtl8712_efuse.c:411:7: note: Assuming 'efuse_data' is not equal to 255 if (efuse_data == 0xFF) ^~~~~~~~~~~~~~~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:411:3: note: Taking false branch if (efuse_data == 0xFF) ^ drivers/staging/rtl8712/rtl8712_efuse.c:414:8: note: Calling 'fix_header' if (!fix_header(adapter, efuse_data, efuse_addr)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:285:6: note: Assuming 'addr' is <= 'efuse_available_max_size' if (addr > efuse_available_max_size) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:285:2: note: Taking false branch if (addr > efuse_available_max_size) ^ drivers/staging/rtl8712/rtl8712_efuse.c:289:2: note: Loop condition is false. Execution continues on line 322 while (addr < header_addr) { ^ drivers/staging/rtl8712/rtl8712_efuse.c:322:6: note: 'addr' is equal to 'header_addr' if (addr != header_addr) ^~~~ drivers/staging/rtl8712/rtl8712_efuse.c:322:2: note: Taking false branch if (addr != header_addr) ^ drivers/staging/rtl8712/rtl8712_efuse.c:326:7: note: The value 0 is assigned to 'i' for (i = 0; i < PGPKG_MAX_WORDS; i++) { ^~~~~ drivers/staging/rtl8712/rtl8712_efuse.c:326:2: note: Loop condition is true. Entering loop body for (i = 0; i < PGPKG_MAX_WORDS; i++) { ^ drivers/staging/rtl8712/rtl8712_efuse.c:327:7: note: Assuming the condition is true if (BIT(i) & pkt.word_en) { ^ include/vdso/bits.h:7:19: note: expanded from macro 'BIT' #define BIT(nr) (UL(1) << (nr)) ^ drivers/staging/rtl8712/rtl8712_efuse.c:327:3: note: Taking true branch if (BIT(i) & pkt.word_en) { ^ drivers/staging/rtl8712/rtl8712_efuse.c:328:4: note: 3rd function call argument is an uninitialized value efuse_one_byte_write(adapter, addr, pkt.data[i * 2]); ^ ~~~~~~~~~~~~~~~ Suppressed 3 warnings (3 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 3 warnings generated. >> drivers/memory/renesas-rpc-if.c:556:13: warning: Assigned value is garbage >> or undefined [clang-analyzer-core.uninitialized.Assign] *(u8 *)to = buf[1]; ^ drivers/memory/renesas-rpc-if.c:594:6: note: Assuming 'len' is <= 'size' if (len > size) ^~~~~~~~~~ drivers/memory/renesas-rpc-if.c:594:2: note: Taking false branch if (len > size) ^ drivers/memory/renesas-rpc-if.c:610:6: note: Assuming field 'bus_size' is equal to 2 if (rpc->bus_size == 2) ^~~~~~~~~~~~~~~~~~ drivers/memory/renesas-rpc-if.c:610:2: note: Taking true branch if (rpc->bus_size == 2) ^ drivers/memory/renesas-rpc-if.c:611:3: note: Calling 'memcpy_fromio_readw' memcpy_fromio_readw(buf, rpc->dirmap + from, len); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/memory/renesas-rpc-if.c:551:19: note: '?' condition is false const int maxw = (IS_ENABLED(CONFIG_64BIT)) ? 8 : 4; ^ drivers/memory/renesas-rpc-if.c:554:6: note: Assuming 'count' is not equal to 0 if (count && ((unsigned long)from & 1)) { ^~~~~ drivers/memory/renesas-rpc-if.c:554:6: note: Left side of '&&' is true drivers/memory/renesas-rpc-if.c:554:16: note: Assuming the condition is true if (count && ((unsigned long)from & 1)) { ^~~~~~~~~~~~~~~~~~~~~~~ drivers/memory/renesas-rpc-if.c:554:2: note: Taking true branch if (count && ((unsigned long)from & 1)) { ^ drivers/memory/renesas-rpc-if.c:556:13: note: Assigned value is garbage or undefined *(u8 *)to = buf[1]; ^ ~~~~~~ Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 1 warning generated. Suppressed 1 warnings (1 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 1 warning generated. Suppressed 1 warnings (1 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. lib/math/reciprocal_div.c:51:14: warning: The result of the left shift is undefined due to shifting by '64', which is greater or equal to the width of type 'unsigned long long' [clang-analyzer-core.UndefinedBinaryOperatorResult] mlow = 1ULL << (32 + l); ^ ~~~~~~~~ lib/math/reciprocal_div.c:47:2: note: Taking true branch WARN(l == 32, ^ include/asm-generic/bug.h:131:2: note: expanded from macro 'WARN' if (unlikely(__ret_warn_on)) \ ^ lib/math/reciprocal_div.c:47:2: note: Loop condition is false. Exiting loop WARN(l == 32, ^ include/asm-generic/bug.h:132:3: note: expanded from macro 'WARN' __WARN_printf(TAINT_WARN, format); \ ^ include/asm-generic/bug.h:90:3: note: expanded from macro '__WARN_printf' instrumentation_begin(); \ ^ include/linux/instrumentation.h:57:34: note: expanded from macro 'instrumentation_begin' # define instrumentation_begin() do { } while(0) ^ lib/math/reciprocal_div.c:47:2: note: Loop condition is false. Exiting loop WARN(l == 32, ^ include/asm-generic/bug.h:132:3: note: expanded from macro 'WARN' __WARN_printf(TAINT_WARN, format); \ ^ include/asm-generic/bug.h:92:3: note: expanded from macro '__WARN_printf' instrumentation_end(); \ ^ include/linux/instrumentation.h:58:33: note: expanded from macro 'instrumentation_end' # define instrumentation_end() do { } while(0) ^ lib/math/reciprocal_div.c:47:2: note: Loop condition is false. Exiting loop WARN(l == 32, ^ include/asm-generic/bug.h:132:3: note: expanded from macro 'WARN' __WARN_printf(TAINT_WARN, format); \ ^ include/asm-generic/bug.h:89:38: note: expanded from macro '__WARN_printf' #define __WARN_printf(taint, arg...) do { \ ^ lib/math/reciprocal_div.c:51:14: note: The result of the left shift is undefined due to shifting by '64', which is greater or equal to the width of type 'unsigned long long' mlow = 1ULL << (32 + l); ^ ~~~~~~~~ Suppressed 1 warnings (1 in non-user code). vim +556 drivers/memory/renesas-rpc-if.c ca7d8b980b67f1 Sergei Shtylyov 2020-06-16 546 1869023e24c0de Andrew Gabbasov 2021-09-22 547 static void memcpy_fromio_readw(void *to, 1869023e24c0de Andrew Gabbasov 2021-09-22 548 const void __iomem *from, 1869023e24c0de Andrew Gabbasov 2021-09-22 549 size_t count) 1869023e24c0de Andrew Gabbasov 2021-09-22 550 { 1869023e24c0de Andrew Gabbasov 2021-09-22 551 const int maxw = (IS_ENABLED(CONFIG_64BIT)) ? 8 : 4; 1869023e24c0de Andrew Gabbasov 2021-09-22 552 u8 buf[2]; 1869023e24c0de Andrew Gabbasov 2021-09-22 553 1869023e24c0de Andrew Gabbasov 2021-09-22 554 if (count && ((unsigned long)from & 1)) { 1869023e24c0de Andrew Gabbasov 2021-09-22 555 *(u16 *)buf = __raw_readw((void __iomem *)((unsigned long)from & ~1)); 1869023e24c0de Andrew Gabbasov 2021-09-22 @556 *(u8 *)to = buf[1]; 1869023e24c0de Andrew Gabbasov 2021-09-22 557 from++; 1869023e24c0de Andrew Gabbasov 2021-09-22 558 to++; 1869023e24c0de Andrew Gabbasov 2021-09-22 559 count--; 1869023e24c0de Andrew Gabbasov 2021-09-22 560 } 1869023e24c0de Andrew Gabbasov 2021-09-22 561 while (count >= 2 && !IS_ALIGNED((unsigned long)from, maxw)) { 1869023e24c0de Andrew Gabbasov 2021-09-22 562 *(u16 *)to = __raw_readw(from); 1869023e24c0de Andrew Gabbasov 2021-09-22 563 from += 2; 1869023e24c0de Andrew Gabbasov 2021-09-22 564 to += 2; 1869023e24c0de Andrew Gabbasov 2021-09-22 565 count -= 2; 1869023e24c0de Andrew Gabbasov 2021-09-22 566 } 1869023e24c0de Andrew Gabbasov 2021-09-22 567 while (count >= maxw) { 1869023e24c0de Andrew Gabbasov 2021-09-22 568 #ifdef CONFIG_64BIT 1869023e24c0de Andrew Gabbasov 2021-09-22 569 *(u64 *)to = __raw_readq(from); 1869023e24c0de Andrew Gabbasov 2021-09-22 570 #else 1869023e24c0de Andrew Gabbasov 2021-09-22 571 *(u32 *)to = __raw_readl(from); 1869023e24c0de Andrew Gabbasov 2021-09-22 572 #endif 1869023e24c0de Andrew Gabbasov 2021-09-22 573 from += maxw; 1869023e24c0de Andrew Gabbasov 2021-09-22 574 to += maxw; 1869023e24c0de Andrew Gabbasov 2021-09-22 575 count -= maxw; 1869023e24c0de Andrew Gabbasov 2021-09-22 576 } 1869023e24c0de Andrew Gabbasov 2021-09-22 577 while (count >= 2) { 1869023e24c0de Andrew Gabbasov 2021-09-22 578 *(u16 *)to = __raw_readw(from); 1869023e24c0de Andrew Gabbasov 2021-09-22 579 from += 2; 1869023e24c0de Andrew Gabbasov 2021-09-22 580 to += 2; 1869023e24c0de Andrew Gabbasov 2021-09-22 581 count -= 2; 1869023e24c0de Andrew Gabbasov 2021-09-22 582 } 1869023e24c0de Andrew Gabbasov 2021-09-22 583 if (count) { 1869023e24c0de Andrew Gabbasov 2021-09-22 584 *(u16 *)buf = __raw_readw(from); 1869023e24c0de Andrew Gabbasov 2021-09-22 585 *(u8 *)to = buf[0]; 1869023e24c0de Andrew Gabbasov 2021-09-22 586 } 1869023e24c0de Andrew Gabbasov 2021-09-22 587 } 1869023e24c0de Andrew Gabbasov 2021-09-22 588 --- 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]
