[tip: sched/urgent] sched/deadline: Use revised wakeup rule only for running dl_server

From: tip-bot2 for Gabriele Monaco

Date: Thu Jul 30 2026 - 07:10:47 EST


The following commit has been merged into the sched/urgent branch of tip:

Commit-ID: 1842bf97af109f5ebf830175c9725bf81ebb78b1
Gitweb: https://git.kernel.org/tip/1842bf97af109f5ebf830175c9725bf81ebb78b1
Author: Gabriele Monaco <gmonaco@xxxxxxxxxx>
AuthorDate: Fri, 22 May 2026 14:58:33 +02:00
Committer: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
CommitterDate: Thu, 30 Jul 2026 12:59:23 +02:00

sched/deadline: Use revised wakeup rule only for running dl_server

Commit 14a857056466 ("sched/deadline: Use revised wakeup rule for
dl_server") applies the revised wakeup rule to any server, as a result
servers that are not running (dl_defer_running == 0) and start with a
deadline overflow get enqueued and can boost tasks as if they were
running, invalidating the defer rule and the documented state model.

Apply the revised wakeup rule only for deferrable servers that are
marked as running.

Fixes: 14a857056466 ("sched/deadline: Use revised wakeup rule for dl_server")
Signed-off-by: Gabriele Monaco <gmonaco@xxxxxxxxxx>
Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
Acked-by: Juri Lelli <juri.lelli@xxxxxxxxxx>
Tested-by: Andrea Righi <arighi@xxxxxxxxxx>
Link: https://patch.msgid.link/20260522125833.264145-1-gmonaco@xxxxxxxxxx
---
kernel/sched/deadline.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index 0f858b9..2003000 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -1017,7 +1017,8 @@ static void update_dl_entity(struct sched_dl_entity *dl_se)
if (dl_time_before(dl_se->deadline, rq_clock(rq)) ||
dl_entity_overflow(dl_se, rq_clock(rq))) {

- if (unlikely((!dl_is_implicit(dl_se) || dl_se->dl_defer) &&
+ if (unlikely((!dl_is_implicit(dl_se) ||
+ (dl_se->dl_defer && dl_se->dl_defer_running)) &&
!dl_time_before(dl_se->deadline, rq_clock(rq)) &&
!is_dl_boosted(dl_se))) {
update_dl_revised_wakeup(dl_se, rq);