[PATCH] Fix memory ordering problem in wake_futex()
Fix a memory ordering problem that occurs on IA64. The "store" to q->lock_ptr in wake_futex() can become visible before wake_up_all() clears the lock in the futex_q. Signed-off-by: Jack Steiner <steiner@sgi.com> Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
6003a93e7b
commit
8e31108b9f
1 changed files with 6 additions and 0 deletions
|
@ -270,7 +270,13 @@ static void wake_futex(struct futex_q *q)
|
|||
/*
|
||||
* The waiting task can free the futex_q as soon as this is written,
|
||||
* without taking any locks. This must come last.
|
||||
*
|
||||
* A memory barrier is required here to prevent the following store
|
||||
* to lock_ptr from getting ahead of the wakeup. Clearing the lock
|
||||
* at the end of wake_up_all() does not prevent this store from
|
||||
* moving.
|
||||
*/
|
||||
wmb();
|
||||
q->lock_ptr = NULL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue