]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
sched/deadline: Use revised wakeup rule only for running dl_server
authorGabriele Monaco <gmonaco@redhat.com>
Fri, 22 May 2026 12:58:33 +0000 (14:58 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 30 Jul 2026 10:59:23 +0000 (12:59 +0200)
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@redhat.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Juri Lelli <juri.lelli@redhat.com>
Tested-by: Andrea Righi <arighi@nvidia.com>
Link: https://patch.msgid.link/20260522125833.264145-1-gmonaco@redhat.com
kernel/sched/deadline.c

index 0f858b98c9aa301801aa5277916b979241d4fe85..200300043fa54abb58d82711a583cdbe2de435d6 100644 (file)
@@ -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);