[PATCH] sched/fair: Fix per-CPU kthread and wakee stacking for asym CPU capacity

From: Vincent Donnefort
Date: Wed Nov 24 2021 - 09:18:03 EST


A shortcut has been introduced in select_idle_sibling() to return prev_cpu
if the wakee is woken up by a per-CPU kthread. This is an issue for
asymmetric CPU capacity systems where the wakee might not fit prev_cpu
anymore. Evaluate asym_fits_capacity() for prev_cpu before using that
shortcut.

Fixes: 52262ee567ad ("sched/fair: Allow a per-CPU kthread waking a task to stack on the same CPU, to fix XFS performance regression")
Signed-off-by: Vincent Donnefort <vincent.donnefort@xxxxxxx>

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 6291876a9d32..b90dc6fd86ca 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -6410,7 +6410,8 @@ static int select_idle_sibling(struct task_struct *p, int prev, int target)
*/
if (is_per_cpu_kthread(current) &&
prev == smp_processor_id() &&
- this_rq()->nr_running <= 1) {
+ this_rq()->nr_running <= 1 &&
+ asym_fits_capacity(task_util, prev)) {
return prev;
}

--
2.25.1