diff options
Diffstat (limited to 'include/asm-v850')
-rw-r--r-- | include/asm-v850/atomic.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/include/asm-v850/atomic.h b/include/asm-v850/atomic.h index 395268a8c0de..e497166ca42b 100644 --- a/include/asm-v850/atomic.h +++ b/include/asm-v850/atomic.h | |||
@@ -90,6 +90,20 @@ static __inline__ void atomic_clear_mask (unsigned long mask, unsigned long *add | |||
90 | #define atomic_dec_and_test(v) (atomic_sub_return (1, (v)) == 0) | 90 | #define atomic_dec_and_test(v) (atomic_sub_return (1, (v)) == 0) |
91 | #define atomic_add_negative(i,v) (atomic_add_return ((i), (v)) < 0) | 91 | #define atomic_add_negative(i,v) (atomic_add_return ((i), (v)) < 0) |
92 | 92 | ||
93 | static inline int atomic_cmpxchg(atomic_t *v, int old, int new) | ||
94 | { | ||
95 | int ret; | ||
96 | unsigned long flags; | ||
97 | |||
98 | local_irq_save(flags); | ||
99 | ret = v->counter; | ||
100 | if (likely(ret == old)) | ||
101 | v->counter = new; | ||
102 | local_irq_restore(flags); | ||
103 | |||
104 | return ret; | ||
105 | } | ||
106 | |||
93 | /* Atomic operations are already serializing on ARM */ | 107 | /* Atomic operations are already serializing on ARM */ |
94 | #define smp_mb__before_atomic_dec() barrier() | 108 | #define smp_mb__before_atomic_dec() barrier() |
95 | #define smp_mb__after_atomic_dec() barrier() | 109 | #define smp_mb__after_atomic_dec() barrier() |