diff options
-rw-r--r-- | kernel/sched/fair.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 7aa10c025c57..1d69e49a6bdf 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -7895,7 +7895,7 @@ group_type group_classify(struct sched_group *group, * seen a busy group yet and we are close to throttling. We want to * prioritize spreading work over power optimization. */ - cpu = cpumask_first(sched_group_cpus(group)); + cpu = group_first_cpu(group); if (sysctl_sched_enable_power_aware && (capacity(env->dst_rq) == group_rq_capacity(group)) && sgs->sum_nr_running && (env->idle != CPU_NOT_IDLE) && @@ -8015,8 +8015,13 @@ static bool update_sd_pick_busiest(struct lb_env *env, return false; } - if (env->flags & LBF_PWR_ACTIVE_BALANCE) + if (env->flags & LBF_PWR_ACTIVE_BALANCE) { + if (power_cost_at_freq(group_first_cpu(sg), 0) <= + power_cost_at_freq(group_first_cpu(sds->busiest), 0)) + return false; + return true; + } if (sgs->avg_load <= busiest->avg_load) return false; |