Messages in this thread Patch in this message | | | From | Vincent Donnefort <> | Subject | [PATCH v3] sched/fair: Fix per-CPU kthread and wakee stacking for asym CPU capacity | Date | Mon, 29 Nov 2021 17:31:15 +0000 |
| |
select_idle_sibling() has a special case for tasks woken up by a per-CPU kthread where the selected CPU is the previous one. For asymmetric CPU capacity systems, the assumption was that the wakee couldn't have a bigger utilization during task placement than it used to have during the last activation. That was not considering uclamp.min which can completely change between two task activations and as a consequence mandates the fitness criterion asym_fits_capacity(), even for the exit path described above.
Fixes: b4c9c9f15649 ("sched/fair: Prefer prev cpu in asymmetric wakeup path") Signed-off-by: Vincent Donnefort <vincent.donnefort@arm.com> Reviewed-by: Valentin Schneider <valentin.schneider@arm.com> Reviewed-by: Dietmar Eggemann <dietmar.eggemann@arm.com> --- V2 -> V3: * A more verbose commit message. V1 -> V2: * Point to the correct fixed patch.
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
| |