From: Thomas Gleixner <tglx@linutronix.de>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>,
mingo@kernel.org, juri.lelli@arm.com, xlpang@redhat.com,
bigeasy@linutronix.de, linux-kernel@vger.kernel.org,
mathieu.desnoyers@efficios.com, jdesfossez@efficios.com,
bristot@redhat.com, Ingo Molnar <mingo@redhat.com>
Subject: Re: [PATCH -v2 1/9] rtmutex: Deboost before waking up the top waiter
Date: Thu, 29 Sep 2016 10:43:54 -0400 (EDT) [thread overview]
Message-ID: <alpine.DEB.2.20.1609291034390.4825@nanos> (raw)
In-Reply-To: <20160926154112.GH5016@twins.programming.kicks-ass.net>
On Mon, 26 Sep 2016, Peter Zijlstra wrote:
> On Mon, Sep 26, 2016 at 11:37:27AM -0400, Steven Rostedt wrote:
> > On Mon, 26 Sep 2016 11:35:03 -0400
> > Steven Rostedt <rostedt@goodmis.org> wrote:
> >
> > > Especially now that the code after the spin_unlock(&hb->lock) is now a
> > > critical section (preemption is disable). There's nothing obvious in
> > > futex.c that says it is.
> >
> > Not to mention, this looks like it will break PREEMPT_RT as wake_up_q()
> > calls sleepable spin locks.
>
> What locks would that be?
None :)
It still breaks RT in the futex case due to:
deboost = rt_mutex_futex_unlock();
spin_unlock(&hb->lock);
....
migrate_enable();
if (in_atomic())
return;
So the migrate_disable() which was emitted by spin_lock(&hb->lock) will not
be cleaned up and we leak the migrate disable count. We can work around
that, but it's not pretty.
As a related note, Sebastian decoded another possible priority inversion
issue in the futex mess.
T1 holds futex
T2 blocks on futex and boosts T1
T1 unlocks futex and holds hb->lock
T1 unlocks rt mutex, so T1 has no more pi waiters
T3 blocks on hb->lock and adds itself to the pi waiters list of T1
T1 unlocks hb->lock and deboosts itself
T4 preempts T1 so the wakeup of T2 gets delayed .....
We tried to fix it with a preempt_disable() and that's where we ran into
that migrate_enable() hickup. We have a non deboosting variant for
spin_unlock() for now, but we'll have to revisit that anyway ...
Thanks,
tglx
next prev parent reply other threads:[~2016-09-29 14:46 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-26 12:32 [PATCH -v2 0/9] PI and assorted failings Peter Zijlstra
2016-09-26 12:32 ` [PATCH -v2 1/9] rtmutex: Deboost before waking up the top waiter Peter Zijlstra
2016-09-26 15:15 ` Steven Rostedt
2016-09-26 15:22 ` Peter Zijlstra
2016-09-26 15:35 ` Steven Rostedt
2016-09-26 15:37 ` Steven Rostedt
2016-09-26 15:41 ` Peter Zijlstra
2016-09-29 14:43 ` Thomas Gleixner [this message]
2016-09-29 14:49 ` Peter Zijlstra
2016-09-26 15:39 ` Peter Zijlstra
2016-09-28 9:07 ` Sebastian Andrzej Siewior
2016-09-28 9:24 ` Peter Zijlstra
2016-09-26 12:32 ` [PATCH -v2 2/9] sched/rtmutex/deadline: Fix a PI crash for deadline tasks Peter Zijlstra
2016-09-26 15:20 ` Steven Rostedt
2016-09-26 15:26 ` Peter Zijlstra
2016-09-29 14:49 ` Thomas Gleixner
2016-09-26 12:32 ` [PATCH -v2 3/9] sched/deadline/rtmutex: Dont miss the dl_runtime/dl_period update Peter Zijlstra
2016-09-26 16:03 ` Steven Rostedt
2016-09-29 14:48 ` Thomas Gleixner
2016-09-26 12:32 ` [PATCH -v2 4/9] rtmutex: Remove rt_mutex_fastunlock() Peter Zijlstra
2016-09-29 14:47 ` Thomas Gleixner
2016-09-26 12:32 ` [PATCH -v2 5/9] rtmutex: Clean up Peter Zijlstra
2016-09-26 16:09 ` Steven Rostedt
2016-09-29 14:51 ` Thomas Gleixner
2016-09-26 12:32 ` [PATCH -v2 6/9] sched/rtmutex: Refactor rt_mutex_setprio() Peter Zijlstra
2016-09-26 16:57 ` Steven Rostedt
2016-09-26 12:32 ` [PATCH -v2 7/9] sched,tracing: Update trace_sched_pi_setprio() Peter Zijlstra
2016-09-26 17:04 ` Steven Rostedt
2016-09-27 7:44 ` Peter Zijlstra
2016-09-26 12:32 ` [PATCH -v2 8/9] rtmutex: Fix PI chain order integrity Peter Zijlstra
2016-09-26 12:32 ` [PATCH -v2 9/9] rtmutex: Fix more prio comparisons Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.20.1609291034390.4825@nanos \
--to=tglx@linutronix.de \
--cc=bigeasy@linutronix.de \
--cc=bristot@redhat.com \
--cc=jdesfossez@efficios.com \
--cc=juri.lelli@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=xlpang@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®