Messages in this thread | | | Date | Thu, 21 Sep 2017 12:31:05 -0400 | From | Steven Rostedt <> | Subject | Re: [PATCH RT] locking/rtmutex: don't drop the wait_lock twice |
| |
On Thu, 21 Sep 2017 17:48:43 +0200 Sebastian Andrzej Siewior <bigeasy@linutronix.de> 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: rt-stable@vger.kernel.org > Reported-by: Gusenleitner Klaus <gus@keba.com> > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > --- > 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;
| |