diff options
author | Tony Lindgren <tony@atomide.com> | 2015-09-14 13:42:11 -0700 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2015-09-14 13:42:11 -0700 |
commit | 7168e947291f0ead07e5638b4599fb7845288b69 (patch) | |
tree | b39cdf02f6d2282eeb91696d4a1c7ddb6afb0e38 /arch/sparc/lib/atomic32.c | |
parent | 21b430d23d233c67e6589ea5054d18392e15a28e (diff) | |
parent | 60fdcb8863d9b4a8b6c6b367886fadb50d4c0b07 (diff) | |
download | talos-op-linux-7168e947291f0ead07e5638b4599fb7845288b69.tar.gz talos-op-linux-7168e947291f0ead07e5638b4599fb7845288b69.zip |
Merge branch 'fixes-rc1' into omap-for-v4.3/fixes
Diffstat (limited to 'arch/sparc/lib/atomic32.c')
-rw-r--r-- | arch/sparc/lib/atomic32.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/arch/sparc/lib/atomic32.c b/arch/sparc/lib/atomic32.c index 71cd65ab200c..b9d63c0a7aab 100644 --- a/arch/sparc/lib/atomic32.c +++ b/arch/sparc/lib/atomic32.c @@ -27,22 +27,38 @@ static DEFINE_SPINLOCK(dummy); #endif /* SMP */ -#define ATOMIC_OP(op, cop) \ +#define ATOMIC_OP_RETURN(op, c_op) \ int atomic_##op##_return(int i, atomic_t *v) \ { \ int ret; \ unsigned long flags; \ spin_lock_irqsave(ATOMIC_HASH(v), flags); \ \ - ret = (v->counter cop i); \ + ret = (v->counter c_op i); \ \ spin_unlock_irqrestore(ATOMIC_HASH(v), flags); \ return ret; \ } \ EXPORT_SYMBOL(atomic_##op##_return); -ATOMIC_OP(add, +=) +#define ATOMIC_OP(op, c_op) \ +void atomic_##op(int i, atomic_t *v) \ +{ \ + unsigned long flags; \ + spin_lock_irqsave(ATOMIC_HASH(v), flags); \ + \ + v->counter c_op i; \ + \ + spin_unlock_irqrestore(ATOMIC_HASH(v), flags); \ +} \ +EXPORT_SYMBOL(atomic_##op); + +ATOMIC_OP_RETURN(add, +=) +ATOMIC_OP(and, &=) +ATOMIC_OP(or, |=) +ATOMIC_OP(xor, ^=) +#undef ATOMIC_OP_RETURN #undef ATOMIC_OP int atomic_xchg(atomic_t *v, int new) |