Messages in this thread |  | | Date | Mon, 10 Oct 2016 13:40:10 +0200 | From | Peter Zijlstra <> | Subject | Re: [RFC][PATCH 4/4] futex: Rewrite FUTEX_UNLOCK_PI |
| |
On Mon, Oct 10, 2016 at 12:17:48PM +0200, Thomas Gleixner wrote: > There is another problem with all that racing against fixup_owner() > resp. fixup_pi_state_owner(). > > I fear, we need to rethink this whole locking/protection scheme from > scratch.
So for pi_state (ie, the attach_to_pi_state() vs put_pi_state() race) I can see two options, either we re-take hb->lock after we've completed the futex_unlock_pi() in order to drop it, which is cringe worthy, or we make pi_state RCU freed and replace that WARN_ON() in attach_to_pi_state() with an atomic_inc_not_zero() and deal with the fail case by going back to the caller and treating it like !top_waiter.
As to the rt_mutex vs futex state coherence, I think I can do all of that with rt_mutex::wait_lock held, the alternative is doing part with hb->lock and part with rt_mutex::wait_lock and parts with both, but that's already hurting my head and I didn't even try yet.
Let me think a wee bit more on this..
|  |