On Thu, 21 Sep 2017 17:48:43 +0200 Sebastian Andrzej Siewior <[email protected]> wrote:
> Since the futex rework, __rt_mutex_start_proxy_lock() does no longer > acquire the wait_lock so it must not drop it. Otherwise the lock is not > only unlocked twice but also the preemption counter is underflown. > > Cc: [email protected] > Reported-by: Gusenleitner Klaus <[email protected]> > Signed-off-by: Sebastian Andrzej Siewior <[email protected]> > --- > kernel/locking/rtmutex.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c > index f03876322d4a..79f49d73e4d0 100644 > --- a/kernel/locking/rtmutex.c > +++ b/kernel/locking/rtmutex.c > @@ -2281,7 +2281,6 @@ int __rt_mutex_start_proxy_lock(struct rt_mutex *lock, > raw_spin_lock(&task->pi_lock); > if (task->pi_blocked_on) { > raw_spin_unlock(&task->pi_lock); > - raw_spin_unlock_irq(&lock->wait_lock); Hmm, before this patch, irqs are enabled when returning with -EAGAIN. But now they are not. Should that be: raw_spin_unlock_irq(&taks->pi_lock); or is there something that changes this? -- Steve > return -EAGAIN; > } > task->pi_blocked_on = PI_REQUEUE_INPROGRESS;

