pi-futex: set PF_EXITING without taking ->pi_lock
It is a bit annoying that do_exit() takes ->pi_lock to set PF_EXITING. All we need is to synchronize with lookup_pi_state() which saw this task without PF_EXITING under ->pi_lock. Change do_exit() to use spin_unlock_wait(). Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
7917ff9a4c
commit
d2ee7198cc
1 changed files with 3 additions and 3 deletions
|
@ -931,13 +931,13 @@ fastcall NORET_TYPE void do_exit(long code)
|
|||
schedule();
|
||||
}
|
||||
|
||||
tsk->flags |= PF_EXITING;
|
||||
/*
|
||||
* tsk->flags are checked in the futex code to protect against
|
||||
* an exiting task cleaning up the robust pi futexes.
|
||||
*/
|
||||
spin_lock_irq(&tsk->pi_lock);
|
||||
tsk->flags |= PF_EXITING;
|
||||
spin_unlock_irq(&tsk->pi_lock);
|
||||
smp_mb();
|
||||
spin_unlock_wait(&tsk->pi_lock);
|
||||
|
||||
if (unlikely(in_atomic()))
|
||||
printk(KERN_INFO "note: %s[%d] exited with preempt_count %d\n",
|
||||
|
|
Loading…
Reference in a new issue