Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull scheduler fixes from Ingo Molnar: "Fix two scheduler topology bugs/oversights on Juno r0 2+4 big.LITTLE systems" * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: sched/topology: Allow sched_asym_cpucapacity to be disabled sched/topology: Don't try to build empty sched domains
This commit is contained in:
Коммит
0dbe6cb8f7
|
@ -798,7 +798,8 @@ 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;
|
||||
|
||||
/* skip @cp's subtree if not a partition root */
|
||||
|
|
|
@ -1948,7 +1948,7 @@ next_level:
|
|||
static int
|
||||
build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *attr)
|
||||
{
|
||||
enum s_alloc alloc_state;
|
||||
enum s_alloc alloc_state = sa_none;
|
||||
struct sched_domain *sd;
|
||||
struct s_data d;
|
||||
struct rq *rq = NULL;
|
||||
|
@ -1956,6 +1956,9 @@ build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *att
|
|||
struct sched_domain_topology_level *tl_asym;
|
||||
bool has_asym = false;
|
||||
|
||||
if (WARN_ON(cpumask_empty(cpu_map)))
|
||||
goto error;
|
||||
|
||||
alloc_state = __visit_domain_allocation_hell(&d, cpu_map);
|
||||
if (alloc_state != sa_rootdomain)
|
||||
goto error;
|
||||
|
@ -2026,7 +2029,7 @@ build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *att
|
|||
rcu_read_unlock();
|
||||
|
||||
if (has_asym)
|
||||
static_branch_enable_cpuslocked(&sched_asym_cpucapacity);
|
||||
static_branch_inc_cpuslocked(&sched_asym_cpucapacity);
|
||||
|
||||
if (rq && sched_debug_enabled) {
|
||||
pr_info("root domain span: %*pbl (max cpu_capacity = %lu)\n",
|
||||
|
@ -2121,8 +2124,12 @@ int sched_init_domains(const struct cpumask *cpu_map)
|
|||
*/
|
||||
static void detach_destroy_domains(const struct cpumask *cpu_map)
|
||||
{
|
||||
unsigned int cpu = cpumask_any(cpu_map);
|
||||
int i;
|
||||
|
||||
if (rcu_access_pointer(per_cpu(sd_asym_cpucapacity, cpu)))
|
||||
static_branch_dec_cpuslocked(&sched_asym_cpucapacity);
|
||||
|
||||
rcu_read_lock();
|
||||
for_each_cpu(i, cpu_map)
|
||||
cpu_attach_domain(NULL, &def_root_domain, i);
|
||||
|
|
Загрузка…
Ссылка в новой задаче