summaryrefslogtreecommitdiff
path: root/arch/tile/lib
diff options
context:
space:
mode:
authorChris Metcalf <cmetcalf@tilera.com>2011-05-02 15:13:13 -0400
committerChris Metcalf <cmetcalf@tilera.com>2011-05-04 14:40:07 -0400
commitdf29ccb6c06dcb65867d4fd3c2fa473017f60ecc (patch)
treedd05474f47c908f4167cbcd29f5cd41d66e6eb2f /arch/tile/lib
parent398fa5a9319797e43f67b215337afe62e39475ef (diff)
downloadlinux-3.10-df29ccb6c06dcb65867d4fd3c2fa473017f60ecc.tar.gz
linux-3.10-df29ccb6c06dcb65867d4fd3c2fa473017f60ecc.tar.bz2
linux-3.10-df29ccb6c06dcb65867d4fd3c2fa473017f60ecc.zip
arch/tile: allow nonatomic stores to interoperate with fast atomic syscalls
This semantic was already true for atomic operations within the kernel, and this change makes it true for the fast atomic syscalls (__NR_cmpxchg and __NR_atomic_update) as well. Previously, user-space had to use the fast atomic syscalls exclusively to update memory, since raw stores could lose a race with the atomic update code even when the atomic update hadn't actually modified the value. With this change, we no longer write back the value to memory if it hasn't changed. This allows certain types of idioms in user space to work as expected, e.g. "atomic exchange" to acquire a spinlock, followed by a raw store of zero to release the lock. Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Diffstat (limited to 'arch/tile/lib')
-rw-r--r--arch/tile/lib/atomic_asm_32.S2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/tile/lib/atomic_asm_32.S b/arch/tile/lib/atomic_asm_32.S
index 82f64cc6365..24448734f6f 100644
--- a/arch/tile/lib/atomic_asm_32.S
+++ b/arch/tile/lib/atomic_asm_32.S
@@ -59,7 +59,7 @@
* bad kernel addresses).
*
* Note that if the value we would store is the same as what we
- * loaded, we bypass the load. Other platforms with true atomics can
+ * loaded, we bypass the store. Other platforms with true atomics can
* make the guarantee that a non-atomic __clear_bit(), for example,
* can safely race with an atomic test_and_set_bit(); this example is
* from bit_spinlock.h in slub_lock() / slub_unlock(). We can't do