utilization is used to detect a misfit task but the load is then used to select the task on the CPU which can lead to select a small task with high weight instead of the task that triggered the misfit migration.
Signed-off-by: Vincent Guittot <vincent.guit...@linaro.org> Acked-by: Valentin Schneider <valentin.schnei...@arm.com> --- kernel/sched/fair.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index a7c8ee6..acca869 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -7429,14 +7429,8 @@ static int detach_tasks(struct lb_env *env) break; case migrate_misfit: - load = task_h_load(p); - - /* - * utilization of misfit task might decrease a bit - * since it has been recorded. Be conservative in the - * condition. - */ - if (load < env->imbalance) + /* This is not a misfit task */ + if (task_fits_capacity(p, capacity_of(env->src_cpu))) goto next; env->imbalance = 0; -- 2.7.4