From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============8496940216514073654==" MIME-Version: 1.0 From: kernel test robot To: kbuild-all@lists.01.org Subject: Re: [PATCH 2/2] sched/fair: Adjust the allowed NUMA imbalance when SD_NUMA spans multiple LLCs Date: Sat, 27 Nov 2021 07:22:21 +0800 Message-ID: <202111270726.GViokiOt-lkp@intel.com> In-Reply-To: <20211125151941.8710-3-mgorman@techsingularity.net> List-Id: --===============8496940216514073654== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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-imb= alance-for-multiple-LLCs/20211125-232336 base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 8c92606= ab81086db00cbb73347d124b4eb169b7e config: s390-randconfig-s032-20211126 (https://download.01.org/0day-ci/arch= ive/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/b4d95a034cffb1e4424874645= 549d3cac2de5c02 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Mel-Gorman/Adjust-NUMA-imbalance-f= or-multiple-LLCs/20211125-232336 git checkout b4d95a034cffb1e4424874645549d3cac2de5c02 # save the config file to linux build tree COMPILER_INSTALL_PATH=3D$HOME/0day COMPILER=3Dgcc-11.2.0 make.cross= C=3D1 CF=3D'-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=3Dbuild_dir ARCH=3Ds= 390 SHELL=3D/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 argume= nt 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 [node= ref] __rcu *pd kernel/sched/topology.c:623:49: sparse: sparse: incorrect type in initia= lizer (different address spaces) @@ expected struct sched_domain *paren= t @@ 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 [nod= eref] __rcu *parent kernel/sched/topology.c:694:50: sparse: sparse: incorrect type in initia= lizer (different address spaces) @@ expected struct sched_domain *paren= t @@ 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 [nod= eref] __rcu *parent kernel/sched/topology.c:701:55: sparse: sparse: incorrect type in assign= ment (different address spaces) @@ expected struct sched_domain [nodere= f] __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 *[as= signed] tmp kernel/sched/topology.c:711:29: sparse: sparse: incorrect type in assign= ment (different address spaces) @@ expected struct sched_domain *[assig= ned] 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 [nod= eref] __rcu *parent kernel/sched/topology.c:716:20: sparse: sparse: incorrect type in assign= ment (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 [nod= eref] __rcu *parent kernel/sched/topology.c:737:13: sparse: sparse: incorrect type in assign= ment (different address spaces) @@ expected struct sched_domain *[assig= ned] 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 [nod= eref] __rcu *sd kernel/sched/topology.c:899:70: sparse: sparse: incorrect type in argume= nt 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 [nod= eref] __rcu *child kernel/sched/topology.c:928:59: sparse: sparse: incorrect type in argume= nt 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 [nod= eref] __rcu *child kernel/sched/topology.c:974:57: sparse: sparse: incorrect type in argume= nt 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 [nod= eref] __rcu *child kernel/sched/topology.c:976:25: sparse: sparse: incorrect type in assign= ment (different address spaces) @@ expected struct sched_domain *siblin= g @@ 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 [nod= eref] __rcu *child kernel/sched/topology.c:984:55: sparse: sparse: incorrect type in argume= nt 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 [nod= eref] __rcu *child kernel/sched/topology.c:986:25: sparse: sparse: incorrect type in assign= ment (different address spaces) @@ expected struct sched_domain *siblin= g @@ 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 [nod= eref] __rcu *child kernel/sched/topology.c:1056:62: sparse: sparse: incorrect type in argum= ent 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_domai= n *sd kernel/sched/topology.c:1056:62: sparse: got struct sched_domain [no= deref] __rcu *child kernel/sched/topology.c:1160:40: sparse: sparse: incorrect type in initi= alizer (different address spaces) @@ expected struct sched_domain *chil= d @@ got struct sched_domain [noderef] __rcu *child @@ kernel/sched/topology.c:1160:40: sparse: expected struct sched_domai= n *child kernel/sched/topology.c:1160:40: sparse: got struct sched_domain [no= deref] __rcu *child kernel/sched/topology.c:1571:43: sparse: sparse: incorrect type in initi= alizer (different address spaces) @@ expected struct sched_domain [node= ref] __rcu *child @@ got struct sched_domain *child @@ kernel/sched/topology.c:1571:43: sparse: expected struct sched_domai= n [noderef] __rcu *child kernel/sched/topology.c:1571:43: sparse: got struct sched_domain *ch= ild kernel/sched/topology.c:2130:31: sparse: sparse: incorrect type in assig= nment (different address spaces) @@ expected struct sched_domain [noder= ef] __rcu *parent @@ got struct sched_domain *sd @@ kernel/sched/topology.c:2130:31: sparse: expected struct sched_domai= n [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 assig= nment (different address spaces) @@ expected struct sched_domain *[assi= gned] sd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:2233:57: sparse: expected struct sched_domai= n *[assigned] sd kernel/sched/topology.c:2233:57: sparse: got struct sched_domain [no= deref] __rcu *parent kernel/sched/topology.c:2248:56: sparse: sparse: incorrect type in initi= alizer (different address spaces) @@ expected struct sched_domain *chil= d @@ got struct sched_domain [noderef] __rcu *child @@ kernel/sched/topology.c:2248:56: sparse: expected struct sched_domai= n *child kernel/sched/topology.c:2248:56: sparse: got struct sched_domain [no= deref] __rcu *child >> kernel/sched/topology.c:2263:49: sparse: sparse: incorrect type in assig= nment (different address spaces) @@ expected struct sched_domain *sd_nu= ma @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:2263:49: sparse: expected struct sched_domai= n *sd_numa kernel/sched/topology.c:2263:49: sparse: got struct sched_domain [no= deref] __rcu *parent kernel/sched/topology.c:2247:57: sparse: sparse: incorrect type in assig= nment (different address spaces) @@ expected struct sched_domain *[assi= gned] sd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:2247:57: sparse: expected struct sched_domai= n *[assigned] sd kernel/sched/topology.c:2247:57: sparse: got struct sched_domain [no= deref] __rcu *parent kernel/sched/topology.c:2274:57: sparse: sparse: incorrect type in assig= nment (different address spaces) @@ expected struct sched_domain *[assi= gned] sd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/topology.c:2274:57: sparse: expected struct sched_domai= n *[assigned] sd kernel/sched/topology.c:2274:57: sparse: got struct sched_domain [no= deref] __rcu *parent kernel/sched/topology.c: note: in included file: kernel/sched/sched.h:1744:9: sparse: sparse: incorrect type in assignmen= t (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 [nodere= f] __rcu *parent kernel/sched/sched.h:1757:9: sparse: sparse: incorrect type in assignmen= t (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 [nodere= f] __rcu *parent kernel/sched/sched.h:1744:9: sparse: sparse: incorrect type in assignmen= t (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 [nodere= f] __rcu *parent kernel/sched/sched.h:1757:9: sparse: sparse: incorrect type in assignmen= t (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 [nodere= f] __rcu *parent kernel/sched/topology.c:929:31: sparse: sparse: dereference of noderef e= xpression 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_doma= in_attr *attr) 2193 { 2194 enum s_alloc alloc_state =3D sa_none; 2195 struct sched_domain *sd; 2196 struct s_data d; 2197 struct rq *rq =3D NULL; 2198 int i, ret =3D -ENOMEM; 2199 bool has_asym =3D false; 2200 = 2201 if (WARN_ON(cpumask_empty(cpu_map))) 2202 goto error; 2203 = 2204 alloc_state =3D __visit_domain_allocation_hell(&d, cpu_map); 2205 if (alloc_state !=3D 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 =3D 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 =3D build_sched_domain(tl, cpu_map, attr, sd, i); 2219 = 2220 has_asym |=3D sd->flags & SD_ASYM_CPUCAPACITY; 2221 = 2222 if (tl =3D=3D sched_domain_topology) 2223 *per_cpu_ptr(d.sd, i) =3D sd; 2224 if (tl->flags & SDTL_OVERLAP) 2225 sd->flags |=3D 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 =3D *per_cpu_ptr(d.sd, i); sd; sd =3D sd->parent) { 2234 sd->span_weight =3D 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 =3D *per_cpu_ptr(d.sd, i); sd; sd =3D sd->parent) { 2248 struct sched_domain *child =3D sd->child; 2249 = 2250 if (!(sd->flags & SD_SHARE_PKG_RESOURCES) && 2251 (child->flags & SD_SHARE_PKG_RESOURCES)) { 2252 struct sched_domain *sd_numa =3D sd; 2253 int imb_numa_nr, nr_groups; 2254 = 2255 nr_groups =3D sd->span_weight / child->span_weight; 2256 imb_numa_nr =3D nr_groups / num_online_nodes(); 2257 = 2258 while (sd_numa) { 2259 if (sd_numa->flags & SD_NUMA) { 2260 sd_numa->imb_numa_nr =3D imb_numa_nr; 2261 break; 2262 } > 2263 sd_numa =3D sd_numa->parent; 2264 } 2265 } 2266 } 2267 } 2268 = 2269 /* Calculate CPU capacity for physical packages and nodes */ 2270 for (i =3D nr_cpumask_bits-1; i >=3D 0; i--) { 2271 if (!cpumask_test_cpu(i, cpu_map)) 2272 continue; 2273 = 2274 for (sd =3D *per_cpu_ptr(d.sd, i); sd; sd =3D 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 =3D cpu_rq(i); 2284 sd =3D *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 =3D %lu)\n", 2299 cpumask_pr_args(cpu_map), rq->rd->max_cpu_capacity); 2300 } 2301 = 2302 ret =3D 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 --===============8496940216514073654==--