Re: [PATCH v4 1/9] sched/topology: Compute sd_weight considering cpuset partitions
From: K Prateek Nayak
Date: Thu Mar 12 2026 - 05:59:32 EST
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.
>
> *sd = (struct sched_domain){
> .min_interval = sd_weight,
--
Thanks and Regards,
Prateek