CC: [email protected] In-Reply-To: <[email protected]> References: <[email protected]> TO: Huang Ying <[email protected]>
Hi Huang, [FYI, it's a private test report for your RFC patch.] [auto build test WARNING on tip/sched/core] [also build test WARNING on linux/master linus/master v5.17-rc3 next-20220209] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Huang-Ying/NUMA-balancing-fix-NUMA-topology-for-systems-with-CPU-less-nodes/20220208-212402 base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git c8eaf6ac76f40f6c59fc7d056e2e08c4a57ea9c7 :::::: branch date: 27 hours ago :::::: commit date: 27 hours ago config: arm64-randconfig-m031-20220209 (https://download.01.org/0day-ci/archive/20220209/[email protected]/config) compiler: aarch64-linux-gcc (GCC) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: kernel/sched/topology.c:1866 sched_init_numa() warn: possible memory leak of 'masks' vim +/masks +1866 kernel/sched/topology.c 620a6dc40754dc2 Valentin Schneider 2021-01-22 1785 ed82092e5093338 Huang Ying 2022-02-08 1786 void sched_init_numa(int offline_node) f2cb13609d5397c Ingo Molnar 2017-02-01 1787 { f2cb13609d5397c Ingo Molnar 2017-02-01 1788 struct sched_domain_topology_level *tl; 620a6dc40754dc2 Valentin Schneider 2021-01-22 1789 unsigned long *distance_map; 620a6dc40754dc2 Valentin Schneider 2021-01-22 1790 int nr_levels = 0; 620a6dc40754dc2 Valentin Schneider 2021-01-22 1791 int i, j; ed82092e5093338 Huang Ying 2022-02-08 1792 int *distances; ed82092e5093338 Huang Ying 2022-02-08 1793 struct cpumask ***masks; 051f3ca02e46432 Suravee Suthikulpanit 2017-09-07 1794 f2cb13609d5397c Ingo Molnar 2017-02-01 1795 /* f2cb13609d5397c Ingo Molnar 2017-02-01 1796 * O(nr_nodes^2) deduplicating selection sort -- in order to find the f2cb13609d5397c Ingo Molnar 2017-02-01 1797 * unique distances in the node_distance() table. f2cb13609d5397c Ingo Molnar 2017-02-01 1798 */ 620a6dc40754dc2 Valentin Schneider 2021-01-22 1799 distance_map = bitmap_alloc(NR_DISTANCE_VALUES, GFP_KERNEL); 620a6dc40754dc2 Valentin Schneider 2021-01-22 1800 if (!distance_map) 620a6dc40754dc2 Valentin Schneider 2021-01-22 1801 return; 620a6dc40754dc2 Valentin Schneider 2021-01-22 1802 620a6dc40754dc2 Valentin Schneider 2021-01-22 1803 bitmap_zero(distance_map, NR_DISTANCE_VALUES); ed82092e5093338 Huang Ying 2022-02-08 1804 for_each_cpu_node_but(i, offline_node) { ed82092e5093338 Huang Ying 2022-02-08 1805 for_each_cpu_node_but(j, offline_node) { 620a6dc40754dc2 Valentin Schneider 2021-01-22 1806 int distance = node_distance(i, j); f2cb13609d5397c Ingo Molnar 2017-02-01 1807 620a6dc40754dc2 Valentin Schneider 2021-01-22 1808 if (distance < LOCAL_DISTANCE || distance >= NR_DISTANCE_VALUES) { 620a6dc40754dc2 Valentin Schneider 2021-01-22 1809 sched_numa_warn("Invalid distance value range"); ed82092e5093338 Huang Ying 2022-02-08 1810 bitmap_free(distance_map); 620a6dc40754dc2 Valentin Schneider 2021-01-22 1811 return; 620a6dc40754dc2 Valentin Schneider 2021-01-22 1812 } f2cb13609d5397c Ingo Molnar 2017-02-01 1813 620a6dc40754dc2 Valentin Schneider 2021-01-22 1814 bitmap_set(distance_map, distance, 1); 620a6dc40754dc2 Valentin Schneider 2021-01-22 1815 } 620a6dc40754dc2 Valentin Schneider 2021-01-22 1816 } f2cb13609d5397c Ingo Molnar 2017-02-01 1817 /* 620a6dc40754dc2 Valentin Schneider 2021-01-22 1818 * We can now figure out how many unique distance values there are and 620a6dc40754dc2 Valentin Schneider 2021-01-22 1819 * allocate memory accordingly. f2cb13609d5397c Ingo Molnar 2017-02-01 1820 */ 620a6dc40754dc2 Valentin Schneider 2021-01-22 1821 nr_levels = bitmap_weight(distance_map, NR_DISTANCE_VALUES); f2cb13609d5397c Ingo Molnar 2017-02-01 1822 ed82092e5093338 Huang Ying 2022-02-08 1823 distances = kcalloc(nr_levels, sizeof(int), GFP_KERNEL); ed82092e5093338 Huang Ying 2022-02-08 1824 if (!distances) { 620a6dc40754dc2 Valentin Schneider 2021-01-22 1825 bitmap_free(distance_map); 620a6dc40754dc2 Valentin Schneider 2021-01-22 1826 return; f2cb13609d5397c Ingo Molnar 2017-02-01 1827 } f2cb13609d5397c Ingo Molnar 2017-02-01 1828 620a6dc40754dc2 Valentin Schneider 2021-01-22 1829 for (i = 0, j = 0; i < nr_levels; i++, j++) { 620a6dc40754dc2 Valentin Schneider 2021-01-22 1830 j = find_next_bit(distance_map, NR_DISTANCE_VALUES, j); ed82092e5093338 Huang Ying 2022-02-08 1831 distances[i] = j; f2cb13609d5397c Ingo Molnar 2017-02-01 1832 } ed82092e5093338 Huang Ying 2022-02-08 1833 rcu_assign_pointer(sched_domains_numa_distance, distances); f2cb13609d5397c Ingo Molnar 2017-02-01 1834 620a6dc40754dc2 Valentin Schneider 2021-01-22 1835 bitmap_free(distance_map); 620a6dc40754dc2 Valentin Schneider 2021-01-22 1836 f2cb13609d5397c Ingo Molnar 2017-02-01 1837 /* 620a6dc40754dc2 Valentin Schneider 2021-01-22 1838 * 'nr_levels' contains the number of unique distances f2cb13609d5397c Ingo Molnar 2017-02-01 1839 * f2cb13609d5397c Ingo Molnar 2017-02-01 1840 * The sched_domains_numa_distance[] array includes the actual distance f2cb13609d5397c Ingo Molnar 2017-02-01 1841 * numbers. f2cb13609d5397c Ingo Molnar 2017-02-01 1842 */ f2cb13609d5397c Ingo Molnar 2017-02-01 1843 f2cb13609d5397c Ingo Molnar 2017-02-01 1844 /* f2cb13609d5397c Ingo Molnar 2017-02-01 1845 * Here, we should temporarily reset sched_domains_numa_levels to 0. f2cb13609d5397c Ingo Molnar 2017-02-01 1846 * If it fails to allocate memory for array sched_domains_numa_masks[][], 620a6dc40754dc2 Valentin Schneider 2021-01-22 1847 * the array will contain less then 'nr_levels' members. This could be f2cb13609d5397c Ingo Molnar 2017-02-01 1848 * dangerous when we use it to iterate array sched_domains_numa_masks[][] f2cb13609d5397c Ingo Molnar 2017-02-01 1849 * in other functions. f2cb13609d5397c Ingo Molnar 2017-02-01 1850 * 620a6dc40754dc2 Valentin Schneider 2021-01-22 1851 * We reset it to 'nr_levels' at the end of this function. f2cb13609d5397c Ingo Molnar 2017-02-01 1852 */ f2cb13609d5397c Ingo Molnar 2017-02-01 1853 sched_domains_numa_levels = 0; f2cb13609d5397c Ingo Molnar 2017-02-01 1854 ed82092e5093338 Huang Ying 2022-02-08 1855 masks = kzalloc(sizeof(void *) * nr_levels, GFP_KERNEL); ed82092e5093338 Huang Ying 2022-02-08 1856 if (!masks) f2cb13609d5397c Ingo Molnar 2017-02-01 1857 return; f2cb13609d5397c Ingo Molnar 2017-02-01 1858 f2cb13609d5397c Ingo Molnar 2017-02-01 1859 /* f2cb13609d5397c Ingo Molnar 2017-02-01 1860 * Now for each level, construct a mask per node which contains all f2cb13609d5397c Ingo Molnar 2017-02-01 1861 * CPUs of nodes that are that many hops away from us. f2cb13609d5397c Ingo Molnar 2017-02-01 1862 */ 620a6dc40754dc2 Valentin Schneider 2021-01-22 1863 for (i = 0; i < nr_levels; i++) { ed82092e5093338 Huang Ying 2022-02-08 1864 masks[i] = kzalloc(nr_node_ids * sizeof(void *), GFP_KERNEL); ed82092e5093338 Huang Ying 2022-02-08 1865 if (!masks[i]) f2cb13609d5397c Ingo Molnar 2017-02-01 @1866 return; f2cb13609d5397c Ingo Molnar 2017-02-01 1867 ed82092e5093338 Huang Ying 2022-02-08 1868 for_each_cpu_node_but(j, offline_node) { f2cb13609d5397c Ingo Molnar 2017-02-01 1869 struct cpumask *mask = kzalloc(cpumask_size(), GFP_KERNEL); 620a6dc40754dc2 Valentin Schneider 2021-01-22 1870 int k; 620a6dc40754dc2 Valentin Schneider 2021-01-22 1871 f2cb13609d5397c Ingo Molnar 2017-02-01 1872 if (!mask) f2cb13609d5397c Ingo Molnar 2017-02-01 1873 return; f2cb13609d5397c Ingo Molnar 2017-02-01 1874 ed82092e5093338 Huang Ying 2022-02-08 1875 masks[i][j] = mask; 0083242c93759dd Valentin Schneider 2021-08-18 1876 ed82092e5093338 Huang Ying 2022-02-08 1877 for_each_cpu_node_but(k, offline_node) { 620a6dc40754dc2 Valentin Schneider 2021-01-22 1878 if (sched_debug() && (node_distance(j, k) != node_distance(k, j))) 620a6dc40754dc2 Valentin Schneider 2021-01-22 1879 sched_numa_warn("Node-distance not symmetric"); 620a6dc40754dc2 Valentin Schneider 2021-01-22 1880 f2cb13609d5397c Ingo Molnar 2017-02-01 1881 if (node_distance(j, k) > sched_domains_numa_distance[i]) f2cb13609d5397c Ingo Molnar 2017-02-01 1882 continue; f2cb13609d5397c Ingo Molnar 2017-02-01 1883 f2cb13609d5397c Ingo Molnar 2017-02-01 1884 cpumask_or(mask, mask, cpumask_of_node(k)); f2cb13609d5397c Ingo Molnar 2017-02-01 1885 } f2cb13609d5397c Ingo Molnar 2017-02-01 1886 } f2cb13609d5397c Ingo Molnar 2017-02-01 1887 } ed82092e5093338 Huang Ying 2022-02-08 1888 rcu_assign_pointer(sched_domains_numa_masks, masks); f2cb13609d5397c Ingo Molnar 2017-02-01 1889 f2cb13609d5397c Ingo Molnar 2017-02-01 1890 /* Compute default topology size */ f2cb13609d5397c Ingo Molnar 2017-02-01 1891 for (i = 0; sched_domain_topology[i].mask; i++); f2cb13609d5397c Ingo Molnar 2017-02-01 1892 71e5f6644fb2f33 Dietmar Eggemann 2021-02-01 1893 tl = kzalloc((i + nr_levels + 1) * f2cb13609d5397c Ingo Molnar 2017-02-01 1894 sizeof(struct sched_domain_topology_level), GFP_KERNEL); f2cb13609d5397c Ingo Molnar 2017-02-01 1895 if (!tl) f2cb13609d5397c Ingo Molnar 2017-02-01 1896 return; f2cb13609d5397c Ingo Molnar 2017-02-01 1897 f2cb13609d5397c Ingo Molnar 2017-02-01 1898 /* f2cb13609d5397c Ingo Molnar 2017-02-01 1899 * Copy the default topology bits.. f2cb13609d5397c Ingo Molnar 2017-02-01 1900 */ f2cb13609d5397c Ingo Molnar 2017-02-01 1901 for (i = 0; sched_domain_topology[i].mask; i++) f2cb13609d5397c Ingo Molnar 2017-02-01 1902 tl[i] = sched_domain_topology[i]; f2cb13609d5397c Ingo Molnar 2017-02-01 1903 051f3ca02e46432 Suravee Suthikulpanit 2017-09-07 1904 /* 051f3ca02e46432 Suravee Suthikulpanit 2017-09-07 1905 * Add the NUMA identity distance, aka single NODE. 051f3ca02e46432 Suravee Suthikulpanit 2017-09-07 1906 */ 051f3ca02e46432 Suravee Suthikulpanit 2017-09-07 1907 tl[i++] = (struct sched_domain_topology_level){ 051f3ca02e46432 Suravee Suthikulpanit 2017-09-07 1908 .mask = sd_numa_mask, 051f3ca02e46432 Suravee Suthikulpanit 2017-09-07 1909 .numa_level = 0, 051f3ca02e46432 Suravee Suthikulpanit 2017-09-07 1910 SD_INIT_NAME(NODE) 051f3ca02e46432 Suravee Suthikulpanit 2017-09-07 1911 }; 051f3ca02e46432 Suravee Suthikulpanit 2017-09-07 1912 f2cb13609d5397c Ingo Molnar 2017-02-01 1913 /* f2cb13609d5397c Ingo Molnar 2017-02-01 1914 * .. and append 'j' levels of NUMA goodness. f2cb13609d5397c Ingo Molnar 2017-02-01 1915 */ 620a6dc40754dc2 Valentin Schneider 2021-01-22 1916 for (j = 1; j < nr_levels; i++, j++) { f2cb13609d5397c Ingo Molnar 2017-02-01 1917 tl[i] = (struct sched_domain_topology_level){ f2cb13609d5397c Ingo Molnar 2017-02-01 1918 .mask = sd_numa_mask, f2cb13609d5397c Ingo Molnar 2017-02-01 1919 .sd_flags = cpu_numa_flags, f2cb13609d5397c Ingo Molnar 2017-02-01 1920 .flags = SDTL_OVERLAP, f2cb13609d5397c Ingo Molnar 2017-02-01 1921 .numa_level = j, f2cb13609d5397c Ingo Molnar 2017-02-01 1922 SD_INIT_NAME(NUMA) f2cb13609d5397c Ingo Molnar 2017-02-01 1923 }; f2cb13609d5397c Ingo Molnar 2017-02-01 1924 } f2cb13609d5397c Ingo Molnar 2017-02-01 1925 ed82092e5093338 Huang Ying 2022-02-08 1926 sched_domain_topology_saved = sched_domain_topology; f2cb13609d5397c Ingo Molnar 2017-02-01 1927 sched_domain_topology = tl; f2cb13609d5397c Ingo Molnar 2017-02-01 1928 620a6dc40754dc2 Valentin Schneider 2021-01-22 1929 sched_domains_numa_levels = nr_levels; 620a6dc40754dc2 Valentin Schneider 2021-01-22 1930 sched_max_numa_distance = sched_domains_numa_distance[nr_levels - 1]; f2cb13609d5397c Ingo Molnar 2017-02-01 1931 ed82092e5093338 Huang Ying 2022-02-08 1932 init_numa_topology_type(offline_node); 0083242c93759dd Valentin Schneider 2021-08-18 1933 } 0083242c93759dd Valentin Schneider 2021-08-18 1934 --- 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]
