|
@@ -124,16 +124,16 @@
|
|
|
* futex_wait(futex, val);
|
|
|
*
|
|
|
* waiters++; (a)
|
|
|
- * mb(); (A) <-- paired with -.
|
|
|
- * |
|
|
|
- * lock(hash_bucket(futex)); |
|
|
|
- * |
|
|
|
- * uval = *futex; |
|
|
|
- * | *futex = newval;
|
|
|
- * | sys_futex(WAKE, futex);
|
|
|
- * | futex_wake(futex);
|
|
|
- * |
|
|
|
- * `-------> mb(); (B)
|
|
|
+ * smp_mb(); (A) <-- paired with -.
|
|
|
+ * |
|
|
|
+ * lock(hash_bucket(futex)); |
|
|
|
+ * |
|
|
|
+ * uval = *futex; |
|
|
|
+ * | *futex = newval;
|
|
|
+ * | sys_futex(WAKE, futex);
|
|
|
+ * | futex_wake(futex);
|
|
|
+ * |
|
|
|
+ * `--------> smp_mb(); (B)
|
|
|
* if (uval == val)
|
|
|
* queue();
|
|
|
* unlock(hash_bucket(futex));
|
|
@@ -334,7 +334,7 @@ static inline void futex_get_mm(union futex_key *key)
|
|
|
/*
|
|
|
* Ensure futex_get_mm() implies a full barrier such that
|
|
|
* get_futex_key() implies a full barrier. This is relied upon
|
|
|
- * as full barrier (B), see the ordering comment above.
|
|
|
+ * as smp_mb(); (B), see the ordering comment above.
|
|
|
*/
|
|
|
smp_mb__after_atomic();
|
|
|
}
|
|
@@ -407,10 +407,10 @@ static void get_futex_key_refs(union futex_key *key)
|
|
|
|
|
|
switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) {
|
|
|
case FUT_OFF_INODE:
|
|
|
- ihold(key->shared.inode); /* implies MB (B) */
|
|
|
+ ihold(key->shared.inode); /* implies smp_mb(); (B) */
|
|
|
break;
|
|
|
case FUT_OFF_MMSHARED:
|
|
|
- futex_get_mm(key); /* implies MB (B) */
|
|
|
+ futex_get_mm(key); /* implies smp_mb(); (B) */
|
|
|
break;
|
|
|
default:
|
|
|
/*
|
|
@@ -418,7 +418,7 @@ static void get_futex_key_refs(union futex_key *key)
|
|
|
* mm, therefore the only purpose of calling get_futex_key_refs
|
|
|
* is because we need the barrier for the lockless waiter check.
|
|
|
*/
|
|
|
- smp_mb(); /* explicit MB (B) */
|
|
|
+ smp_mb(); /* explicit smp_mb(); (B) */
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -497,7 +497,7 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw)
|
|
|
if (!fshared) {
|
|
|
key->private.mm = mm;
|
|
|
key->private.address = address;
|
|
|
- get_futex_key_refs(key); /* implies MB (B) */
|
|
|
+ get_futex_key_refs(key); /* implies smp_mb(); (B) */
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -572,7 +572,7 @@ again:
|
|
|
key->shared.pgoff = basepage_index(page);
|
|
|
}
|
|
|
|
|
|
- get_futex_key_refs(key); /* implies MB (B) */
|
|
|
+ get_futex_key_refs(key); /* implies smp_mb(); (B) */
|
|
|
|
|
|
out:
|
|
|
unlock_page(page);
|
|
@@ -1864,7 +1864,7 @@ static inline struct futex_hash_bucket *queue_lock(struct futex_q *q)
|
|
|
|
|
|
q->lock_ptr = &hb->lock;
|
|
|
|
|
|
- spin_lock(&hb->lock); /* implies MB (A) */
|
|
|
+ spin_lock(&hb->lock); /* implies smp_mb(); (A) */
|
|
|
return hb;
|
|
|
}
|
|
|
|