diff options
author | Peter Zijlstra <peterz@infradead.org> | 2017-03-22 11:35:55 +0100 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2017-03-23 19:10:08 +0100 |
commit | 16ffa12d742534d4ff73e8b3a4e81c1de39196f0 (patch) | |
tree | 2c19026cc476ea8f7bf12540788bfac1c0b41611 /kernel/softirq.c | |
parent | 73d786bd043ebc855f349c81ea805f6b11cbf2aa (diff) | |
download | kernel_replicant_linux-16ffa12d742534d4ff73e8b3a4e81c1de39196f0.tar.gz kernel_replicant_linux-16ffa12d742534d4ff73e8b3a4e81c1de39196f0.tar.bz2 kernel_replicant_linux-16ffa12d742534d4ff73e8b3a4e81c1de39196f0.zip |
futex: Pull rt_mutex_futex_unlock() out from under hb->lock
There's a number of 'interesting' problems, all caused by holding
hb->lock while doing the rt_mutex_unlock() equivalient.
Notably:
- a PI inversion on hb->lock; and,
- a SCHED_DEADLINE crash because of pointer instability.
The previous changes:
- changed the locking rules to cover {uval,pi_state} with wait_lock.
- allow to do rt_mutex_futex_unlock() without dropping wait_lock; which in
turn allows to rely on wait_lock atomicity completely.
- simplified the waiter conundrum.
It's now sufficient to hold rtmutex::wait_lock and a reference on the
pi_state to protect the state consistency, so hb->lock can be dropped
before calling rt_mutex_futex_unlock().
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: juri.lelli@arm.com
Cc: bigeasy@linutronix.de
Cc: xlpang@redhat.com
Cc: rostedt@goodmis.org
Cc: mathieu.desnoyers@efficios.com
Cc: jdesfossez@efficios.com
Cc: dvhart@infradead.org
Cc: bristot@redhat.com
Link: http://lkml.kernel.org/r/20170322104151.900002056@infradead.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/softirq.c')
0 files changed, 0 insertions, 0 deletions