diff options
author | Takashi Iwai <tiwai@suse.de> | 2013-10-19 22:31:14 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2013-10-19 22:31:14 +0200 |
commit | 20c87bd40e6c1ff7e31cc5eea4fb37829a57eb58 (patch) | |
tree | 528c2f113e428e060e185ccab7eab8d8e87c7d36 /lib/lockref.c | |
parent | d14df339c72b6efbba4eddd1d1f3f4b173273f74 (diff) | |
parent | 40f8989695660dee984338861ca9900b8e0b5183 (diff) | |
download | op-kernel-dev-20c87bd40e6c1ff7e31cc5eea4fb37829a57eb58.zip op-kernel-dev-20c87bd40e6c1ff7e31cc5eea4fb37829a57eb58.tar.gz |
Merge tag 'asoc-v3.12-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v3.12
A number of small, fairly unexciting, fixes for drivers - nothing stand
out.
Diffstat (limited to 'lib/lockref.c')
-rw-r--r-- | lib/lockref.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/lib/lockref.c b/lib/lockref.c index 677d036c..6f9d434 100644 --- a/lib/lockref.c +++ b/lib/lockref.c @@ -4,6 +4,22 @@ #ifdef CONFIG_CMPXCHG_LOCKREF /* + * Allow weakly-ordered memory architectures to provide barrier-less + * cmpxchg semantics for lockref updates. + */ +#ifndef cmpxchg64_relaxed +# define cmpxchg64_relaxed cmpxchg64 +#endif + +/* + * Allow architectures to override the default cpu_relax() within CMPXCHG_LOOP. + * This is useful for architectures with an expensive cpu_relax(). + */ +#ifndef arch_mutex_cpu_relax +# define arch_mutex_cpu_relax() cpu_relax() +#endif + +/* * Note that the "cmpxchg()" reloads the "old" value for the * failure case. */ @@ -14,12 +30,13 @@ while (likely(arch_spin_value_unlocked(old.lock.rlock.raw_lock))) { \ struct lockref new = old, prev = old; \ CODE \ - old.lock_count = cmpxchg64(&lockref->lock_count, \ - old.lock_count, new.lock_count); \ + old.lock_count = cmpxchg64_relaxed(&lockref->lock_count, \ + old.lock_count, \ + new.lock_count); \ if (likely(old.lock_count == prev.lock_count)) { \ SUCCESS; \ } \ - cpu_relax(); \ + arch_mutex_cpu_relax(); \ } \ } while (0) |