[PATCH 12/18 v2] sched/eevdf: Try to push short slice task on a better CPU

From: Vincent Guittot

Date: Fri Oct 02 2026 - 11:49:44 EST


When a task is put back in the runnable list, we check if we should try to
push on a better CPU, i.e. when fair is preempted by a higher class or the
task is preempted by another fair task.

Signed-off-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
---
kernel/sched/fair.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 38eb80dbd1a4..186f10173eed 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -9826,11 +9826,34 @@ static bool __check_pushable_fair_task(struct rq *rq, struct task_struct *p)
return true;
}

+static bool check_pushable_short_task(struct rq *rq, struct task_struct *p)
+{
+ struct sched_entity *pse = &p->se;
+ struct cfs_rq *cfs_rq = &rq->cfs;
+
+ if (cfs_rq->h_nr_runnable <= 1)
+ return false;
+
+ if (!entity_eligible(cfs_rq, pse))
+ return false;
+
+ if (pse->slice < cfs_rq_max_slice(cfs_rq))
+ return true;
+
+ return false;
+}
+
static bool fair_check_pushable_task(struct rq *rq, struct task_struct *p, struct task_struct *next)
{
if (!__check_pushable_fair_task(rq, p))
return false;

+ if (next && next->sched_class != p->sched_class)
+ return true;
+
+ if (check_pushable_short_task(rq, p))
+ return true;
+
return false;
}

--
2.53.0