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]
