Re: [PATCH v4 1/9] sched/topology: Compute sd_weight considering cpuset partitions

From: Peter Zijlstra

Date: Thu Mar 12 2026 - 06:01:32 EST


On Thu, Mar 12, 2026 at 03:29:09PM +0530, K Prateek Nayak wrote:
> Hello Peter,
>
> On 3/12/2026 3:04 PM, Peter Zijlstra wrote:
> > Why not like so?
> >
> > diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
> > index 061f8c85f555..79bab80af8f2 100644
> > --- a/kernel/sched/topology.c
> > +++ b/kernel/sched/topology.c
> > @@ -1645,13 +1645,17 @@ sd_init(struct sched_domain_topology_level *tl,
> > struct cpumask *sd_span;
> > u64 now = sched_clock();
> >
> > - sd_weight = cpumask_weight(tl->mask(tl, cpu));
> > + sd_span = sched_domain_span(sd);
> > + cpumask_and(sd_span, cpu_map, tl->mask(tl, cpu));
> > + sd_weight = cpumask_weight(sd_span);
> > + sd_id = cpumask_first(sd_span);
> >
> > if (tl->sd_flags)
> > sd_flags = (*tl->sd_flags)();
> > if (WARN_ONCE(sd_flags & ~TOPOLOGY_SD_FLAGS,
> > - "wrong sd_flags in topology description\n"))
> > + "wrong sd_flags in topology description\n"))
> > sd_flags &= TOPOLOGY_SD_FLAGS;
> > + sd_flags |= asym_cpu_capacity_classify(sd_span, cpu_map);
>
>
> That can work too. Since sd_span is is just a variable array at the
> end of sched_domain, it shouldn't be affected by the assignment below.
> I'll update this in the next version.

I've already fixed it up, was about to go push it out to
queue/sched/core.