diff options
Diffstat (limited to 'include/asm-v850/atomic.h')
-rw-r--r-- | include/asm-v850/atomic.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/include/asm-v850/atomic.h b/include/asm-v850/atomic.h index e497166ca42b..bede3172ce7f 100644 --- a/include/asm-v850/atomic.h +++ b/include/asm-v850/atomic.h | |||
@@ -104,6 +104,22 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new) | |||
104 | return ret; | 104 | return ret; |
105 | } | 105 | } |
106 | 106 | ||
107 | static inline int atomic_add_unless(atomic_t *v, int a, int u) | ||
108 | { | ||
109 | int ret; | ||
110 | unsigned long flags; | ||
111 | |||
112 | local_irq_save(flags); | ||
113 | ret = v->counter; | ||
114 | if (ret != u) | ||
115 | v->counter += a; | ||
116 | local_irq_restore(flags); | ||
117 | |||
118 | return ret != u; | ||
119 | } | ||
120 | |||
121 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | ||
122 | |||
107 | /* Atomic operations are already serializing on ARM */ | 123 | /* Atomic operations are already serializing on ARM */ |
108 | #define smp_mb__before_atomic_dec() barrier() | 124 | #define smp_mb__before_atomic_dec() barrier() |
109 | #define smp_mb__after_atomic_dec() barrier() | 125 | #define smp_mb__after_atomic_dec() barrier() |