CC: [email protected]
CC: [email protected]
BCC: [email protected]
CC: Linux Memory Management List <[email protected]>
TO: Yu Zhao <[email protected]>
CC: Andrew Morton <[email protected]>
CC: Linux Memory Management List <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 
master
head:   f1244c81da13009dbf61cb807f45881501c44789
commit: c81723809cc65cac8155686768dcf75db38f3b57 [4074/4957] mm: multi-gen LRU: 
groundwork
:::::: branch date: 20 hours ago
:::::: commit date: 4 days ago
config: riscv-randconfig-c006-20220420 
(https://download.01.org/0day-ci/archive/20220421/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 
bac6cd5bf85669e3376610cfc4c4f9ca015e7b9b)
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/next/linux-next.git/commit/?id=c81723809cc65cac8155686768dcf75db38f3b57
        git remote add linux-next 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout c81723809cc65cac8155686768dcf75db38f3b57
        # save the config file
        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 >>)
   include/linux/minmax.h:104:27: note: expanded from macro 'min_t'
   #define min_t(type, x, y)       __careful_cmp((type)(x), (type)(y), <)
                                   ^
   include/linux/minmax.h:37:3: note: expanded from macro '__careful_cmp'
                   __cmp(x, y, op), \
                   ^
   include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^
   mm/compaction.c:1480:15: note: Assuming '__UNIQUE_ID___x346' is <= 
'__UNIQUE_ID___y347'
                                   highest = max(pageblock_start_pfn(pfn),
                                             ^
   include/linux/minmax.h:52:19: note: expanded from macro 'max'
   #define max(x, y)       __careful_cmp(x, y, >)
                           ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
                   __cmp(unique_x, unique_y, op); })
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^~~~~~~~~~
   mm/compaction.c:1480:15: note: '?' condition is false
                                   highest = max(pageblock_start_pfn(pfn),
                                             ^
   include/linux/minmax.h:52:19: note: expanded from macro 'max'
   #define max(x, y)       __careful_cmp(x, y, >)
                           ^
   include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ^
   include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
                   __cmp(unique_x, unique_y, op); })
                   ^
   include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^
   mm/compaction.c:1483:8: note: Assuming 'pfn' is >= 'low_pfn'
                           if (pfn >= low_pfn) {
                               ^~~~~~~~~~~~~~
   mm/compaction.c:1483:4: note: Taking true branch
                           if (pfn >= low_pfn) {
                           ^
   mm/compaction.c:1487:5: note:  Execution continues on line 1502
                                   break;
                                   ^
   mm/compaction.c:1502:7: note: Assuming pointer value is null
                   if (!page && high_pfn) {
                       ^~~~~
   mm/compaction.c:1502:7: note: Assuming 'page' is null
                   if (!page && high_pfn) {
                       ^~~~~
   mm/compaction.c:1502:7: note: Left side of '&&' is true
   mm/compaction.c:1502:16: note: 'high_pfn' is 0
                   if (!page && high_pfn) {
                                ^~~~~~~~
   mm/compaction.c:1502:3: note: Taking false branch
                   if (!page && high_pfn) {
                   ^
   mm/compaction.c:1510:3: note: Calling 'move_freelist_head'
                   move_freelist_head(freelist, freepage);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/compaction.c:1335:6: note: Assuming the condition is true
           if (!list_is_last(freelist, &freepage->lru)) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/compaction.c:1335:2: note: Taking true branch
           if (!list_is_last(freelist, &freepage->lru)) {
           ^
   mm/compaction.c:1336:3: note: Calling 'list_cut_before'
                   list_cut_before(&sublist, freelist, &freepage->lru);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:430:6: note: Assuming 'entry' is equal to field 'next'
           if (head->next == entry) {
               ^~~~~~~~~~~~~~~~~~~
   include/linux/list.h:430:2: note: Taking true branch
           if (head->next == entry) {
           ^
   include/linux/list.h:432:3: note: Returning without writing to 'head->prev'
                   return;
                   ^
   mm/compaction.c:1336:3: note: Returning from 'list_cut_before'
                   list_cut_before(&sublist, freelist, &freepage->lru);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/compaction.c:1337:3: note: Calling 'list_splice_tail'
                   list_splice_tail(&sublist, freelist);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:476:2: note: Taking true branch
           if (!list_empty(list))
           ^
   include/linux/list.h:477:23: note: Passing null pointer value via 2nd 
parameter 'prev'
                   __list_splice(list, head->prev, head);
                                       ^~~~~~~~~~
   include/linux/list.h:477:3: note: Calling '__list_splice'
                   __list_splice(list, head->prev, head);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:450:13: note: Access to field 'next' results in a 
dereference of a null pointer (loaded from variable 'prev')
           prev->next = first;
           ~~~~       ^
>> include/linux/mm_inline.h:126:26: warning: Dereference of null pointer 
>> [clang-analyzer-core.NullDereference]
           unsigned long max_seq = lruvec->lrugen.max_seq;
                                   ^
   mm/compaction.c:823:2: note: Loop condition is false. Execution continues on 
line 838
           while (unlikely(too_many_isolated(pgdat))) {
           ^
   mm/compaction.c:840:6: note: Assuming field 'direct_compaction' is false
           if (cc->direct_compaction && (cc->mode == MIGRATE_ASYNC)) {
               ^~~~~~~~~~~~~~~~~~~~~
   mm/compaction.c:840:28: note: Left side of '&&' is false
           if (cc->direct_compaction && (cc->mode == MIGRATE_ASYNC)) {
                                     ^
   mm/compaction.c:846:9: note: Assuming 'low_pfn' is < 'end_pfn'
           for (; low_pfn < end_pfn; low_pfn++) {
                  ^~~~~~~~~~~~~~~~~
   mm/compaction.c:846:2: note: Loop condition is true.  Entering loop body
           for (; low_pfn < end_pfn; low_pfn++) {
           ^
   mm/compaction.c:848:7: note: 'skip_on_failure' is false
                   if (skip_on_failure && low_pfn >= next_skip_pfn) {
                       ^~~~~~~~~~~~~~~
   mm/compaction.c:848:23: note: Left side of '&&' is false
                   if (skip_on_failure && low_pfn >= next_skip_pfn) {
                                       ^
   mm/compaction.c:875:7: note: Assuming the condition is false
                   if (!(low_pfn % SWAP_CLUSTER_MAX)) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/compaction.c:875:3: note: Taking false branch
                   if (!(low_pfn % SWAP_CLUSTER_MAX)) {
                   ^
   mm/compaction.c:901:8: note: 'valid_page' is null
                   if (!valid_page && IS_ALIGNED(low_pfn, pageblock_nr_pages)) {
                        ^~~~~~~~~~
   mm/compaction.c:901:7: note: Left side of '&&' is true
                   if (!valid_page && IS_ALIGNED(low_pfn, pageblock_nr_pages)) {
                       ^
   mm/compaction.c:901:42: note: '?' condition is false
                   if (!valid_page && IS_ALIGNED(low_pfn, pageblock_nr_pages)) {
                                                          ^
   include/linux/pageblock-flags.h:55:36: note: expanded from macro 
'pageblock_nr_pages'
   #define pageblock_nr_pages      (1UL << pageblock_order)
                                           ^
   include/linux/pageblock-flags.h:44:26: note: expanded from macro 
'pageblock_order'
   #define pageblock_order         min_t(unsigned int, HUGETLB_PAGE_ORDER, 
MAX_ORDER - 1)
                                   ^
   include/linux/minmax.h:104:27: note: expanded from macro 'min_t'
   #define min_t(type, x, y)       __careful_cmp((type)(x), (type)(y), <)
                                   ^
   include/linux/minmax.h:37:3: note: expanded from macro '__careful_cmp'
                   __cmp(x, y, op), \
                   ^
   include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^
   mm/compaction.c:901:22: note: Assuming the condition is false
                   if (!valid_page && IS_ALIGNED(low_pfn, pageblock_nr_pages)) {
                                      ^
   include/linux/align.h:13:28: note: expanded from macro 'IS_ALIGNED'
   #define IS_ALIGNED(x, a)                (((x) & ((typeof(x))(a) - 1)) == 0)
                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/compaction.c:901:3: note: Taking false branch
                   if (!valid_page && IS_ALIGNED(low_pfn, pageblock_nr_pages)) {
                   ^
   mm/compaction.c:910:7: note: Assuming the condition is false
                   if (PageHuge(page) && cc->alloc_contig) {
                       ^~~~~~~~~~~~~~
   mm/compaction.c:910:22: note: Left side of '&&' is false
                   if (PageHuge(page) && cc->alloc_contig) {
                                      ^
   mm/compaction.c:948:3: note: Taking false branch
                   if (PageBuddy(page)) {
                   ^
   mm/compaction.c:969:7: note: Assuming the condition is false
                   if (PageCompound(page) && !cc->alloc_contig) {
                       ^~~~~~~~~~~~~~~~~~
   mm/compaction.c:969:26: note: Left side of '&&' is false
                   if (PageCompound(page) && !cc->alloc_contig) {
                                          ^
   mm/compaction.c:982:7: note: Assuming the condition is false
                   if (!PageLRU(page)) {
                       ^~~~~~~~~~~~~~
   mm/compaction.c:982:3: note: Taking false branch
                   if (!PageLRU(page)) {
                   ^
   mm/compaction.c:1007:7: note: Assuming 'mapping' is non-null
                   if (!mapping && page_count(page) > page_mapcount(page))
                       ^~~~~~~~
   mm/compaction.c:1007:16: note: Left side of '&&' is false
                   if (!mapping && page_count(page) > page_mapcount(page))
                                ^
   mm/compaction.c:1014:7: note: Assuming the condition is false
                   if (!(cc->gfp_mask & __GFP_FS) && mapping)
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/compaction.c:1014:34: note: Left side of '&&' is false
                   if (!(cc->gfp_mask & __GFP_FS) && mapping)
                                                  ^
   mm/compaction.c:1022:16: note: Assuming the condition is false
                   if (unlikely(!get_page_unless_zero(page)))
                                ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)

vim +126 include/linux/mm_inline.h

c81723809cc65c Yu Zhao 2022-04-13  123  
c81723809cc65c Yu Zhao 2022-04-13  124  static inline bool 
lru_gen_is_active(struct lruvec *lruvec, int gen)
c81723809cc65c Yu Zhao 2022-04-13  125  {
c81723809cc65c Yu Zhao 2022-04-13 @126          unsigned long max_seq = 
lruvec->lrugen.max_seq;
c81723809cc65c Yu Zhao 2022-04-13  127  
c81723809cc65c Yu Zhao 2022-04-13  128          VM_BUG_ON(gen >= MAX_NR_GENS);
c81723809cc65c Yu Zhao 2022-04-13  129  
c81723809cc65c Yu Zhao 2022-04-13  130          /* see the comment on 
MIN_NR_GENS */
c81723809cc65c Yu Zhao 2022-04-13  131          return gen == 
lru_gen_from_seq(max_seq) || gen == lru_gen_from_seq(max_seq - 1);
c81723809cc65c Yu Zhao 2022-04-13  132  }
c81723809cc65c Yu Zhao 2022-04-13  133  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to