Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e31108b authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds
Browse files

[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: default avatarJack Steiner <steiner@sgi.com>
Acked-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 6003a93e
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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;
}