aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/asm-generic/atomic.h4
-rw-r--r--include/linux/atomic.h14
2 files changed, 16 insertions, 2 deletions
diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h
index 7f84414c5f53..bd18bfd78e9b 100644
--- a/include/asm-generic/atomic.h
+++ b/include/asm-generic/atomic.h
@@ -129,13 +129,13 @@ static inline void atomic_dec(atomic_t *v)
129 129
130#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) 130#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
131 131
132static inline int atomic_add_unless(atomic_t *v, int a, int u) 132static inline int __atomic_add_unless(atomic_t *v, int a, int u)
133{ 133{
134 int c, old; 134 int c, old;
135 c = atomic_read(v); 135 c = atomic_read(v);
136 while (c != u && (old = atomic_cmpxchg(v, c, c + a)) != c) 136 while (c != u && (old = atomic_cmpxchg(v, c, c + a)) != c)
137 c = old; 137 c = old;
138 return c != u; 138 return c;
139} 139}
140 140
141static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr) 141static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
diff --git a/include/linux/atomic.h b/include/linux/atomic.h
index 66fed6364122..d5e167a6a398 100644
--- a/include/linux/atomic.h
+++ b/include/linux/atomic.h
@@ -3,6 +3,20 @@
3#include <asm/atomic.h> 3#include <asm/atomic.h>
4 4
5/** 5/**
6 * atomic_add_unless - add unless the number is already a given value
7 * @v: pointer of type atomic_t
8 * @a: the amount to add to v...
9 * @u: ...unless v is equal to u.
10 *
11 * Atomically adds @a to @v, so long as @v was not already @u.
12 * Returns non-zero if @v was not @u, and zero otherwise.
13 */
14static inline int atomic_add_unless(atomic_t *v, int a, int u)
15{
16 return __atomic_add_unless(v, a, u) != u;
17}
18
19/**
6 * atomic_inc_not_zero - increment unless the number is zero 20 * atomic_inc_not_zero - increment unless the number is zero
7 * @v: pointer of type atomic_t 21 * @v: pointer of type atomic_t
8 * 22 *