diff options
Diffstat (limited to 'include/asm-ia64')
-rw-r--r-- | include/asm-ia64/atomic.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/asm-ia64/atomic.h b/include/asm-ia64/atomic.h index 593d3da9f3c2..2fbebf85c31d 100644 --- a/include/asm-ia64/atomic.h +++ b/include/asm-ia64/atomic.h | |||
@@ -90,6 +90,16 @@ ia64_atomic64_sub (__s64 i, atomic64_t *v) | |||
90 | 90 | ||
91 | #define atomic_cmpxchg(v, old, new) ((int)cmpxchg(&((v)->counter), old, new)) | 91 | #define atomic_cmpxchg(v, old, new) ((int)cmpxchg(&((v)->counter), old, new)) |
92 | 92 | ||
93 | #define atomic_add_unless(v, a, u) \ | ||
94 | ({ \ | ||
95 | int c, old; \ | ||
96 | c = atomic_read(v); \ | ||
97 | while (c != (u) && (old = atomic_cmpxchg((v), c, c + (a))) != c) \ | ||
98 | c = old; \ | ||
99 | c != (u); \ | ||
100 | }) | ||
101 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | ||
102 | |||
93 | #define atomic_add_return(i,v) \ | 103 | #define atomic_add_return(i,v) \ |
94 | ({ \ | 104 | ({ \ |
95 | int __ia64_aar_i = (i); \ | 105 | int __ia64_aar_i = (i); \ |