summaryrefslogtreecommitdiffstats
path: root/kernel/sched/cpupri.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched/cpupri.c')
-rw-r--r--kernel/sched/cpupri.c29
1 files changed, 6 insertions, 23 deletions
diff --git a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c
index dd3f16d1a04a..0033731a0797 100644
--- a/kernel/sched/cpupri.c
+++ b/kernel/sched/cpupri.c
@@ -122,8 +122,7 @@ int cpupri_find_fitness(struct cpupri *cp, struct task_struct *p,
bool (*fitness_fn)(struct task_struct *p, int cpu))
{
int task_pri = convert_prio(p->prio);
- int best_unfit_idx = -1;
- int idx = 0, cpu;
+ int idx, cpu;
BUG_ON(task_pri >= CPUPRI_NR_PRIORITIES);
@@ -145,31 +144,15 @@ int cpupri_find_fitness(struct cpupri *cp, struct task_struct *p,
* If no CPU at the current priority can fit the task
* continue looking
*/
- if (cpumask_empty(lowest_mask)) {
- /*
- * Store our fallback priority in case we
- * didn't find a fitting CPU
- */
- if (best_unfit_idx == -1)
- best_unfit_idx = idx;
-
+ if (cpumask_empty(lowest_mask))
continue;
- }
return 1;
}
/*
- * If we failed to find a fitting lowest_mask, make sure we fall back
- * to the last known unfitting lowest_mask.
- *
- * Note that the map of the recorded idx might have changed since then,
- * so we must ensure to do the full dance to make sure that level still
- * holds a valid lowest_mask.
- *
- * As per above, the map could have been concurrently emptied while we
- * were busy searching for a fitting lowest_mask at the other priority
- * levels.
+ * If we failed to find a fitting lowest_mask, kick off a new search
+ * but without taking into account any fitness criteria this time.
*
* This rule favours honouring priority over fitting the task in the
* correct CPU (Capacity Awareness being the only user now).
@@ -184,8 +167,8 @@ int cpupri_find_fitness(struct cpupri *cp, struct task_struct *p,
* must do proper RT planning to avoid overloading the system if they
* really care.
*/
- if (best_unfit_idx != -1)
- return __cpupri_find(cp, p, lowest_mask, best_unfit_idx);
+ if (fitness_fn)
+ return cpupri_find(cp, p, lowest_mask);
return 0;
}