[tip: sched/core] sched/fair: Set next buddy for preempt short
From: tip-bot2 for Vincent Guittot
Date: Tue Jun 30 2026 - 05:06:40 EST
The following commit has been merged into the sched/core branch of tip:
Commit-ID: 8f97b627ff1c9b0f2eba71b326ac09326bf6b4ea
Gitweb: https://git.kernel.org/tip/8f97b627ff1c9b0f2eba71b326ac09326bf6b4ea
Author: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
AuthorDate: Wed, 24 Jun 2026 17:12:24 +02:00
Committer: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
CommitterDate: Tue, 30 Jun 2026 10:56:54 +02:00
sched/fair: Set next buddy for preempt short
If a shorter slice task can preempt current at wakeup, we make sure that
the decision will not be overwritten in between by setting the task as the
next buddy. This still implies that the waking task remains eligible when
the scheduler will actually pick the next task to run.
Signed-off-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
Tested-by: K Prateek Nayak <kprateek.nayak@xxxxxxx>
Link: https://patch.msgid.link/20260624151229.1710703-2-vincent.guittot@xxxxxxxxxx
---
kernel/sched/fair.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 90d7f83..976cc3c 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -9757,6 +9757,15 @@ static inline bool set_preempt_buddy(struct cfs_rq *cfs_rq, struct sched_entity
return true;
}
+static inline bool set_short_buddy(struct cfs_rq *cfs_rq, struct sched_entity *pse)
+{
+ if (cfs_rq->next && cfs_rq->next->slice < pse->slice)
+ return false;
+
+ set_next_buddy(cfs_rq, pse);
+ return true;
+}
+
/*
* WF_SYNC|WF_TTWU indicates the waker expects to sleep but it is not
* strictly enforced because the hint is either misunderstood or
@@ -9931,7 +9940,7 @@ pick:
preempt:
if (preempt_action == PREEMPT_WAKEUP_SHORT) {
cancel_protect_slice(se);
- clear_buddies(cfs_rq, se);
+ set_short_buddy(cfs_rq, pse);
}
resched_curr_lazy(rq);