CC: [email protected]
CC: [email protected]
CC: [email protected]
TO: Alex Shi <[email protected]>
CC: Andrew Morton <[email protected]>
CC: Linux Memory Management List <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   794c7931a2428a656551f2179e6a093233a6e0aa
commit: 6168d0da2b479ce25a4647de194045de1bdd1f1d mm/lru: replace pgdat lru_lock 
with lruvec lock
date:   8 months ago
:::::: branch date: 5 hours ago
:::::: commit date: 8 months ago
config: arm-randconfig-c002-20210816 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
44d0a99a12ec7ead4d2f5ef649ba05b40f6d463d)
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/torvalds/linux.git/commit/?id=6168d0da2b479ce25a4647de194045de1bdd1f1d
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 6168d0da2b479ce25a4647de194045de1bdd1f1d
        # save the attached .config 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 <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
                  ^
   drivers/i2c/i2c-core-smbus.c:136:2: note: Undefined or garbage value 
returned to caller
           return (status < 0) ? status : data.byte;
           ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/i2c/i2c-core-smbus.c:176:2: warning: Undefined or garbage value 
returned to caller [clang-analyzer-core.uninitialized.UndefReturn]
           return (status < 0) ? status : data.word;
           ^
   drivers/i2c/i2c-core-smbus.c:643:6: note: Assuming 'length' is > 
I2C_SMBUS_BLOCK_MAX
           if (length > I2C_SMBUS_BLOCK_MAX)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/i2c/i2c-core-smbus.c:643:2: note: Taking true branch
           if (length > I2C_SMBUS_BLOCK_MAX)
           ^
   drivers/i2c/i2c-core-smbus.c:646:2: note: Taking false branch
           if (i2c_check_functionality(client->adapter, 
I2C_FUNC_SMBUS_READ_I2C_BLOCK))
           ^
   drivers/i2c/i2c-core-smbus.c:649:2: note: Taking false branch
           if (!i2c_check_functionality(client->adapter, 
I2C_FUNC_SMBUS_READ_BYTE_DATA))
           ^
   drivers/i2c/i2c-core-smbus.c:652:2: note: Taking true branch
           if (i2c_check_functionality(client->adapter, 
I2C_FUNC_SMBUS_READ_WORD_DATA)) {
           ^
   drivers/i2c/i2c-core-smbus.c:653:3: note: Loop condition is true.  Entering 
loop body
                   while ((i + 2) <= length) {
                   ^
   drivers/i2c/i2c-core-smbus.c:655:8: note: 'status' is >= 0
                           if (status < 0)
                               ^~~~~~
   drivers/i2c/i2c-core-smbus.c:655:4: note: Taking false branch
                           if (status < 0)
                           ^
   drivers/i2c/i2c-core-smbus.c:653:3: note: Loop condition is true.  Entering 
loop body
                   while ((i + 2) <= length) {
                   ^
   drivers/i2c/i2c-core-smbus.c:654:13: note: Calling 'i2c_smbus_read_word_data'
                           status = i2c_smbus_read_word_data(client, command + 
i);
                                    
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/i2c/i2c-core-smbus.c:173:11: note: Calling 'i2c_smbus_xfer'
           status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/i2c/i2c-core-smbus.c:539:6: note: Assuming 'res' is not equal to 0
           if (res)
               ^~~
   drivers/i2c/i2c-core-smbus.c:539:2: note: Taking true branch
           if (res)
           ^
   drivers/i2c/i2c-core-smbus.c:540:3: note: Returning without writing to 
'data->word'
                   return res;
                   ^
   drivers/i2c/i2c-core-smbus.c:173:11: note: Returning from 'i2c_smbus_xfer'
           status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/i2c/i2c-core-smbus.c:176:10: note: Assuming 'status' is >= 0
           return (status < 0) ? status : data.word;
                   ^~~~~~~~~~
   drivers/i2c/i2c-core-smbus.c:176:9: note: '?' condition is false
           return (status < 0) ? status : data.word;
                  ^
   drivers/i2c/i2c-core-smbus.c:176:2: note: Undefined or garbage value 
returned to caller
           return (status < 0) ? status : data.word;
           ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   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.
   fs/autofs/root.c:560:2: warning: Call to function 'strcpy' is insecure as it 
does not provide bounding of the memory buffer. Replace unbounded copy 
functions with analogous functions that support length arguments such as 
'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
           strcpy(cp, symname);
           ^~~~~~
   fs/autofs/root.c:560:2: note: Call to function 'strcpy' is insecure as it 
does not provide bounding of the memory buffer. Replace unbounded copy 
functions with analogous functions that support length arguments such as 
'strlcpy'. CWE-119
           strcpy(cp, symname);
           ^~~~~~
   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.
   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.
   5 warnings generated.
   fs/autofs/dev-ioctl.c:518:34: warning: Although the value stored to 'devid' 
is used in the enclosing expression, the value is never actually read from 
'devid' [clang-analyzer-deadcode.DeadStores]
           param->ismountpoint.out.devid = devid = 0;
                                           ^       ~
   fs/autofs/dev-ioctl.c:518:34: note: Although the value stored to 'devid' is 
used in the enclosing expression, the value is never actually read from 'devid'
           param->ismountpoint.out.devid = devid = 0;
                                           ^       ~
   Suppressed 4 warnings (4 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.
   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.
   3 warnings generated.
   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.
   4 warnings generated.
   Suppressed 4 warnings (4 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.
>> include/linux/mmzone.h:870:9: warning: Access to field 'pgdat' results in a 
>> dereference of a null pointer (loaded from variable 'lruvec') 
>> [clang-analyzer-core.NullDereference]
           return lruvec->pgdat;
                  ^
   mm/vmscan.c:4268:2: note: 'lruvec' initialized to a null pointer value
           struct lruvec *lruvec = NULL;
           ^~~~~~~~~~~~~~~~~~~~~
   mm/vmscan.c:4273:14: note: Assuming 'i' is < field 'nr'
           for (i = 0; i < pvec->nr; i++) {
                       ^~~~~~~~~~~~
   mm/vmscan.c:4273:2: note: Loop condition is true.  Entering loop body
           for (i = 0; i < pvec->nr; i++) {
           ^
   mm/vmscan.c:4278:7: note: Calling 'PageTransTail'
                   if (PageTransTail(page))
                       ^~~~~~~~~~~~~~~~~~~
   include/linux/page-flags.h:698:1: note: Returning zero, which participates 
in a condition later
   TESTPAGEFLAG_FALSE(TransTail)
   ^
   include/linux/page-flags.h:305:58: note: expanded from macro 
'TESTPAGEFLAG_FALSE'
   static inline int Page##uname(const struct page *page) { return 0; }
                                                            ^~~~~~~~
   mm/vmscan.c:4278:7: note: Returning from 'PageTransTail'
                   if (PageTransTail(page))
                       ^~~~~~~~~~~~~~~~~~~
   mm/vmscan.c:4278:3: note: Taking false branch
                   if (PageTransTail(page))
                   ^
   mm/vmscan.c:4285:8: note: Calling 'TestClearPageLRU'
                   if (!TestClearPageLRU(page))
                        ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/page-flags.h:337:2: note: '?' condition is true
           TESTCLEARFLAG(LRU, lru, PF_HEAD)
           ^
   include/linux/page-flags.h:288:11: note: expanded from macro 'TESTCLEARFLAG'
           { return test_and_clear_bit(PG_##lname, &policy(page, 1)->flags); }
                    ^
   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))
            ^
   include/linux/page-flags.h:337:2: note: Calling 
'____atomic_test_and_clear_bit'
           TESTCLEARFLAG(LRU, lru, PF_HEAD)
           ^
   include/linux/page-flags.h:288:11: note: expanded from macro 'TESTCLEARFLAG'
           { return test_and_clear_bit(PG_##lname, &policy(page, 1)->flags); }
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   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:30: note: expanded from macro 
'ATOMIC_BITOP'
           (__builtin_constant_p(nr) ? ____atomic_##name(nr, p) : _##name(nr,p))
                                       ^~~~~~~~~~~~~~~~~~~~~~~~
   note: expanded from here
   arch/arm/include/asm/bitops.h:98:2: note: Loop condition is false.  Exiting 
loop
           raw_local_irq_save(flags);
           ^
   include/linux/irqflags.h:158:2: note: expanded from macro 
'raw_local_irq_save'
           do {                                            \
           ^
   arch/arm/include/asm/bitops.h:101:2: note: Loop condition is false.  Exiting 
loop
           raw_local_irq_restore(flags);
           ^
   include/linux/irqflags.h:163:2: note: expanded from macro 
'raw_local_irq_restore'
           do {                                            \
           ^
   arch/arm/include/asm/bitops.h:103:9: note: Assuming the condition is true
           return (res & mask) != 0;
                  ^~~~~~~~~~~~~~~~~
   arch/arm/include/asm/bitops.h:103:2: note: Returning the value 1, which 
participates in a condition later
           return (res & mask) != 0;
           ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/page-flags.h:337:2: note: Returning from 
'____atomic_test_and_clear_bit'
           TESTCLEARFLAG(LRU, lru, PF_HEAD)
           ^
   include/linux/page-flags.h:288:11: note: expanded from macro 'TESTCLEARFLAG'
           { return test_and_clear_bit(PG_##lname, &policy(page, 1)->flags); }
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   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:30: note: expanded from macro 
'ATOMIC_BITOP'
           (__builtin_constant_p(nr) ? ____atomic_##name(nr, p) : _##name(nr,p))
                                       ^~~~~~~~~~~~~~~~~~~~~~~~
   note: expanded from here
   include/linux/page-flags.h:337:2: note: Returning the value 1, which 
participates in a condition later
           TESTCLEARFLAG(LRU, lru, PF_HEAD)
           ^
   include/linux/page-flags.h:288:4: note: expanded from macro 'TESTCLEARFLAG'
           { return test_and_clear_bit(PG_##lname, &policy(page, 1)->flags); }
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/vmscan.c:4285:8: note: Returning from 'TestClearPageLRU'
                   if (!TestClearPageLRU(page))
                        ^~~~~~~~~~~~~~~~~~~~~~
   mm/vmscan.c:4285:3: note: Taking false branch
                   if (!TestClearPageLRU(page))
                   ^
   mm/vmscan.c:4289:7: note: Assuming 'lruvec' is equal to 'new_lruvec'
                   if (lruvec != new_lruvec) {
                       ^~~~~~~~~~~~~~~~~~~~
--
   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.
   4 warnings generated.
   Suppressed 4 warnings (4 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.
   4 warnings generated.
   Suppressed 4 warnings (4 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.
   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.
   3 warnings generated.
   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.
   7 warnings generated.
   drivers/misc/eeprom/idt_89hpesx.c:977:3: warning: Value stored to 
'csraddr_len' is never read [clang-analyzer-deadcode.DeadStores]
                   csraddr_len = strnlen(csraddr_str, count);
                   ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/misc/eeprom/idt_89hpesx.c:977:3: note: Value stored to 'csraddr_len' 
is never read
                   csraddr_len = strnlen(csraddr_str, count);
                   ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 6 warnings (3 in non-user code, 3 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.
   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.
   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.
   5 warnings generated.
   Suppressed 5 warnings (5 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.
   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.
   3 warnings generated.
   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.
   3 warnings generated.
   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.
   4 warnings generated.
   Suppressed 4 warnings (4 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.
   5 warnings generated.
   mm/oom_kill.c:257:17: warning: Value stored to 'highest_zoneidx' during its 
initialization is never read [clang-analyzer-deadcode.DeadStores]
           enum zone_type highest_zoneidx = gfp_zone(oc->gfp_mask);
                          ^~~~~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~
   mm/oom_kill.c:257:17: note: Value stored to 'highest_zoneidx' during its 
initialization is never read
           enum zone_type highest_zoneidx = gfp_zone(oc->gfp_mask);
                          ^~~~~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 4 warnings (4 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.
   4 warnings generated.
   Suppressed 4 warnings (4 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.
   5 warnings generated.
   mm/page-writeback.c:1408:14: warning: The result of the left shift is 
undefined because the right operand is negative 
[clang-analyzer-core.UndefinedBinaryOperatorResult]
                   return 1UL << (ilog2(thresh - dirty) >> 1);
                              ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/page-writeback.c:1407:6: note: Assuming 'thresh' is > 'dirty'
           if (thresh > dirty)
               ^~~~~~~~~~~~~~
   mm/page-writeback.c:1407:2: note: Taking true branch
           if (thresh > dirty)
           ^
   mm/page-writeback.c:1408:18: note: '?' condition is false
                   return 1UL << (ilog2(thresh - dirty) >> 1);
                                  ^
   include/linux/log2.h:158:2: note: expanded from macro 'ilog2'
           __builtin_constant_p(n) ?       \
           ^
   mm/page-writeback.c:1408:18: note: '?' condition is true
                   return 1UL << (ilog2(thresh - dirty) >> 1);
                                  ^
   include/linux/log2.h:160:2: note: expanded from macro 'ilog2'
           (sizeof(n) <= 4) ?              \
           ^
   mm/page-writeback.c:1408:14: note: The result of the left shift is undefined 
because the right operand is negative
                   return 1UL << (ilog2(thresh - dirty) >> 1);
                              ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 4 warnings (4 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.
   4 warnings generated.
   Suppressed 4 warnings (4 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.
   5 warnings generated.
>> include/linux/mmzone.h:870:9: warning: Access to field 'pgdat' results in a 
>> dereference of a null pointer (loaded from variable 'lruvec') 
>> [clang-analyzer-core.NullDereference]
           return lruvec->pgdat;
                  ^
   mm/swap.c:851:2: note: Calling 'lru_add_drain'
           lru_add_drain();
           ^~~~~~~~~~~~~~~
   mm/swap.c:726:2: note: Loop condition is false.  Exiting loop
           local_lock(&lru_pvecs.lock);
           ^
   include/linux/local_lock.h:16:27: note: expanded from macro 'local_lock'
   #define local_lock(lock)                __local_lock(lock)
                                           ^
   include/linux/local_lock_internal.h:58:3: note: expanded from macro 
'__local_lock'
                   preempt_disable();                              \
                   ^
   include/linux/preempt.h:169:27: note: expanded from macro 'preempt_disable'
   #define preempt_disable() \
                             ^
   mm/swap.c:726:2: note: Loop condition is false.  Exiting loop
           local_lock(&lru_pvecs.lock);
           ^
   include/linux/local_lock.h:16:27: note: expanded from macro 'local_lock'
   #define local_lock(lock)                __local_lock(lock)
                                           ^
   include/linux/local_lock_internal.h:59:22: note: expanded from macro 
'__local_lock'
                   local_lock_acquire(this_cpu_ptr(lock));         \
                                      ^
   include/linux/percpu-defs.h:265:27: note: expanded from macro 'this_cpu_ptr'
   #define this_cpu_ptr(ptr)       raw_cpu_ptr(ptr)
                                   ^
   note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   include/linux/percpu-defs.h:263:47: note: expanded from macro 'per_cpu_ptr'
   #define per_cpu_ptr(ptr, cpu)   ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                   ^
   include/linux/percpu-defs.h:259:2: note: expanded from macro 
'VERIFY_PERCPU_PTR'
           __verify_pcpu_ptr(__p);                                         \
           ^
   include/linux/percpu-defs.h:217:37: note: expanded from macro 
'__verify_pcpu_ptr'
   #define __verify_pcpu_ptr(ptr)                                          \
                                                                           ^
   mm/swap.c:726:2: note: Loop condition is false.  Exiting loop
           local_lock(&lru_pvecs.lock);
           ^
   include/linux/local_lock.h:16:27: note: expanded from macro 'local_lock'
   #define local_lock(lock)                __local_lock(lock)
                                           ^
   include/linux/local_lock_internal.h:57:2: note: expanded from macro 
'__local_lock'
           do {                                                    \
           ^
   mm/swap.c:727:2: note: Calling 'lru_add_drain_cpu'
           lru_add_drain_cpu(smp_processor_id());
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/swap.c:620:26: note: Loop condition is false.  Exiting loop
           struct pagevec *pvec = &per_cpu(lru_pvecs.lru_add, cpu);
                                   ^
   include/linux/percpu-defs.h:269:29: note: expanded from macro 'per_cpu'
   #define per_cpu(var, cpu)       (*per_cpu_ptr(&(var), cpu))
                                     ^
   include/linux/percpu-defs.h:263:47: note: expanded from macro 'per_cpu_ptr'
   #define per_cpu_ptr(ptr, cpu)   ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                   ^
   include/linux/percpu-defs.h:259:2: note: expanded from macro 
'VERIFY_PERCPU_PTR'
           __verify_pcpu_ptr(__p);                                         \
           ^
   include/linux/percpu-defs.h:217:37: note: expanded from macro 
'__verify_pcpu_ptr'
   #define __verify_pcpu_ptr(ptr)                                          \
                                                                           ^
   mm/swap.c:622:6: note: Assuming the condition is false
           if (pagevec_count(pvec))
               ^~~~~~~~~~~~~~~~~~~
   mm/swap.c:622:2: note: Taking false branch
           if (pagevec_count(pvec))
           ^
   mm/swap.c:625:10: note: Loop condition is false.  Exiting loop
           pvec = &per_cpu(lru_rotate.pvec, cpu);
                   ^
   include/linux/percpu-defs.h:269:29: note: expanded from macro 'per_cpu'
   #define per_cpu(var, cpu)       (*per_cpu_ptr(&(var), cpu))
                                     ^
   include/linux/percpu-defs.h:263:47: note: expanded from macro 'per_cpu_ptr'
   #define per_cpu_ptr(ptr, cpu)   ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                   ^
   include/linux/percpu-defs.h:259:2: note: expanded from macro 
'VERIFY_PERCPU_PTR'
           __verify_pcpu_ptr(__p);                                         \
           ^
   include/linux/percpu-defs.h:217:37: note: expanded from macro 
'__verify_pcpu_ptr'
   #define __verify_pcpu_ptr(ptr)                                          \
                                                                           ^
   mm/swap.c:627:6: note: Assuming the condition is false
           if (data_race(pagevec_count(pvec))) {
               ^
   include/linux/compiler.h:204:31: note: expanded from macro 'data_race'
   #define data_race(expr)                                                 \
                                                                           ^
   mm/swap.c:627:2: note: Taking false branch
           if (data_race(pagevec_count(pvec))) {
           ^
   mm/swap.c:636:10: note: Loop condition is false.  Exiting loop
           pvec = &per_cpu(lru_pvecs.lru_deactivate_file, cpu);
                   ^
   include/linux/percpu-defs.h:269:29: note: expanded from macro 'per_cpu'

vim +870 include/linux/mmzone.h

7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29  866  
599d0c954f91d0 Mel Gorman            2016-07-28  867  static inline struct 
pglist_data *lruvec_pgdat(struct lruvec *lruvec)
7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29  868  {
c255a458055e45 Andrew Morton         2012-07-31  869  #ifdef CONFIG_MEMCG
599d0c954f91d0 Mel Gorman            2016-07-28 @870    return lruvec->pgdat;
7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29  871  #else
867e5e1de14b2b Johannes Weiner       2019-11-30  872    return 
container_of(lruvec, struct pglist_data, __lruvec);
7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29  873  #endif
7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29  874  }
7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29  875  

:::::: The code at line 870 was first introduced by commit
:::::: 599d0c954f91d0689c9bb421b5bc04ea02437a41 mm, vmscan: move LRU lists to 
node

:::::: TO: Mel Gorman <[email protected]>
:::::: CC: Linus Torvalds <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to