CC: [email protected] CC: [email protected] CC: [email protected] TO: Srikar Dronamraju <[email protected]>
tree: https://github.com/srikard/linux.git fix_numa_depth head: b4a46662136d812879c3199bdd8aa95d47ccde92 commit: b4a46662136d812879c3199bdd8aa95d47ccde92 [7/7] powerpc/numa: Fill distance_lookup_table for offline nodes :::::: branch date: 34 hours ago :::::: commit date: 34 hours ago config: powerpc-randconfig-c003-20210818 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project d2b574a4dea5b718e4386bf2e26af0126e5978ce) 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 powerpc cross compiling tool for clang build # apt-get install binutils-powerpc64-linux-gnu # https://github.com/srikard/linux/commit/b4a46662136d812879c3199bdd8aa95d47ccde92 git remote add uprobes https://github.com/srikard/linux.git git fetch --no-tags uprobes fix_numa_depth git checkout b4a46662136d812879c3199bdd8aa95d47ccde92 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc 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 >>) 10 warnings generated. Suppressed 10 warnings (9 in non-user code, 1 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. 11 warnings generated. Suppressed 11 warnings (9 in non-user code, 2 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. 11 warnings generated. arch/powerpc/include/asm/bitops.h:89:11: warning: The result of the left shift is undefined because the right operand is negative [clang-analyzer-core.UndefinedBinaryOperatorResult] set_bits(BIT_MASK(nr), addr + BIT_WORD(nr)); ^ include/linux/bits.h:10:30: note: expanded from macro 'BIT_MASK' #define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG)) ^ arch/powerpc/mm/numa.c:1015:6: note: Calling 'parse_numa_properties' if (parse_numa_properties()) ^~~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/mm/numa.c:702:6: note: Assuming 'numa_enabled' is not equal to 0 if (numa_enabled == 0) { ^~~~~~~~~~~~~~~~~ arch/powerpc/mm/numa.c:702:2: note: Taking false branch if (numa_enabled == 0) { ^ arch/powerpc/mm/numa.c:709:6: note: 'min_common_depth' is >= 0 if (min_common_depth < 0) { ^~~~~~~~~~~~~~~~ arch/powerpc/mm/numa.c:709:2: note: Taking false branch if (min_common_depth < 0) { ^ arch/powerpc/mm/numa.c:718:2: note: Assuming 'numa_debug' is 0 dbg("NUMA associativity depth for CPU/Memory: %d\n", min_common_depth); ^ arch/powerpc/mm/numa.c:44:26: note: expanded from macro 'dbg' #define dbg(args...) if (numa_debug) { printk(KERN_INFO args); } ^~~~~~~~~~ arch/powerpc/mm/numa.c:718:2: note: Taking false branch dbg("NUMA associativity depth for CPU/Memory: %d\n", min_common_depth); ^ arch/powerpc/mm/numa.c:44:22: note: expanded from macro 'dbg' #define dbg(args...) if (numa_debug) { printk(KERN_INFO args); } ^ arch/powerpc/mm/numa.c:725:2: note: Assuming 'i' is < 'nr_cpu_ids' for_each_present_cpu(i) { ^ include/linux/cpumask.h:790:36: note: expanded from macro 'for_each_present_cpu' #define for_each_present_cpu(cpu) for_each_cpu((cpu), cpu_present_mask) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/cpumask.h:243:3: note: expanded from macro 'for_each_cpu' (cpu) < nr_cpu_ids;) ^~~~~~~~~~~~~~~~~~ arch/powerpc/mm/numa.c:725:2: note: Loop condition is true. Entering loop body for_each_present_cpu(i) { ^ include/linux/cpumask.h:790:36: note: expanded from macro 'for_each_present_cpu' #define for_each_present_cpu(cpu) for_each_cpu((cpu), cpu_present_mask) ^ include/linux/cpumask.h:241:2: note: expanded from macro 'for_each_cpu' for ((cpu) = -1; \ ^ arch/powerpc/mm/numa.c:734:3: note: Taking true branch if (nid == NUMA_NO_NODE) { ^ arch/powerpc/mm/numa.c:736:11: note: Assuming 'cpu' is null BUG_ON(!cpu); ^ arch/powerpc/include/asm/bug.h:73:27: note: expanded from macro 'BUG_ON' if (__builtin_constant_p(x)) { \ ^ arch/powerpc/mm/numa.c:736:4: note: Taking false branch BUG_ON(!cpu); ^ arch/powerpc/include/asm/bug.h:73:2: note: expanded from macro 'BUG_ON' if (__builtin_constant_p(x)) { \ ^ arch/powerpc/mm/numa.c:736:4: note: Loop condition is false. Exiting loop BUG_ON(!cpu); ^ arch/powerpc/include/asm/bug.h:72:19: note: expanded from macro 'BUG_ON' #define BUG_ON(x) do { \ ^ arch/powerpc/mm/numa.c:741:3: note: Calling 'node_set_online' node_set_online(nid); ^~~~~~~~~~~~~~~~~~~~ include/linux/nodemask.h:453:2: note: Calling 'node_set_state' node_set_state(nid, N_ONLINE); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/nodemask.h:421:2: note: Calling '__node_set' __node_set(node, &node_states[state]); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/nodemask.h:130:2: note: Calling 'set_bit' set_bit(node, dstp->bits); ^~~~~~~~~~~~~~~~~~~~~~~~~ include/asm-generic/bitops/instrumented-atomic.h:29:2: note: Calling 'arch_set_bit' arch_set_bit(nr, addr); ^~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/include/asm/bitops.h:89:11: note: The result of the left shift is undefined because the right operand is negative set_bits(BIT_MASK(nr), addr + BIT_WORD(nr)); ^ include/linux/bits.h:10:30: note: expanded from macro 'BIT_MASK' #define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG)) ^ ~~~~~~~~~~~~~~~~~~~~~~ >> arch/powerpc/mm/numa.c:914:4: warning: 2nd function call argument is an >> uninitialized value [clang-analyzer-core.CallAndMessage] pr_warn("Levels(%d) not matching levels(%d)", nr_levels, nr_depth); ^ include/linux/printk.h:353:2: note: expanded from macro 'pr_warn' printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) ^ arch/powerpc/mm/numa.c:1015:2: note: Taking true branch if (parse_numa_properties()) ^ arch/powerpc/mm/numa.c:1032:2: note: Assuming 'cpu' is >= 'nr_cpu_ids' for_each_possible_cpu(cpu) { ^ include/linux/cpumask.h:788:36: note: expanded from macro 'for_each_possible_cpu' #define for_each_possible_cpu(cpu) for_each_cpu((cpu), cpu_possible_mask) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/cpumask.h:243:3: note: expanded from macro 'for_each_cpu' (cpu) < nr_cpu_ids;) ^~~~~~~~~~~~~~~~~~ arch/powerpc/mm/numa.c:1032:2: note: Loop condition is false. Execution continues on line 1043 for_each_possible_cpu(cpu) { ^ include/linux/cpumask.h:788:36: note: expanded from macro 'for_each_possible_cpu' #define for_each_possible_cpu(cpu) for_each_cpu((cpu), cpu_possible_mask) ^ include/linux/cpumask.h:241:2: note: expanded from macro 'for_each_cpu' for ((cpu) = -1; \ ^ arch/powerpc/mm/numa.c:1043:2: note: Calling 'fake_update_distance_lookup_table' fake_update_distance_lookup_table(); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/mm/numa.c:870:9: note: 'nr_levels' declared without an initial value int i, nr_levels, nr_depth, node; ^~~~~~~~~ arch/powerpc/mm/numa.c:872:6: note: Assuming 'numa_enabled' is not equal to 0 if (!numa_enabled) ^~~~~~~~~~~~~ arch/powerpc/mm/numa.c:872:2: note: Taking false branch if (!numa_enabled) ^ arch/powerpc/mm/numa.c:875:6: note: Assuming 'form1_affinity' is not equal to 0 if (!form1_affinity) ^~~~~~~~~~~~~~~ arch/powerpc/mm/numa.c:875:2: note: Taking false branch if (!form1_affinity) ^ arch/powerpc/mm/numa.c:885:10: note: Assuming the condition is false WARN_ON(nr_depth > sizeof(distance_map)); ^ arch/powerpc/include/asm/bug.h:84:25: note: expanded from macro 'WARN_ON' int __ret_warn_on = !!(x); \ ^ arch/powerpc/mm/numa.c:885:2: note: Taking false branch WARN_ON(nr_depth > sizeof(distance_map)); ^ arch/powerpc/include/asm/bug.h:85:2: note: expanded from macro 'WARN_ON' if (__builtin_constant_p(__ret_warn_on)) { \ ^ arch/powerpc/mm/numa.c:890:2: note: Loop condition is false. Execution continues on line 908 for_each_online_node(node) { ^ include/linux/nodemask.h:515:36: note: expanded from macro 'for_each_online_node' #define for_each_online_node(node) for_each_node_state(node, N_ONLINE) ^ include/linux/nodemask.h:435:2: note: expanded from macro 'for_each_node_state' for_each_node_mask((__node), node_states[__state]) ^ include/linux/nodemask.h:379:2: note: expanded from macro 'for_each_node_mask' for ((node) = first_node(mask); \ ^ arch/powerpc/mm/numa.c:908:2: note: Assuming the condition is true for_each_node(node) { ^ include/linux/nodemask.h:514:32: note: expanded from macro 'for_each_node' #define for_each_node(node) for_each_node_state(node, N_POSSIBLE) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/nodemask.h:435:2: note: expanded from macro 'for_each_node_state' for_each_node_mask((__node), node_states[__state]) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/nodemask.h:380:3: note: expanded from macro 'for_each_node_mask' (node) < MAX_NUMNODES; \ ^~~~~~~~~~~~~~~~~~~~~ arch/powerpc/mm/numa.c:908:2: note: Loop condition is true. Entering loop body for_each_node(node) { ^ include/linux/nodemask.h:514:32: note: expanded from macro 'for_each_node' #define for_each_node(node) for_each_node_state(node, N_POSSIBLE) ^ include/linux/nodemask.h:435:2: note: expanded from macro 'for_each_node_state' for_each_node_mask((__node), node_states[__state]) ^ include/linux/nodemask.h:379:2: note: expanded from macro 'for_each_node_mask' for ((node) = first_node(mask); \ ^ arch/powerpc/mm/numa.c:909:7: note: Assuming the condition is false if (node_online(node)) ^ include/linux/nodemask.h:511:27: note: expanded from macro 'node_online' #define node_online(node) node_state((node), N_ONLINE) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/mm/numa.c:909:3: note: Taking false branch if (node_online(node)) vim +914 arch/powerpc/mm/numa.c 4b703a231799f4 Anton Blanchard 2005-12-13 858 b4a46662136d81 Srikar Dronamraju 2021-06-03 859 /* b4a46662136d81 Srikar Dronamraju 2021-06-03 860 * Scheduler expects unique number of node distances to be available at b4a46662136d81 Srikar Dronamraju 2021-06-03 861 * boot. It uses node distance to calculate this unique node distances. On b4a46662136d81 Srikar Dronamraju 2021-06-03 862 * POWER, node distances for offline nodes is not available. However, POWER b4a46662136d81 Srikar Dronamraju 2021-06-03 863 * already knows unique possible node distances. Fake the offline node's b4a46662136d81 Srikar Dronamraju 2021-06-03 864 * distance_lookup_table entries so that all possible node distances are b4a46662136d81 Srikar Dronamraju 2021-06-03 865 * updated. b4a46662136d81 Srikar Dronamraju 2021-06-03 866 */ b4a46662136d81 Srikar Dronamraju 2021-06-03 867 static void __init fake_update_distance_lookup_table(void) b4a46662136d81 Srikar Dronamraju 2021-06-03 868 { b4a46662136d81 Srikar Dronamraju 2021-06-03 869 unsigned long distance_map; b4a46662136d81 Srikar Dronamraju 2021-06-03 870 int i, nr_levels, nr_depth, node; b4a46662136d81 Srikar Dronamraju 2021-06-03 871 b4a46662136d81 Srikar Dronamraju 2021-06-03 872 if (!numa_enabled) b4a46662136d81 Srikar Dronamraju 2021-06-03 873 return; b4a46662136d81 Srikar Dronamraju 2021-06-03 874 b4a46662136d81 Srikar Dronamraju 2021-06-03 875 if (!form1_affinity) b4a46662136d81 Srikar Dronamraju 2021-06-03 876 return; b4a46662136d81 Srikar Dronamraju 2021-06-03 877 b4a46662136d81 Srikar Dronamraju 2021-06-03 878 /* b4a46662136d81 Srikar Dronamraju 2021-06-03 879 * distance_ref_points_depth lists the unique numa domains b4a46662136d81 Srikar Dronamraju 2021-06-03 880 * available. However it ignore LOCAL_DISTANCE. So add +1 b4a46662136d81 Srikar Dronamraju 2021-06-03 881 * to get the actual number of unique distances. b4a46662136d81 Srikar Dronamraju 2021-06-03 882 */ b4a46662136d81 Srikar Dronamraju 2021-06-03 883 nr_depth = distance_ref_points_depth + 1; b4a46662136d81 Srikar Dronamraju 2021-06-03 884 b4a46662136d81 Srikar Dronamraju 2021-06-03 885 WARN_ON(nr_depth > sizeof(distance_map)); b4a46662136d81 Srikar Dronamraju 2021-06-03 886 b4a46662136d81 Srikar Dronamraju 2021-06-03 887 bitmap_zero(&distance_map, nr_depth); b4a46662136d81 Srikar Dronamraju 2021-06-03 888 bitmap_set(&distance_map, 0, 1); b4a46662136d81 Srikar Dronamraju 2021-06-03 889 b4a46662136d81 Srikar Dronamraju 2021-06-03 890 for_each_online_node(node) { b4a46662136d81 Srikar Dronamraju 2021-06-03 891 int nd, distance = LOCAL_DISTANCE; b4a46662136d81 Srikar Dronamraju 2021-06-03 892 b4a46662136d81 Srikar Dronamraju 2021-06-03 893 if (node == first_online_node) b4a46662136d81 Srikar Dronamraju 2021-06-03 894 continue; b4a46662136d81 Srikar Dronamraju 2021-06-03 895 b4a46662136d81 Srikar Dronamraju 2021-06-03 896 nd = __node_distance(node, first_online_node); b4a46662136d81 Srikar Dronamraju 2021-06-03 897 for (i = 0; i < nr_depth; i++, distance *= 2) { b4a46662136d81 Srikar Dronamraju 2021-06-03 898 if (distance == nd) { b4a46662136d81 Srikar Dronamraju 2021-06-03 899 bitmap_set(&distance_map, i, 1); b4a46662136d81 Srikar Dronamraju 2021-06-03 900 break; b4a46662136d81 Srikar Dronamraju 2021-06-03 901 } b4a46662136d81 Srikar Dronamraju 2021-06-03 902 } b4a46662136d81 Srikar Dronamraju 2021-06-03 903 nr_levels = bitmap_weight(&distance_map, nr_depth); b4a46662136d81 Srikar Dronamraju 2021-06-03 904 if (nr_levels == nr_depth) b4a46662136d81 Srikar Dronamraju 2021-06-03 905 return; b4a46662136d81 Srikar Dronamraju 2021-06-03 906 } b4a46662136d81 Srikar Dronamraju 2021-06-03 907 b4a46662136d81 Srikar Dronamraju 2021-06-03 908 for_each_node(node) { b4a46662136d81 Srikar Dronamraju 2021-06-03 909 if (node_online(node)) b4a46662136d81 Srikar Dronamraju 2021-06-03 910 continue; b4a46662136d81 Srikar Dronamraju 2021-06-03 911 b4a46662136d81 Srikar Dronamraju 2021-06-03 912 i = find_first_zero_bit(&distance_map, nr_depth); b4a46662136d81 Srikar Dronamraju 2021-06-03 913 if (i >= nr_depth || i == 0) { b4a46662136d81 Srikar Dronamraju 2021-06-03 @914 pr_warn("Levels(%d) not matching levels(%d)", nr_levels, nr_depth); b4a46662136d81 Srikar Dronamraju 2021-06-03 915 return; b4a46662136d81 Srikar Dronamraju 2021-06-03 916 } b4a46662136d81 Srikar Dronamraju 2021-06-03 917 b4a46662136d81 Srikar Dronamraju 2021-06-03 918 bitmap_set(&distance_map, i, 1); b4a46662136d81 Srikar Dronamraju 2021-06-03 919 while (i--) b4a46662136d81 Srikar Dronamraju 2021-06-03 920 distance_lookup_table[node][i] = node; b4a46662136d81 Srikar Dronamraju 2021-06-03 921 b4a46662136d81 Srikar Dronamraju 2021-06-03 922 nr_levels = bitmap_weight(&distance_map, nr_depth); b4a46662136d81 Srikar Dronamraju 2021-06-03 923 if (nr_levels == nr_depth) b4a46662136d81 Srikar Dronamraju 2021-06-03 924 return; b4a46662136d81 Srikar Dronamraju 2021-06-03 925 } b4a46662136d81 Srikar Dronamraju 2021-06-03 926 } b4a46662136d81 Srikar Dronamraju 2021-06-03 927 --- 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]
