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:   d992fe5318d8d7af9510b879439a3c7f283da442
commit: 6168d0da2b479ce25a4647de194045de1bdd1f1d mm/lru: replace pgdat lru_lock 
with lruvec lock
date:   8 months ago
:::::: branch date: 14 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/base/cacheinfo.c:271:3: note: Value assigned to 'this_leaf'
                   this_leaf = this_cpu_ci->info_list + index;
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/base/cacheinfo.c:272:3: note: Loop condition is true.  Entering loop 
body
                   for_each_cpu(sibling, &this_leaf->shared_cpu_map) {
                   ^
   include/linux/cpumask.h:208:2: note: expanded from macro 'for_each_cpu'
           for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
           ^
   drivers/base/cacheinfo.c:275:8: note: 'sibling' is not equal to 'cpu'
                           if (sibling == cpu) /* skip itself */
                               ^~~~~~~
   drivers/base/cacheinfo.c:275:4: note: Taking false branch
                           if (sibling == cpu) /* skip itself */
                           ^
   drivers/base/cacheinfo.c:279:8: note: Assuming field 'info_list' is null
                           if (!sib_cpu_ci->info_list)
                               ^~~~~~~~~~~~~~~~~~~~~~
   drivers/base/cacheinfo.c:279:4: note: Taking true branch
                           if (!sib_cpu_ci->info_list)
                           ^
   drivers/base/cacheinfo.c:280:5: note:  Execution continues on line 272
                                   continue;
                                   ^
   drivers/base/cacheinfo.c:272:3: note: Loop condition is false. Execution 
continues on line 286
                   for_each_cpu(sibling, &this_leaf->shared_cpu_map) {
                   ^
   include/linux/cpumask.h:208:2: note: expanded from macro 'for_each_cpu'
           for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
           ^
   drivers/base/cacheinfo.c:286:7: note: Calling 'of_have_populated_dt'
                   if (of_have_populated_dt())
                       ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/of.h:180:9: note: Assuming 'of_root' is not equal to NULL
           return of_root != NULL;
                  ^~~~~~~~~~~~~~~
   include/linux/of.h:180:2: note: Returning the value 1, which participates in 
a condition later
           return of_root != NULL;
           ^~~~~~~~~~~~~~~~~~~~~~
   drivers/base/cacheinfo.c:286:7: note: Returning from 'of_have_populated_dt'
                   if (of_have_populated_dt())
                       ^~~~~~~~~~~~~~~~~~~~~~
   drivers/base/cacheinfo.c:286:3: note: Taking true branch
                   if (of_have_populated_dt())
                   ^
   drivers/base/cacheinfo.c:287:16: note: Access to field 'fw_token' results in 
a dereference of a null pointer (loaded from variable 'this_leaf')
                           of_node_put(this_leaf->fw_token);
                                       ^~~~~~~~~
   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.
   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'
--
                   async = list_first_entry_or_null(&map->async_free,
                           ^
   include/linux/list.h:545:28: note: expanded from macro 
'list_first_entry_or_null'
           struct list_head *pos__ = READ_ONCE(head__->next); \
                                     ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:2: note: expanded from macro 
'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long 
long),  \
           ^
   include/linux/compiler_types.h:315:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:303:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:293:2: note: expanded from macro 
'__compiletime_assert'
           do {                                                            \
           ^
   drivers/base/regmap/regmap.c:1486:11: note: Assuming 'pos__' is not equal to 
'head__'
                   async = list_first_entry_or_null(&map->async_free,
                           ^
   include/linux/list.h:546:2: note: expanded from macro 
'list_first_entry_or_null'
           pos__ != head__ ? list_entry(pos__, type, member) : NULL; \
           ^~~~~~~~~~~~~~~
   drivers/base/regmap/regmap.c:1486:11: note: '?' condition is true
                   async = list_first_entry_or_null(&map->async_free,
                           ^
   include/linux/list.h:546:2: note: expanded from macro 
'list_first_entry_or_null'
           pos__ != head__ ? list_entry(pos__, type, member) : NULL; \
           ^
   drivers/base/regmap/regmap.c:1486:11: note: Left side of '&&' is false
                   async = list_first_entry_or_null(&map->async_free,
                           ^
   include/linux/list.h:546:20: note: expanded from macro 
'list_first_entry_or_null'
           pos__ != head__ ? list_entry(pos__, type, member) : NULL; \
                             ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:861:61: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
                                                                      ^
   drivers/base/regmap/regmap.c:1486:11: note: Taking false branch
                   async = list_first_entry_or_null(&map->async_free,
                           ^
   include/linux/list.h:546:20: note: expanded from macro 
'list_first_entry_or_null'
           pos__ != head__ ? list_entry(pos__, type, member) : NULL; \
                             ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:861:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   include/linux/compiler_types.h:315:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:303:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:295:3: note: expanded from macro 
'__compiletime_assert'
                   if (!(condition))                                       \
                   ^
   drivers/base/regmap/regmap.c:1486:11: note: Loop condition is false.  
Exiting loop
                   async = list_first_entry_or_null(&map->async_free,
                           ^
   include/linux/list.h:546:20: note: expanded from macro 
'list_first_entry_or_null'
           pos__ != head__ ? list_entry(pos__, type, member) : NULL; \
                             ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:861:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   include/linux/compiler_types.h:315:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:303:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:293:2: note: expanded from macro 
'__compiletime_assert'
           do {                                                            \
           ^
   drivers/base/regmap/regmap.c:1489:3: note: Calling 'list_del'
                   list_del(&async->list);
                   ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:147:14: note: Use of memory after it is freed
           entry->next = LIST_POISON1;
           ~~~~~~~~~~~ ^
   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.
   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) {
                       ^~~~~~~~~~~~~~~~~~~~

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