Re: [PATCH 01/11] sched, cpuset: Add regenerate_sched_domains function to rebuild all sched domains

From: Morten Rasmussen
Date: Mon Aug 22 2016 - 09:52:48 EST


On Thu, Aug 18, 2016 at 03:36:42PM -0700, Srinivas Pandruvada wrote:
> From: Tim Chen <tim.c.chen@xxxxxxxxxxxxxxx>
>
> The current rebuild_sched_domains will only rebuild the sched domains
> unless the cpumask changes. However, in some scenarios when the
> topology flag value changes, it will not rebuild the sched domain.
>
> We create a regenerate_sched_domains function that will always
> rebuild all the sched domains to take care of this scenario.

[...]

> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -7081,7 +7082,7 @@ void partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[],
> unregister_sched_domain_sysctl();
>
> /* Let architecture update cpu core mappings. */
> - new_topology = arch_update_cpu_topology();
> + new_topology = arch_update_cpu_topology() | need_domain_rebuild;

You can force rebuild_sched_domains() to rebuild the sched_domain
hierarchy by just implementing arch_update_cpu_topology(). Make it
return 1 when you want the hierarchy to be updated.

Implementing another forcing mechanism seems redundant. I must be
missing something?

I just did exactly that to set the SD_ASYM_CPUCAPACITY flag for
big.LITTLE platforms on arm/arm64 as we don't know if the flag should be
set until cpufreq has initialized.

Morten