]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
sched: Deadline has dynamic priority
authorPeter Zijlstra <peterz@infradead.org>
Thu, 15 Jan 2026 08:25:37 +0000 (09:25 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 Jan 2026 10:21:23 +0000 (11:21 +0100)
[ Upstream commit e008ec6c7904ed99d3b2cb634b6545b008a99288 ]

While FIFO/RR have static priority, DEADLINE is a dynamic priority
scheme. Notably it has static priority -1. Do not assume the priority
doesn't change for deadline tasks just because the static priority
doesn't change.

This ensures DL always sees {DE,EN}QUEUE_MOVE where appropriate.

Fixes: ff77e4685359 ("sched/rt: Fix PI handling vs. sched_setscheduler()")
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Pierre Gondois <pierre.gondois@arm.com>
Tested-by: Juri Lelli <juri.lelli@redhat.com>
Link: https://patch.msgid.link/20260114130528.GB831285@noisy.programming.kicks-ass.net
Signed-off-by: Sasha Levin <sashal@kernel.org>
kernel/sched/core.c
kernel/sched/syscalls.c

index eb47d294e2c5a127c7cd6157f651283e17c8e7fd..e460c22de8ad4946294496fe9a4653421f38baf6 100644 (file)
@@ -7383,7 +7383,7 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task)
        trace_sched_pi_setprio(p, pi_task);
        oldprio = p->prio;
 
-       if (oldprio == prio)
+       if (oldprio == prio && !dl_prio(prio))
                queue_flag &= ~DEQUEUE_MOVE;
 
        prev_class = p->sched_class;
index bf360a6fbb800e01065dd080a2e2afa2fb0c4030..6805a63d47af701fc569d56a894272ab0e864c6e 100644 (file)
@@ -688,7 +688,7 @@ change:
                 * itself.
                 */
                newprio = rt_effective_prio(p, newprio);
-               if (newprio == oldprio)
+               if (newprio == oldprio && !dl_prio(newprio))
                        queue_flags &= ~DEQUEUE_MOVE;
        }