Re: [PATCH v3 REPOST] sched: Remove a preempt-disable section in rt_mutex_setprio()
From: Peter Zijlstra
Date: Fri Nov 28 2025 - 05:07:04 EST
On Thu, Nov 27, 2025 at 04:55:29PM +0100, Sebastian Andrzej Siewior wrote:
> rt_mutex_setprio() has only one caller: rt_mutex_adjust_prio(). It
> expects that task_struct::pi_lock and rt_mutex_base::wait_lock are held.
> Both locks are raw_spinlock_t and are acquired with disabled interrupts.
>
> Nevertheless rt_mutex_setprio() disables preemption while invoking
> __balance_callbacks() and raw_spin_rq_unlock(). Even if one of the
> balance callbacks unlocks the rq then it must not enable interrupts
> because rt_mutex_base::wait_lock is still locked.
> Therefore interrupts should remain disabled and disabling preemption is
> not needed.
>
> Commit 4c9a4bc89a9cc ("sched: Allow balance callbacks for check_class_changed()")
> adds a preempt-disable section to rt_mutex_setprio() and
> __sched_setscheduler(). In __sched_setscheduler() the preemption is
> disabled before rq is unlocked and interrupts enabled but I don't see
> why it makes a difference in rt_mutex_setprio().
>
> Remove the preempt_disable() section from rt_mutex_setprio().
>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
Thanks!