diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index fd0e55fee9a3..0d453e9c6ea2 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6762,8 +6762,13 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f if (sd_flag & SD_BALANCE_WAKE) { record_wakee(p); - want_affine = (!wake_wide(p) && !wake_cap(p, cpu, prev_cpu) && - cpumask_test_cpu(cpu, tsk_cpus_allowed(p))); + /* + * do wake_cap unconditionally as it causes task and cpu + * utilization to be synced, and we need that for energy + * aware wakeups + */ + want_affine = !wake_wide(p) && !wake_cap(p, cpu, prev_cpu) + && cpumask_test_cpu(cpu, tsk_cpus_allowed(p)); } if (energy_aware() && !(cpu_rq(prev_cpu)->rd->overutilized))