diff options
author | Kevin Hilman <khilman@linaro.org> | 2013-10-14 18:46:26 -0400 |
---|---|---|
committer | Kevin Hilman <khilman@linaro.org> | 2013-10-14 18:46:42 -0400 |
commit | 5b5bbc20fdddd7dd5a2c5b9fa85dfb3b5695616d (patch) | |
tree | 5ddd89d323e1dfe6a5ad204c34882e961ee57b9c /lib/lockref.c | |
parent | 4fd0376356ed2e1f6c2a4e8628782aedf903292e (diff) | |
parent | 9e490f486ea9ce7644be913e03ee5ccdf1be20f7 (diff) |
Merge tag 'omap-for-v3.13/board-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/boards
From Tony Lindgren:
Platform data changes for omaps for the display subsystem and
n900 secure mode changes. Note that the n900 secure mode changes
will still be needed for device tree based booting also.
* tag 'omap-for-v3.13/board-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: (508 commits)
ARM: OMAP2+: display: Create omap_vout device inside omap_display_init
ARM: OMAP2+: display: Create omapvrfb and omapfb devices inside omap_display_init
ARM: OMAP2+: display: Create omapdrm device inside omap_display_init
ARM: OMAP2+: drm: Don't build device for DMM
RX-51: Add support for OMAP3 ROM Random Number Generator
ARM: OMAP3: RX-51: ARM errata 430973 workaround
ARM: OMAP3: Add secure function omap_smc3() which calling instruction smc #1
+Linux 3.12-rc4
Signed-off-by: Kevin Hilman <khilman@linaro.org>
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 677d036cf3c7..6f9d434c1521 100644 --- a/lib/lockref.c +++ b/lib/lockref.c | |||
@@ -4,6 +4,22 @@ | |||
4 | #ifdef CONFIG_CMPXCHG_LOCKREF | 4 | #ifdef CONFIG_CMPXCHG_LOCKREF |
5 | 5 | ||
6 | /* | 6 | /* |
7 | * Allow weakly-ordered memory architectures to provide barrier-less | ||
8 | * cmpxchg semantics for lockref updates. | ||
9 | */ | ||
10 | #ifndef cmpxchg64_relaxed | ||
11 | # define cmpxchg64_relaxed cmpxchg64 | ||
12 | #endif | ||
13 | |||
14 | /* | ||
15 | * Allow architectures to override the default cpu_relax() within CMPXCHG_LOOP. | ||
16 | * This is useful for architectures with an expensive cpu_relax(). | ||
17 | */ | ||
18 | #ifndef arch_mutex_cpu_relax | ||
19 | # define arch_mutex_cpu_relax() cpu_relax() | ||
20 | #endif | ||
21 | |||
22 | /* | ||
7 | * Note that the "cmpxchg()" reloads the "old" value for the | 23 | * Note that the "cmpxchg()" reloads the "old" value for the |
8 | * failure case. | 24 | * failure case. |
9 | */ | 25 | */ |
@@ -14,12 +30,13 @@ | |||
14 | while (likely(arch_spin_value_unlocked(old.lock.rlock.raw_lock))) { \ | 30 | while (likely(arch_spin_value_unlocked(old.lock.rlock.raw_lock))) { \ |
15 | struct lockref new = old, prev = old; \ | 31 | struct lockref new = old, prev = old; \ |
16 | CODE \ | 32 | CODE \ |
17 | old.lock_count = cmpxchg64(&lockref->lock_count, \ | 33 | old.lock_count = cmpxchg64_relaxed(&lockref->lock_count, \ |
18 | old.lock_count, new.lock_count); \ | 34 | old.lock_count, \ |
35 | new.lock_count); \ | ||
19 | if (likely(old.lock_count == prev.lock_count)) { \ | 36 | if (likely(old.lock_count == prev.lock_count)) { \ |
20 | SUCCESS; \ | 37 | SUCCESS; \ |
21 | } \ | 38 | } \ |
22 | cpu_relax(); \ | 39 | arch_mutex_cpu_relax(); \ |
23 | } \ | 40 | } \ |
24 | } while (0) | 41 | } while (0) |
25 | 42 | ||