1 #ifndef _ASM_GENERIC_ATOMIC_LONG_H
2 #define _ASM_GENERIC_ATOMIC_LONG_H
11 #include <asm/types.h>
21 #if BITS_PER_LONG == 64
25 #define ATOMIC_LONG_INIT(i) ATOMIC64_INIT(i)
69 static inline int atomic_long_sub_and_test(
long i,
atomic_long_t *l)
90 static inline int atomic_long_add_negative(
long i,
atomic_long_t *l)
97 static inline long atomic_long_add_return(
long i,
atomic_long_t *l)
104 static inline long atomic_long_sub_return(
long i,
atomic_long_t *l)
125 static inline long atomic_long_add_unless(
atomic_long_t *l,
long a,
long u)
132 #define atomic_long_inc_not_zero(l) atomic64_inc_not_zero((atomic64_t *)(l))
134 #define atomic_long_cmpxchg(l, old, new) \
135 (atomic64_cmpxchg((atomic64_t *)(l), (old), (new)))
136 #define atomic_long_xchg(v, new) \
137 (atomic64_xchg((atomic64_t *)(v), (new)))
143 #define ATOMIC_LONG_INIT(i) ATOMIC_INIT(i)
144 static inline long atomic_long_read(atomic_long_t *l)
151 static inline void atomic_long_set(atomic_long_t *l,
long i)
158 static inline void atomic_long_inc(atomic_long_t *l)
165 static inline void atomic_long_dec(atomic_long_t *l)
172 static inline void atomic_long_add(
long i, atomic_long_t *l)
179 static inline void atomic_long_sub(
long i, atomic_long_t *l)
186 static inline int atomic_long_sub_and_test(
long i, atomic_long_t *l)
193 static inline int atomic_long_dec_and_test(atomic_long_t *l)
200 static inline int atomic_long_inc_and_test(atomic_long_t *l)
207 static inline int atomic_long_add_negative(
long i, atomic_long_t *l)
214 static inline long atomic_long_add_return(
long i, atomic_long_t *l)
221 static inline long atomic_long_sub_return(
long i, atomic_long_t *l)
228 static inline long atomic_long_inc_return(atomic_long_t *l)
235 static inline long atomic_long_dec_return(atomic_long_t *l)
242 static inline long atomic_long_add_unless(atomic_long_t *l,
long a,
long u)
246 return (
long)atomic_add_unless(v, a, u);
249 #define atomic_long_inc_not_zero(l) atomic_inc_not_zero((atomic_t *)(l))
251 #define atomic_long_cmpxchg(l, old, new) \
252 (atomic_cmpxchg((atomic_t *)(l), (old), (new)))
253 #define atomic_long_xchg(v, new) \
254 (atomic_xchg((atomic_t *)(v), (new)))