diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c index 8207fdade4a8..958eba094274 100644 --- a/kernel/locking/rtmutex.c +++ b/kernel/locking/rtmutex.c @@ -326,17 +326,13 @@ static __always_inline bool unlock_rt_mutex_safe(struct rt_mutex_base *lock, static __always_inline int __waiter_prio(struct task_struct *task) { - int prio = task->prio; int waiter_prio = 0; trace_android_vh_rtmutex_waiter_prio(task, &waiter_prio); if (waiter_prio > 0) return waiter_prio; - if (!rt_prio(prio)) - return DEFAULT_PRIO; - - return prio; + return task->prio; } static __always_inline void diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 20080b633588..1e5dc0964c7b 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -7196,8 +7196,10 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task) } else { if (dl_prio(oldprio)) p->dl.pi_se = &p->dl; - if (rt_prio(oldprio)) + else if (rt_prio(oldprio)) p->rt.timeout = 0; + else if (!task_has_idle_policy(p)) + reweight_task(p, prio - MAX_RT_PRIO); } __setscheduler_prio(p, prio);