diff options
Diffstat (limited to 'arch/sparc/lib/atomic32.c')
-rw-r--r-- | arch/sparc/lib/atomic32.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/arch/sparc/lib/atomic32.c b/arch/sparc/lib/atomic32.c index 1d32b54089aa..a7c418ac26af 100644 --- a/arch/sparc/lib/atomic32.c +++ b/arch/sparc/lib/atomic32.c | |||
@@ -27,18 +27,23 @@ static DEFINE_SPINLOCK(dummy); | |||
27 | 27 | ||
28 | #endif /* SMP */ | 28 | #endif /* SMP */ |
29 | 29 | ||
30 | int __atomic_add_return(int i, atomic_t *v) | 30 | #define ATOMIC_OP(op, cop) \ |
31 | { | 31 | int atomic_##op##_return(int i, atomic_t *v) \ |
32 | int ret; | 32 | { \ |
33 | unsigned long flags; | 33 | int ret; \ |
34 | spin_lock_irqsave(ATOMIC_HASH(v), flags); | 34 | unsigned long flags; \ |
35 | 35 | spin_lock_irqsave(ATOMIC_HASH(v), flags); \ | |
36 | ret = (v->counter += i); | 36 | \ |
37 | 37 | ret = (v->counter cop i); \ | |
38 | spin_unlock_irqrestore(ATOMIC_HASH(v), flags); | 38 | \ |
39 | return ret; | 39 | spin_unlock_irqrestore(ATOMIC_HASH(v), flags); \ |
40 | } | 40 | return ret; \ |
41 | EXPORT_SYMBOL(__atomic_add_return); | 41 | } \ |
42 | EXPORT_SYMBOL(atomic_##op##_return); | ||
43 | |||
44 | ATOMIC_OP(add, +=) | ||
45 | |||
46 | #undef ATOMIC_OP | ||
42 | 47 | ||
43 | int atomic_cmpxchg(atomic_t *v, int old, int new) | 48 | int atomic_cmpxchg(atomic_t *v, int old, int new) |
44 | { | 49 | { |