summaryrefslogtreecommitdiffstats
path: root/arch/sh/include/asm/atomic-llsc.h
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2010-01-08 09:02:17 +0100
committerPaul Mundt <lethal@linux-sh.org>2010-01-08 09:02:17 +0100
commit8c0b8139c87cfe8b95c6e763b4ca3190aa9b1ad0 (patch)
tree79ee3c612843d11d5b3fbebb8d00ca956a044316 /arch/sh/include/asm/atomic-llsc.h
parentsh: Fix up nommu build for out-of-line pgtable changes. (diff)
downloadlinux-8c0b8139c87cfe8b95c6e763b4ca3190aa9b1ad0.tar.xz
linux-8c0b8139c87cfe8b95c6e763b4ca3190aa9b1ad0.zip
sh: consolidate atomic_cmpxchg()/atomic_add_unless() definitions.
The LL/SC and IRQ versions were using generic stubs while the GRB version was just reimplementing what it already had for the standard cmpxchg() code. As we have optimized cmpxchg() implementations that are decoupled from the atomic code, simply falling back on the generic wrapper does the right thing. With this in place the GRB case is unaffected while the LL/SC case gets to use its optimized cmpxchg(). Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/include/asm/atomic-llsc.h')
-rw-r--r--arch/sh/include/asm/atomic-llsc.h27
1 files changed, 0 insertions, 27 deletions
diff --git a/arch/sh/include/asm/atomic-llsc.h b/arch/sh/include/asm/atomic-llsc.h
index b040e1e08610..4b00b78e3f4f 100644
--- a/arch/sh/include/asm/atomic-llsc.h
+++ b/arch/sh/include/asm/atomic-llsc.h
@@ -104,31 +104,4 @@ static inline void atomic_set_mask(unsigned int mask, atomic_t *v)
: "t");
}
-#define atomic_cmpxchg(v, o, n) (cmpxchg(&((v)->counter), (o), (n)))
-
-/**
- * atomic_add_unless - add unless the number is a given value
- * @v: pointer of type atomic_t
- * @a: the amount to add to v...
- * @u: ...unless v is equal to u.
- *
- * Atomically adds @a to @v, so long as it was not @u.
- * Returns non-zero if @v was not @u, and zero otherwise.
- */
-static inline int atomic_add_unless(atomic_t *v, int a, int u)
-{
- int c, old;
- c = atomic_read(v);
- for (;;) {
- if (unlikely(c == (u)))
- break;
- old = atomic_cmpxchg((v), c, c + (a));
- if (likely(old == c))
- break;
- c = old;
- }
-
- return c != (u);
-}
-
#endif /* __ASM_SH_ATOMIC_LLSC_H */