Hi Mel, I love your patch! Perhaps something to improve: [auto build test WARNING on tip/sched/core] [also build test WARNING on tip/master linux/master linus/master v5.16-rc2 next-20211126] [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/Mel-Gorman/Adjust-NUMA-imbalance-for-multiple-LLCs/20211125-232336 base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 8c92606ab81086db00cbb73347d124b4eb169b7e config: s390-randconfig-s032-20211126 (https://download.01.org/0day-ci/archive/20211127/202111270726.GViokiOt-lkp(a)intel.com/config) compiler: s390-linux-gcc (GCC) 11.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.4-dirty # https://github.com/0day-ci/linux/commit/b4d95a034cffb1e4424874645549d3cac2de5c02 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Mel-Gorman/Adjust-NUMA-imbalance-for-multiple-LLCs/20211125-232336 git checkout b4d95a034cffb1e4424874645549d3cac2de5c02 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=s390 SHELL=/bin/bash kernel/sched/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) kernel/sched/topology.c:461:19: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct perf_domain *pd @@ got struct perf_domain [noderef] __rcu *pd @@ kernel/sched/topology.c:461:19: sparse: expected struct perf_domain *pd kernel/sched/topology.c:461:19: sparse: got struct perf_domain [noderef] __rcu *pd kernel/sched/topology.c:623:49: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:623:49: sparse: expected struct sched_domain *parent kernel/sched/topology.c:623:49: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:694:50: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:694:50: sparse: expected struct sched_domain *parent kernel/sched/topology.c:694:50: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:701:55: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain [noderef] __rcu *[noderef] __rcu child @@ got struct sched_domain *[assigned] tmp @@ kernel/sched/topology.c:701:55: sparse: expected struct sched_domain [noderef] __rcu *[noderef] __rcu child kernel/sched/topology.c:701:55: sparse: got struct sched_domain *[assigned] tmp kernel/sched/topology.c:711:29: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] tmp @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:711:29: sparse: expected struct sched_domain *[assigned] tmp kernel/sched/topology.c:711:29: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:716:20: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:716:20: sparse: expected struct sched_domain *sd kernel/sched/topology.c:716:20: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:737:13: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] tmp @@ got struct sched_domain [noderef] __rcu *sd @@ kernel/sched/topology.c:737:13: sparse: expected struct sched_domain *[assigned] tmp kernel/sched/topology.c:737:13: sparse: got struct sched_domain [noderef] __rcu *sd kernel/sched/topology.c:899:70: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@ kernel/sched/topology.c:899:70: sparse: expected struct sched_domain *sd kernel/sched/topology.c:899:70: sparse: got struct sched_domain [noderef] __rcu *child kernel/sched/topology.c:928:59: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@ kernel/sched/topology.c:928:59: sparse: expected struct sched_domain *sd kernel/sched/topology.c:928:59: sparse: got struct sched_domain [noderef] __rcu *child kernel/sched/topology.c:974:57: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@ kernel/sched/topology.c:974:57: sparse: expected struct sched_domain *sd kernel/sched/topology.c:974:57: sparse: got struct sched_domain [noderef] __rcu *child kernel/sched/topology.c:976:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sibling @@ got struct sched_domain [noderef] __rcu *child @@ kernel/sched/topology.c:976:25: sparse: expected struct sched_domain *sibling kernel/sched/topology.c:976:25: sparse: got struct sched_domain [noderef] __rcu *child kernel/sched/topology.c:984:55: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@ kernel/sched/topology.c:984:55: sparse: expected struct sched_domain *sd kernel/sched/topology.c:984:55: sparse: got struct sched_domain [noderef] __rcu *child kernel/sched/topology.c:986:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sibling @@ got struct sched_domain [noderef] __rcu *child @@ kernel/sched/topology.c:986:25: sparse: expected struct sched_domain *sibling kernel/sched/topology.c:986:25: sparse: got struct sched_domain [noderef] __rcu *child kernel/sched/topology.c:1056:62: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@ kernel/sched/topology.c:1056:62: sparse: expected struct sched_domain *sd kernel/sched/topology.c:1056:62: sparse: got struct sched_domain [noderef] __rcu *child kernel/sched/topology.c:1160:40: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *child @@ got struct sched_domain [noderef] __rcu *child @@ kernel/sched/topology.c:1160:40: sparse: expected struct sched_domain *child kernel/sched/topology.c:1160:40: sparse: got struct sched_domain [noderef] __rcu *child kernel/sched/topology.c:1571:43: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain [noderef] __rcu *child @@ got struct sched_domain *child @@ kernel/sched/topology.c:1571:43: sparse: expected struct sched_domain [noderef] __rcu *child kernel/sched/topology.c:1571:43: sparse: got struct sched_domain *child kernel/sched/topology.c:2130:31: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain [noderef] __rcu *parent @@ got struct sched_domain *sd @@ kernel/sched/topology.c:2130:31: sparse: expected struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:2130:31: sparse: got struct sched_domain *sd kernel/sched/topology.c:2233:57: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:2233:57: sparse: expected struct sched_domain *[assigned] sd kernel/sched/topology.c:2233:57: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:2248:56: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *child @@ got struct sched_domain [noderef] __rcu *child @@ kernel/sched/topology.c:2248:56: sparse: expected struct sched_domain *child kernel/sched/topology.c:2248:56: sparse: got struct sched_domain [noderef] __rcu *child >> kernel/sched/topology.c:2263:49: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sd_numa @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:2263:49: sparse: expected struct sched_domain *sd_numa kernel/sched/topology.c:2263:49: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:2247:57: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:2247:57: sparse: expected struct sched_domain *[assigned] sd kernel/sched/topology.c:2247:57: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:2274:57: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:2274:57: sparse: expected struct sched_domain *[assigned] sd kernel/sched/topology.c:2274:57: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c: note: in included file: kernel/sched/sched.h:1744:9: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/sched.h:1744:9: sparse: expected struct sched_domain *[assigned] sd kernel/sched/sched.h:1744:9: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/sched.h:1757:9: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/sched.h:1757:9: sparse: expected struct sched_domain *[assigned] sd kernel/sched/sched.h:1757:9: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/sched.h:1744:9: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/sched.h:1744:9: sparse: expected struct sched_domain *[assigned] sd kernel/sched/sched.h:1744:9: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/sched.h:1757:9: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/sched.h:1757:9: sparse: expected struct sched_domain *[assigned] sd kernel/sched/sched.h:1757:9: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:929:31: sparse: sparse: dereference of noderef expression kernel/sched/topology.c:1592:19: sparse: sparse: dereference of noderef expression vim +2263 kernel/sched/topology.c 2186 2187 /* 2188 * Build sched domains for a given set of CPUs and attach the sched domains 2189 * to the individual CPUs 2190 */ 2191 static int 2192 build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *attr) 2193 { 2194 enum s_alloc alloc_state = sa_none; 2195 struct sched_domain *sd; 2196 struct s_data d; 2197 struct rq *rq = NULL; 2198 int i, ret = -ENOMEM; 2199 bool has_asym = false; 2200 2201 if (WARN_ON(cpumask_empty(cpu_map))) 2202 goto error; 2203 2204 alloc_state = __visit_domain_allocation_hell(&d, cpu_map); 2205 if (alloc_state != sa_rootdomain) 2206 goto error; 2207 2208 /* Set up domains for CPUs specified by the cpu_map: */ 2209 for_each_cpu(i, cpu_map) { 2210 struct sched_domain_topology_level *tl; 2211 2212 sd = NULL; 2213 for_each_sd_topology(tl) { 2214 2215 if (WARN_ON(!topology_span_sane(tl, cpu_map, i))) 2216 goto error; 2217 2218 sd = build_sched_domain(tl, cpu_map, attr, sd, i); 2219 2220 has_asym |= sd->flags & SD_ASYM_CPUCAPACITY; 2221 2222 if (tl == sched_domain_topology) 2223 *per_cpu_ptr(d.sd, i) = sd; 2224 if (tl->flags & SDTL_OVERLAP) 2225 sd->flags |= SD_OVERLAP; 2226 if (cpumask_equal(cpu_map, sched_domain_span(sd))) 2227 break; 2228 } 2229 } 2230 2231 /* Build the groups for the domains */ 2232 for_each_cpu(i, cpu_map) { 2233 for (sd = *per_cpu_ptr(d.sd, i); sd; sd = sd->parent) { 2234 sd->span_weight = cpumask_weight(sched_domain_span(sd)); 2235 if (sd->flags & SD_OVERLAP) { 2236 if (build_overlap_sched_groups(sd, i)) 2237 goto error; 2238 } else { 2239 if (build_sched_groups(sd, i)) 2240 goto error; 2241 } 2242 } 2243 } 2244 2245 /* Calculate allowed NUMA imbalance */ 2246 for_each_cpu(i, cpu_map) { 2247 for (sd = *per_cpu_ptr(d.sd, i); sd; sd = sd->parent) { 2248 struct sched_domain *child = sd->child; 2249 2250 if (!(sd->flags & SD_SHARE_PKG_RESOURCES) && 2251 (child->flags & SD_SHARE_PKG_RESOURCES)) { 2252 struct sched_domain *sd_numa = sd; 2253 int imb_numa_nr, nr_groups; 2254 2255 nr_groups = sd->span_weight / child->span_weight; 2256 imb_numa_nr = nr_groups / num_online_nodes(); 2257 2258 while (sd_numa) { 2259 if (sd_numa->flags & SD_NUMA) { 2260 sd_numa->imb_numa_nr = imb_numa_nr; 2261 break; 2262 } > 2263 sd_numa = sd_numa->parent; 2264 } 2265 } 2266 } 2267 } 2268 2269 /* Calculate CPU capacity for physical packages and nodes */ 2270 for (i = nr_cpumask_bits-1; i >= 0; i--) { 2271 if (!cpumask_test_cpu(i, cpu_map)) 2272 continue; 2273 2274 for (sd = *per_cpu_ptr(d.sd, i); sd; sd = sd->parent) { 2275 claim_allocations(i, sd); 2276 init_sched_groups_capacity(i, sd); 2277 } 2278 } 2279 2280 /* Attach the domains */ 2281 rcu_read_lock(); 2282 for_each_cpu(i, cpu_map) { 2283 rq = cpu_rq(i); 2284 sd = *per_cpu_ptr(d.sd, i); 2285 2286 /* Use READ_ONCE()/WRITE_ONCE() to avoid load/store tearing: */ 2287 if (rq->cpu_capacity_orig > READ_ONCE(d.rd->max_cpu_capacity)) 2288 WRITE_ONCE(d.rd->max_cpu_capacity, rq->cpu_capacity_orig); 2289 2290 cpu_attach_domain(sd, d.rd, i); 2291 } 2292 rcu_read_unlock(); 2293 2294 if (has_asym) 2295 static_branch_inc_cpuslocked(&sched_asym_cpucapacity); 2296 2297 if (rq && sched_debug_verbose) { 2298 pr_info("root domain span: %*pbl (max cpu_capacity = %lu)\n", 2299 cpumask_pr_args(cpu_map), rq->rd->max_cpu_capacity); 2300 } 2301 2302 ret = 0; 2303 error: 2304 __free_domain_allocs(&d, alloc_state, cpu_map); 2305 2306 return ret; 2307 } 2308 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org