CC: [email protected] CC: [email protected] CC: [email protected] TO: Haiyang Zhang <[email protected]> CC: Wei Liu <[email protected]> CC: Michael Kelley <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: a763d5a5abd65797aec3dd1bf01fe2ccbec32967 commit: 7c9ff3deeee61b253715dcf968a6307af148c9b2 Drivers: hv: vmbus: Fix duplicate CPU assignments within a device date: 5 months ago :::::: branch date: 10 hours ago :::::: commit date: 5 months ago config: x86_64-randconfig-c007-20211202 (https://download.01.org/0day-ci/archive/20211212/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 4b553297ef3ee4dc2119d5429adf3072e90fac38) 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 # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7c9ff3deeee61b253715dcf968a6307af148c9b2 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 7c9ff3deeee61b253715dcf968a6307af148c9b2 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 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 >>) ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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. 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. 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. 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. 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. 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. 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. 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. 8 warnings generated. drivers/w1/slaves/w1_ds28e17.c:723:2: warning: Call to function 'strcat' 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 'strlcat'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcat(data->adapter.name, sl->name); ^~~~~~ drivers/w1/slaves/w1_ds28e17.c:723:2: note: Call to function 'strcat' 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 'strlcat'. CWE-119 strcat(data->adapter.name, sl->name); ^~~~~~ Suppressed 7 warnings (7 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. 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. 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. 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. 7 warnings generated. Suppressed 7 warnings (7 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. 7 warnings generated. Suppressed 7 warnings (7 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. 7 warnings generated. Suppressed 7 warnings (7 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. Suppressed 7 warnings (7 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. 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. 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. 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. 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. 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. 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. 6 warnings generated. Suppressed 6 warnings (6 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. Suppressed 7 warnings (7 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. 6 warnings generated. Suppressed 6 warnings (6 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. 6 warnings generated. Suppressed 6 warnings (6 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. 6 warnings generated. Suppressed 6 warnings (6 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/hv/channel_mgmt.c:785:22: warning: Assigned value is garbage or >> undefined [clang-analyzer-core.uninitialized.Assign] channel->target_cpu = target_cpu; ^ drivers/hv/channel_mgmt.c:608:2: note: Left side of '&&' is false list_for_each_entry(channel, &vmbus_connection.chn_list, listentry) { ^ include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry' for (pos = list_first_entry(head, typeof(*pos), member); \ ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:495:61: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ drivers/hv/channel_mgmt.c:608:2: note: Taking false branch list_for_each_entry(channel, &vmbus_connection.chn_list, listentry) { ^ include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry' for (pos = list_first_entry(head, typeof(*pos), member); \ ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:308:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ drivers/hv/channel_mgmt.c:608:2: note: Loop condition is false. Exiting loop list_for_each_entry(channel, &vmbus_connection.chn_list, listentry) { ^ include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry' for (pos = list_first_entry(head, typeof(*pos), member); \ ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:306:2: note: expanded from macro '__compiletime_assert' do { \ ^ drivers/hv/channel_mgmt.c:608:2: note: Loop condition is false. Execution continues on line 619 list_for_each_entry(channel, &vmbus_connection.chn_list, listentry) { ^ include/linux/list.h:628:2: note: expanded from macro 'list_for_each_entry' for (pos = list_first_entry(head, typeof(*pos), member); \ ^ drivers/hv/channel_mgmt.c:619:2: note: Calling 'init_vp_index' init_vp_index(newchannel); ^~~~~~~~~~~~~~~~~~~~~~~~~ drivers/hv/channel_mgmt.c:732:2: note: 'target_cpu' declared without an initial value u32 target_cpu; ^~~~~~~~~~~~~~ drivers/hv/channel_mgmt.c:735:7: note: Assuming the condition is false if ((vmbus_proto_version == VERSION_WS2008) || ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/hv/channel_mgmt.c:735:6: note: Left side of '||' is false if ((vmbus_proto_version == VERSION_WS2008) || ^ drivers/hv/channel_mgmt.c:736:7: note: Assuming the condition is false (vmbus_proto_version == VERSION_WIN7) || (!perf_chn) || ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/hv/channel_mgmt.c:735:6: note: Left side of '||' is false if ((vmbus_proto_version == VERSION_WS2008) || ^ drivers/hv/channel_mgmt.c:736:48: note: Assuming 'perf_chn' is true (vmbus_proto_version == VERSION_WIN7) || (!perf_chn) || ^~~~~~~~~ drivers/hv/channel_mgmt.c:735:6: note: Left side of '||' is false if ((vmbus_proto_version == VERSION_WS2008) || ^ drivers/hv/channel_mgmt.c:737:6: note: Assuming the condition is false !alloc_cpumask_var(&available_mask, GFP_KERNEL)) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/hv/channel_mgmt.c:735:2: note: Taking false branch if ((vmbus_proto_version == VERSION_WS2008) || ^ drivers/hv/channel_mgmt.c:752:14: note: Assuming the condition is false for (i = 1; i <= ncpu + 1; i++) { ^~~~~~~~~~~~~ vim +785 drivers/hv/channel_mgmt.c a119845f6e98c8 K. Y. Srinivasan 2012-12-01 714 a119845f6e98c8 K. Y. Srinivasan 2012-12-01 715 /* a119845f6e98c8 K. Y. Srinivasan 2012-12-01 716 * Starting with Win8, we can statically distribute the incoming 1f656ff3fdddc2 K. Y. Srinivasan 2015-05-30 717 * channel interrupt load by binding a channel to VCPU. 1f656ff3fdddc2 K. Y. Srinivasan 2015-05-30 718 * 1f656ff3fdddc2 K. Y. Srinivasan 2015-05-30 719 * For pre-win8 hosts or non-performance critical channels we assign the d570aec0f2154e Andrea Parri (Microsoft 2020-04-06 720) * VMBUS_CONNECT_CPU. 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 721) * 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 722) * Starting with win8, performance critical channels will be distributed 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 723) * evenly among all the available NUMA nodes. Once the node is assigned, 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 724) * we will assign the CPU based on a simple round robin scheme. a119845f6e98c8 K. Y. Srinivasan 2012-12-01 725 */ afaa33da08abd1 Andrea Parri (Microsoft 2020-05-22 726) static void init_vp_index(struct vmbus_channel *channel) a119845f6e98c8 K. Y. Srinivasan 2012-12-01 727 { afaa33da08abd1 Andrea Parri (Microsoft 2020-05-22 728) bool perf_chn = hv_is_perf_channel(channel); 7c9ff3deeee61b Haiyang Zhang 2021-07-16 729 u32 i, ncpu = num_online_cpus(); 25355252607ca2 Dexuan Cui 2018-09-23 730 cpumask_var_t available_mask; 9f01ec53458d9e K. Y. Srinivasan 2015-08-05 731 struct cpumask *alloced_mask; 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 732) u32 target_cpu; 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 733) int numa_node; a119845f6e98c8 K. Y. Srinivasan 2012-12-01 734 a119845f6e98c8 K. Y. Srinivasan 2012-12-01 735 if ((vmbus_proto_version == VERSION_WS2008) || 25355252607ca2 Dexuan Cui 2018-09-23 736 (vmbus_proto_version == VERSION_WIN7) || (!perf_chn) || 25355252607ca2 Dexuan Cui 2018-09-23 737 !alloc_cpumask_var(&available_mask, GFP_KERNEL)) { a119845f6e98c8 K. Y. Srinivasan 2012-12-01 738 /* a119845f6e98c8 K. Y. Srinivasan 2012-12-01 739 * Prior to win8, all channel interrupts are d570aec0f2154e Andrea Parri (Microsoft 2020-04-06 740) * delivered on VMBUS_CONNECT_CPU. a119845f6e98c8 K. Y. Srinivasan 2012-12-01 741 * Also if the channel is not a performance critical d570aec0f2154e Andrea Parri (Microsoft 2020-04-06 742) * channel, bind it to VMBUS_CONNECT_CPU. d570aec0f2154e Andrea Parri (Microsoft 2020-04-06 743) * In case alloc_cpumask_var() fails, bind it to d570aec0f2154e Andrea Parri (Microsoft 2020-04-06 744) * VMBUS_CONNECT_CPU. a119845f6e98c8 K. Y. Srinivasan 2012-12-01 745 */ d570aec0f2154e Andrea Parri (Microsoft 2020-04-06 746) channel->target_cpu = VMBUS_CONNECT_CPU; afaa33da08abd1 Andrea Parri (Microsoft 2020-05-22 747) if (perf_chn) afaa33da08abd1 Andrea Parri (Microsoft 2020-05-22 748) hv_set_alloced_cpu(VMBUS_CONNECT_CPU); d3ba720dd58cdf K. Y. Srinivasan 2014-04-08 749 return; a119845f6e98c8 K. Y. Srinivasan 2012-12-01 750 } ce59fec836a9b4 Vitaly Kuznetsov 2015-05-06 751 7c9ff3deeee61b Haiyang Zhang 2021-07-16 752 for (i = 1; i <= ncpu + 1; i++) { 1f656ff3fdddc2 K. Y. Srinivasan 2015-05-30 753 while (true) { 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 754) numa_node = next_numa_node_id++; 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 755) if (numa_node == nr_node_ids) { 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 756) next_numa_node_id = 0; 509879bdb30b8e K. Y. Srinivasan 2016-09-02 757 continue; 509879bdb30b8e K. Y. Srinivasan 2016-09-02 758 } 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 759) if (cpumask_empty(cpumask_of_node(numa_node))) 1f656ff3fdddc2 K. Y. Srinivasan 2015-05-30 760 continue; 1f656ff3fdddc2 K. Y. Srinivasan 2015-05-30 761 break; 1f656ff3fdddc2 K. Y. Srinivasan 2015-05-30 762 } 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 763) alloced_mask = &hv_context.hv_numa_map[numa_node]; 1f656ff3fdddc2 K. Y. Srinivasan 2015-05-30 764 9f01ec53458d9e K. Y. Srinivasan 2015-08-05 765 if (cpumask_weight(alloced_mask) == 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 766) cpumask_weight(cpumask_of_node(numa_node))) { ce59fec836a9b4 Vitaly Kuznetsov 2015-05-06 767 /* 1f656ff3fdddc2 K. Y. Srinivasan 2015-05-30 768 * We have cycled through all the CPUs in the node; 1f656ff3fdddc2 K. Y. Srinivasan 2015-05-30 769 * reset the alloced map. ce59fec836a9b4 Vitaly Kuznetsov 2015-05-06 770 */ 9f01ec53458d9e K. Y. Srinivasan 2015-08-05 771 cpumask_clear(alloced_mask); ce59fec836a9b4 Vitaly Kuznetsov 2015-05-06 772 } ce59fec836a9b4 Vitaly Kuznetsov 2015-05-06 773 7c9ff3deeee61b Haiyang Zhang 2021-07-16 774 cpumask_xor(available_mask, alloced_mask, 7c9ff3deeee61b Haiyang Zhang 2021-07-16 775 cpumask_of_node(numa_node)); 79fd8e706637a5 Vitaly Kuznetsov 2016-01-27 776 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 777) target_cpu = cpumask_first(available_mask); 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 778) cpumask_set_cpu(target_cpu, alloced_mask); 1f656ff3fdddc2 K. Y. Srinivasan 2015-05-30 779 7c9ff3deeee61b Haiyang Zhang 2021-07-16 780 if (channel->offermsg.offer.sub_channel_index >= ncpu || 7c9ff3deeee61b Haiyang Zhang 2021-07-16 781 i > ncpu || !hv_cpuself_used(target_cpu, channel)) 7c9ff3deeee61b Haiyang Zhang 2021-07-16 782 break; 7c9ff3deeee61b Haiyang Zhang 2021-07-16 783 } 7c9ff3deeee61b Haiyang Zhang 2021-07-16 784 8ef4c4abbbcdcd Andrea Parri (Microsoft 2020-04-06 @785) channel->target_cpu = target_cpu; 25355252607ca2 Dexuan Cui 2018-09-23 786 25355252607ca2 Dexuan Cui 2018-09-23 787 free_cpumask_var(available_mask); a119845f6e98c8 K. Y. Srinivasan 2012-12-01 788 } a119845f6e98c8 K. Y. Srinivasan 2012-12-01 789 :::::: The code at line 785 was first introduced by commit :::::: 8ef4c4abbbcdcd9d4bc0fd9454df03e6dac24b73 Drivers: hv: vmbus: Remove the unused HV_LOCALIZED channel affinity logic :::::: TO: Andrea Parri (Microsoft) <[email protected]> :::::: CC: Wei Liu <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
