aboutsummaryrefslogtreecommitdiff
path: root/lib/lockref.c
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2013-10-27 21:42:44 -0700
committerOlof Johansson <olof@lixom.net>2013-10-27 21:42:44 -0700
commit3316dee245ef297155fa45b8d14263dfd6a9164b (patch)
tree7adbf9875893ce0405f771d92d266d70df1aedbb /lib/lockref.c
parentf2c4e82e350dab489ae0d8fcd84b780de508ab64 (diff)
parent1fecf8958eb7f90791f2c7e99afac393b64fa976 (diff)
Merge tag 's3c24xx-dma' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into next/drivers
From Kukjin Kim, this branch adds device-tree support to the DMA controller on the older Samsung SoCs. It also adds support for one of the missing SoCs in the family (2410). The driver has been Ack:ed by Vinod Koul, but is merged through here due to dependencies with platform code. * tag 's3c24xx-dma' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung: ARM: S3C24XX: add dma pdata for s3c2410, s3c2440 and s3c2442 dmaengine: s3c24xx-dma: add support for the s3c2410 type of controller ARM: S3C24XX: Fix possible dma selection warning ARM: SAMSUNG: set s3c24xx_dma_filter for s3c64xx-spi0 device ARM: S3C24XX: add platform-devices for new dma driver for s3c2412 and s3c2443 dmaengine: add driver for Samsung s3c24xx SoCs ARM: S3C24XX: number the dma clocks + Linux 3.12-rc3 Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'lib/lockref.c')
-rw-r--r--lib/lockref.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/lib/lockref.c b/lib/lockref.c
index 677d036cf3c..6f9d434c152 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)