diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 95af63ada3fa..4f623d62f1ee 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -8517,6 +8517,17 @@ static struct rq *find_busiest_queue(struct lb_env *env, capacity = capacity_of(i); + /* + * For ASYM_CPUCAPACITY domains, don't pick a CPU that could + * eventually lead to active_balancing high->low capacity. + * Higher per-CPU capacity is considered better than balancing + * average load. + */ + if (env->sd->flags & SD_ASYM_CPUCAPACITY && + capacity_of(env->dst_cpu) < capacity && + rq->nr_running == 1) + continue; + wl = weighted_cpuload(rq); /*