summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorVincent Guittot <vincent.guittot@linaro.org>2026-09-21 17:22:33 +0200
committerPeter Zijlstra <peterz@infradead.org>2026-09-25 12:45:59 +0200
commitd2e0100827578641df2f85546bdb57bb1d8ff55b (patch)
tree32791b736cbc122730f0329ab73859609dd1954a /kernel
parent4bf32ec3327d2d2286e96508cd128ce1592f43ce (diff)
downloadlinux-d2e0100827578641df2f85546bdb57bb1d8ff55b.tar.gz
linux-d2e0100827578641df2f85546bdb57bb1d8ff55b.zip
sched/eevdf: Handle more short slice waking cases
Handle better the cases with several short slice tasks waking up simultaneously. Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://patch.msgid.link/20260921152238.3804392-4-vincent.guittot@linaro.org
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/fair.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 82155d91de06..03206e15e6fe 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -9836,8 +9836,14 @@ static inline bool set_preempt_buddy(struct cfs_rq *cfs_rq, struct sched_entity
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;
+ if (cfs_rq->next) {
+ if (cfs_rq->next->slice < pse->slice)
+ return false;
+
+ if (cfs_rq->next->slice == pse->slice &&
+ entity_before(cfs_rq->next, pse))
+ return false;
+ }
set_next_buddy(cfs_rq, pse);
return true;