|
@@ -700,10 +700,14 @@ void do_exit(long code)
|
|
|
|
|
|
exit_signals(tsk); /* sets PF_EXITING */
|
|
|
/*
|
|
|
- * tsk->flags are checked in the futex code to protect against
|
|
|
- * an exiting task cleaning up the robust pi futexes.
|
|
|
+ * Ensure that all new tsk->pi_lock acquisitions must observe
|
|
|
+ * PF_EXITING. Serializes against futex.c:attach_to_pi_owner().
|
|
|
*/
|
|
|
smp_mb();
|
|
|
+ /*
|
|
|
+ * Ensure that we must observe the pi_state in exit_mm() ->
|
|
|
+ * mm_release() -> exit_pi_state_list().
|
|
|
+ */
|
|
|
raw_spin_unlock_wait(&tsk->pi_lock);
|
|
|
|
|
|
if (unlikely(in_atomic())) {
|