Re: [PATCH v3 1/2] sched/topology: Don't try to build empty sched domains

From: Dietmar Eggemann
Date: Wed Oct 23 2019 - 07:47:11 EST


On 15/10/2019 17:42, Valentin Schneider wrote:

[...]

> diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
> index c52bc91f882b..a859e5539440 100644
> --- a/kernel/cgroup/cpuset.c
> +++ b/kernel/cgroup/cpuset.c
> @@ -817,6 +817,11 @@ static int generate_sched_domains(cpumask_var_t **domains,
> struct cpuset *a = csa[i];
> int apn = a->pn;
>
> + if (cpumask_empty(a->effective_cpus)) {
> + ndoms--;
> + continue;
> + }
> +
> for (j = 0; j < csn; j++) {
> struct cpuset *b = csa[j];
> int bpn = b->pn;
> @@ -859,6 +864,9 @@ static int generate_sched_domains(cpumask_var_t **domains,
> continue;
> }
>
> + if (cpumask_empty(a->effective_cpus))
> + continue;
> +

Can you not just prevent that a cpuset pointer (cp) is added to the
cpuset array (csa[]) in case cpumask_empty(cp->effective_cpus)?

@@ -798,9 +800,14 @@ static int generate_sched_domains(cpumask_var_t
**domains, cpumask_subset(cp->cpus_allowed, top_cpuset.effective_cpus))
continue;

- if (is_sched_load_balance(cp))
+ if (is_sched_load_balance(cp) && !cpumask_empty(cp->effective_cpus))
csa[csn++] = cp;

> dp = doms[nslot];
>
> if (nslot == ndoms) {

[...]