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:
commit
0dbe6cb8f7
|
@ -798,7 +798,8 @@ static int generate_sched_domains(cpumask_var_t **domains,
|
||||||
cpumask_subset(cp->cpus_allowed, top_cpuset.effective_cpus))
|
cpumask_subset(cp->cpus_allowed, top_cpuset.effective_cpus))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (is_sched_load_balance(cp))
|
if (is_sched_load_balance(cp) &&
|
||||||
|
!cpumask_empty(cp->effective_cpus))
|
||||||
csa[csn++] = cp;
|
csa[csn++] = cp;
|
||||||
|
|
||||||
/* skip @cp's subtree if not a partition root */
|
/* skip @cp's subtree if not a partition root */
|
||||||
|
|
|
@ -1948,7 +1948,7 @@ next_level:
|
||||||
static int
|
static int
|
||||||
build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *attr)
|
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 sched_domain *sd;
|
||||||
struct s_data d;
|
struct s_data d;
|
||||||
struct rq *rq = NULL;
|
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;
|
struct sched_domain_topology_level *tl_asym;
|
||||||
bool has_asym = false;
|
bool has_asym = false;
|
||||||
|
|
||||||
|
if (WARN_ON(cpumask_empty(cpu_map)))
|
||||||
|
goto error;
|
||||||
|
|
||||||
alloc_state = __visit_domain_allocation_hell(&d, cpu_map);
|
alloc_state = __visit_domain_allocation_hell(&d, cpu_map);
|
||||||
if (alloc_state != sa_rootdomain)
|
if (alloc_state != sa_rootdomain)
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -2026,7 +2029,7 @@ build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *att
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
||||||
if (has_asym)
|
if (has_asym)
|
||||||
static_branch_enable_cpuslocked(&sched_asym_cpucapacity);
|
static_branch_inc_cpuslocked(&sched_asym_cpucapacity);
|
||||||
|
|
||||||
if (rq && sched_debug_enabled) {
|
if (rq && sched_debug_enabled) {
|
||||||
pr_info("root domain span: %*pbl (max cpu_capacity = %lu)\n",
|
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)
|
static void detach_destroy_domains(const struct cpumask *cpu_map)
|
||||||
{
|
{
|
||||||
|
unsigned int cpu = cpumask_any(cpu_map);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (rcu_access_pointer(per_cpu(sd_asym_cpucapacity, cpu)))
|
||||||
|
static_branch_dec_cpuslocked(&sched_asym_cpucapacity);
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
for_each_cpu(i, cpu_map)
|
for_each_cpu(i, cpu_map)
|
||||||
cpu_attach_domain(NULL, &def_root_domain, i);
|
cpu_attach_domain(NULL, &def_root_domain, i);
|
||||||
|
|
Loading…
Reference in New Issue