]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - kernel/futex.c
[PATCH] Fix memory ordering problem in wake_futex()
[linux-2.6-omap-h63xx.git] / kernel / futex.c
index 5872e3507f356bc61c71fa65c7e58d7866df316c..5e71a6bf6f6b47fb9b93cc1540e0632b5dd5b4e7 100644 (file)
@@ -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;
 }