Messages in this thread | | | Date | Thu, 17 Feb 2022 08:58:59 +0800 | From | kernel test robot <> | Subject | [tip:sched/core 27/28] kernel/sched/topology.c:2284:39: sparse: sparse: incorrect type in assignment (different address spaces) |
| |
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core head: 3624ba7b5e2acc02b01301ea5fd3534971eb9896 commit: e496132ebedd870b67f1f6d2428f9bb9d7ae27fd [27/28] sched/fair: Adjust the allowed NUMA imbalance when SD_NUMA spans multiple LLCs config: x86_64-randconfig-s022 (https://download.01.org/0day-ci/archive/20220217/202202170853.9vofgC3O-lkp@intel.com/config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.4-dirty # https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=e496132ebedd870b67f1f6d2428f9bb9d7ae27fd git remote add tip https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git git fetch --no-tags tip sched/core git checkout e496132ebedd870b67f1f6d2428f9bb9d7ae27fd # save the config file to linux build tree mkdir build_dir make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=x86_64 SHELL=/bin/bash kernel/sched/
If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com>
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:2254: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:2254:56: sparse: expected struct sched_domain *child kernel/sched/topology.c:2254:56: sparse: got struct sched_domain [noderef] __rcu *child >> kernel/sched/topology.c:2284:39: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *top_p @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:2284:39: sparse: expected struct sched_domain *top_p kernel/sched/topology.c:2284:39: sparse: got struct sched_domain [noderef] __rcu *parent >> kernel/sched/topology.c:2286:45: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] top @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:2286:45: sparse: expected struct sched_domain *[assigned] top kernel/sched/topology.c:2286:45: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:2287:47: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *top_p @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:2287:47: sparse: expected struct sched_domain *top_p kernel/sched/topology.c:2287:47: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:2253: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:2253:57: sparse: expected struct sched_domain *[assigned] sd kernel/sched/topology.c:2253:57: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/topology.c:2303: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:2303:57: sparse: expected struct sched_domain *[assigned] sd kernel/sched/topology.c:2303: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 +2284 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 /* 2246 * Calculate an allowed NUMA imbalance such that LLCs do not get 2247 * imbalanced. 2248 */ 2249 for_each_cpu(i, cpu_map) { 2250 unsigned int imb = 0; 2251 unsigned int imb_span = 1; 2252 2253 for (sd = *per_cpu_ptr(d.sd, i); sd; sd = sd->parent) { 2254 struct sched_domain *child = sd->child; 2255 2256 if (!(sd->flags & SD_SHARE_PKG_RESOURCES) && child && 2257 (child->flags & SD_SHARE_PKG_RESOURCES)) { 2258 struct sched_domain *top, *top_p; 2259 unsigned int nr_llcs; 2260 2261 /* 2262 * For a single LLC per node, allow an 2263 * imbalance up to 25% of the node. This is an 2264 * arbitrary cutoff based on SMT-2 to balance 2265 * between memory bandwidth and avoiding 2266 * premature sharing of HT resources and SMT-4 2267 * or SMT-8 *may* benefit from a different 2268 * cutoff. 2269 * 2270 * For multiple LLCs, allow an imbalance 2271 * until multiple tasks would share an LLC 2272 * on one node while LLCs on another node 2273 * remain idle. 2274 */ 2275 nr_llcs = sd->span_weight / child->span_weight; 2276 if (nr_llcs == 1) 2277 imb = sd->span_weight >> 2; 2278 else 2279 imb = nr_llcs; 2280 sd->imb_numa_nr = imb; 2281 2282 /* Set span based on the first NUMA domain. */ 2283 top = sd; > 2284 top_p = top->parent; 2285 while (top_p && !(top_p->flags & SD_NUMA)) { > 2286 top = top->parent; 2287 top_p = top->parent; 2288 } 2289 imb_span = top_p ? top_p->span_weight : sd->span_weight; 2290 } else { 2291 int factor = max(1U, (sd->span_weight / imb_span)); 2292 2293 sd->imb_numa_nr = imb * factor; 2294 } 2295 } 2296 } 2297 2298 /* Calculate CPU capacity for physical packages and nodes */ 2299 for (i = nr_cpumask_bits-1; i >= 0; i--) { 2300 if (!cpumask_test_cpu(i, cpu_map)) 2301 continue; 2302 2303 for (sd = *per_cpu_ptr(d.sd, i); sd; sd = sd->parent) { 2304 claim_allocations(i, sd); 2305 init_sched_groups_capacity(i, sd); 2306 } 2307 } 2308 2309 /* Attach the domains */ 2310 rcu_read_lock(); 2311 for_each_cpu(i, cpu_map) { 2312 rq = cpu_rq(i); 2313 sd = *per_cpu_ptr(d.sd, i); 2314 2315 /* Use READ_ONCE()/WRITE_ONCE() to avoid load/store tearing: */ 2316 if (rq->cpu_capacity_orig > READ_ONCE(d.rd->max_cpu_capacity)) 2317 WRITE_ONCE(d.rd->max_cpu_capacity, rq->cpu_capacity_orig); 2318 2319 cpu_attach_domain(sd, d.rd, i); 2320 } 2321 rcu_read_unlock(); 2322 2323 if (has_asym) 2324 static_branch_inc_cpuslocked(&sched_asym_cpucapacity); 2325 2326 if (rq && sched_debug_verbose) { 2327 pr_info("root domain span: %*pbl (max cpu_capacity = %lu)\n", 2328 cpumask_pr_args(cpu_map), rq->rd->max_cpu_capacity); 2329 } 2330 2331 ret = 0; 2332 error: 2333 __free_domain_allocs(&d, alloc_state, cpu_map); 2334 2335 return ret; 2336 } 2337
--- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
| |