On Sat, 8 Oct 2016, Peter Zijlstra wrote: > > So in this case we tell the caller on CPU 1 that the futex is in > > inconsistent state, because pistate->owner still points to the unlocking > > task while the user space value alread shows the new owner. So this sanity > > check triggers and we simply fail while we should not. It's [10] in the > > state matrix above attach_to_pi_state(). > > Urgh, yes. I think I can cure that, by taking > pi_state->pi_mutex.wait_lock in attach_to_pi_state(), but blergh. > > > I suspect that there are more issues like this, especially since I did not > > look at requeue_pi yet, but by now my brain is completely fried. > > Yes, I know about fried brains :-( This stuff has far too many moving > parts. I've been staring at this stuff far too long. > > Also, we need better tools to stress this stuff.
I tried to come up with something which forces all corner cases of this years ago and failed. The state space seems to be infinite. Thanks, tglx