sched/uclamp: Make select_idle_capacity() use util_fits_cpu()
commitb759caa1d9upstream. Use the new util_fits_cpu() to ensure migration margin and capacity pressure are taken into account correctly when uclamp is being used otherwise we will fail to consider CPUs as fitting in scenarios where they should. Fixes:b4c9c9f156("sched/fair: Prefer prev cpu in asymmetric wakeup path") Signed-off-by: Qais Yousef <qais.yousef@arm.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20220804143609.515789-5-qais.yousef@arm.com (cherry picked from commitb759caa1d9) Signed-off-by: Qais Yousef (Google) <qyousef@layalina.io> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8ca2bf63d9
commit
2fd1c194e6
1 changed files with 5 additions and 3 deletions
|
|
@ -6394,21 +6394,23 @@ static int select_idle_cpu(struct task_struct *p, struct sched_domain *sd, int t
|
|||
static int
|
||||
select_idle_capacity(struct task_struct *p, struct sched_domain *sd, int target)
|
||||
{
|
||||
unsigned long task_util, best_cap = 0;
|
||||
unsigned long task_util, util_min, util_max, best_cap = 0;
|
||||
int cpu, best_cpu = -1;
|
||||
struct cpumask *cpus;
|
||||
|
||||
cpus = this_cpu_cpumask_var_ptr(select_idle_mask);
|
||||
cpumask_and(cpus, sched_domain_span(sd), p->cpus_ptr);
|
||||
|
||||
task_util = uclamp_task_util(p);
|
||||
task_util = task_util_est(p);
|
||||
util_min = uclamp_eff_value(p, UCLAMP_MIN);
|
||||
util_max = uclamp_eff_value(p, UCLAMP_MAX);
|
||||
|
||||
for_each_cpu_wrap(cpu, cpus, target) {
|
||||
unsigned long cpu_cap = capacity_of(cpu);
|
||||
|
||||
if (!available_idle_cpu(cpu) && !sched_idle_cpu(cpu))
|
||||
continue;
|
||||
if (fits_capacity(task_util, cpu_cap))
|
||||
if (util_fits_cpu(task_util, util_min, util_max, cpu))
|
||||
return cpu;
|
||||
|
||||
if (cpu_cap > best_cap) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue