|
@@ -163,206 +163,201 @@
|
|
|
#endif
|
|
|
#endif /* atomic_dec_return_relaxed */
|
|
|
|
|
|
-/* atomic_xchg_relaxed */
|
|
|
-#ifndef atomic_xchg_relaxed
|
|
|
-#define atomic_xchg_relaxed atomic_xchg
|
|
|
-#define atomic_xchg_acquire atomic_xchg
|
|
|
-#define atomic_xchg_release atomic_xchg
|
|
|
|
|
|
-#else /* atomic_xchg_relaxed */
|
|
|
+/* atomic_fetch_add_relaxed */
|
|
|
+#ifndef atomic_fetch_add_relaxed
|
|
|
+#define atomic_fetch_add_relaxed atomic_fetch_add
|
|
|
+#define atomic_fetch_add_acquire atomic_fetch_add
|
|
|
+#define atomic_fetch_add_release atomic_fetch_add
|
|
|
|
|
|
-#ifndef atomic_xchg_acquire
|
|
|
-#define atomic_xchg_acquire(...) \
|
|
|
- __atomic_op_acquire(atomic_xchg, __VA_ARGS__)
|
|
|
-#endif
|
|
|
+#else /* atomic_fetch_add_relaxed */
|
|
|
|
|
|
-#ifndef atomic_xchg_release
|
|
|
-#define atomic_xchg_release(...) \
|
|
|
- __atomic_op_release(atomic_xchg, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_add_acquire
|
|
|
+#define atomic_fetch_add_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic_fetch_add, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic_xchg
|
|
|
-#define atomic_xchg(...) \
|
|
|
- __atomic_op_fence(atomic_xchg, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_add_release
|
|
|
+#define atomic_fetch_add_release(...) \
|
|
|
+ __atomic_op_release(atomic_fetch_add, __VA_ARGS__)
|
|
|
#endif
|
|
|
-#endif /* atomic_xchg_relaxed */
|
|
|
|
|
|
-/* atomic_cmpxchg_relaxed */
|
|
|
-#ifndef atomic_cmpxchg_relaxed
|
|
|
-#define atomic_cmpxchg_relaxed atomic_cmpxchg
|
|
|
-#define atomic_cmpxchg_acquire atomic_cmpxchg
|
|
|
-#define atomic_cmpxchg_release atomic_cmpxchg
|
|
|
-
|
|
|
-#else /* atomic_cmpxchg_relaxed */
|
|
|
-
|
|
|
-#ifndef atomic_cmpxchg_acquire
|
|
|
-#define atomic_cmpxchg_acquire(...) \
|
|
|
- __atomic_op_acquire(atomic_cmpxchg, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_add
|
|
|
+#define atomic_fetch_add(...) \
|
|
|
+ __atomic_op_fence(atomic_fetch_add, __VA_ARGS__)
|
|
|
#endif
|
|
|
+#endif /* atomic_fetch_add_relaxed */
|
|
|
|
|
|
-#ifndef atomic_cmpxchg_release
|
|
|
-#define atomic_cmpxchg_release(...) \
|
|
|
- __atomic_op_release(atomic_cmpxchg, __VA_ARGS__)
|
|
|
-#endif
|
|
|
+/* atomic_fetch_sub_relaxed */
|
|
|
+#ifndef atomic_fetch_sub_relaxed
|
|
|
+#define atomic_fetch_sub_relaxed atomic_fetch_sub
|
|
|
+#define atomic_fetch_sub_acquire atomic_fetch_sub
|
|
|
+#define atomic_fetch_sub_release atomic_fetch_sub
|
|
|
|
|
|
-#ifndef atomic_cmpxchg
|
|
|
-#define atomic_cmpxchg(...) \
|
|
|
- __atomic_op_fence(atomic_cmpxchg, __VA_ARGS__)
|
|
|
+#else /* atomic_fetch_sub_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic_fetch_sub_acquire
|
|
|
+#define atomic_fetch_sub_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic_fetch_sub, __VA_ARGS__)
|
|
|
#endif
|
|
|
-#endif /* atomic_cmpxchg_relaxed */
|
|
|
|
|
|
-#ifndef atomic64_read_acquire
|
|
|
-#define atomic64_read_acquire(v) smp_load_acquire(&(v)->counter)
|
|
|
+#ifndef atomic_fetch_sub_release
|
|
|
+#define atomic_fetch_sub_release(...) \
|
|
|
+ __atomic_op_release(atomic_fetch_sub, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_set_release
|
|
|
-#define atomic64_set_release(v, i) smp_store_release(&(v)->counter, (i))
|
|
|
+#ifndef atomic_fetch_sub
|
|
|
+#define atomic_fetch_sub(...) \
|
|
|
+ __atomic_op_fence(atomic_fetch_sub, __VA_ARGS__)
|
|
|
#endif
|
|
|
+#endif /* atomic_fetch_sub_relaxed */
|
|
|
|
|
|
-/* atomic64_add_return_relaxed */
|
|
|
-#ifndef atomic64_add_return_relaxed
|
|
|
-#define atomic64_add_return_relaxed atomic64_add_return
|
|
|
-#define atomic64_add_return_acquire atomic64_add_return
|
|
|
-#define atomic64_add_return_release atomic64_add_return
|
|
|
+/* atomic_fetch_or_relaxed */
|
|
|
+#ifndef atomic_fetch_or_relaxed
|
|
|
+#define atomic_fetch_or_relaxed atomic_fetch_or
|
|
|
+#define atomic_fetch_or_acquire atomic_fetch_or
|
|
|
+#define atomic_fetch_or_release atomic_fetch_or
|
|
|
|
|
|
-#else /* atomic64_add_return_relaxed */
|
|
|
+#else /* atomic_fetch_or_relaxed */
|
|
|
|
|
|
-#ifndef atomic64_add_return_acquire
|
|
|
-#define atomic64_add_return_acquire(...) \
|
|
|
- __atomic_op_acquire(atomic64_add_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_or_acquire
|
|
|
+#define atomic_fetch_or_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic_fetch_or, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_add_return_release
|
|
|
-#define atomic64_add_return_release(...) \
|
|
|
- __atomic_op_release(atomic64_add_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_or_release
|
|
|
+#define atomic_fetch_or_release(...) \
|
|
|
+ __atomic_op_release(atomic_fetch_or, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_add_return
|
|
|
-#define atomic64_add_return(...) \
|
|
|
- __atomic_op_fence(atomic64_add_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_or
|
|
|
+#define atomic_fetch_or(...) \
|
|
|
+ __atomic_op_fence(atomic_fetch_or, __VA_ARGS__)
|
|
|
#endif
|
|
|
-#endif /* atomic64_add_return_relaxed */
|
|
|
+#endif /* atomic_fetch_or_relaxed */
|
|
|
|
|
|
-/* atomic64_inc_return_relaxed */
|
|
|
-#ifndef atomic64_inc_return_relaxed
|
|
|
-#define atomic64_inc_return_relaxed atomic64_inc_return
|
|
|
-#define atomic64_inc_return_acquire atomic64_inc_return
|
|
|
-#define atomic64_inc_return_release atomic64_inc_return
|
|
|
+/* atomic_fetch_and_relaxed */
|
|
|
+#ifndef atomic_fetch_and_relaxed
|
|
|
+#define atomic_fetch_and_relaxed atomic_fetch_and
|
|
|
+#define atomic_fetch_and_acquire atomic_fetch_and
|
|
|
+#define atomic_fetch_and_release atomic_fetch_and
|
|
|
|
|
|
-#else /* atomic64_inc_return_relaxed */
|
|
|
+#else /* atomic_fetch_and_relaxed */
|
|
|
|
|
|
-#ifndef atomic64_inc_return_acquire
|
|
|
-#define atomic64_inc_return_acquire(...) \
|
|
|
- __atomic_op_acquire(atomic64_inc_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_and_acquire
|
|
|
+#define atomic_fetch_and_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic_fetch_and, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_inc_return_release
|
|
|
-#define atomic64_inc_return_release(...) \
|
|
|
- __atomic_op_release(atomic64_inc_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_and_release
|
|
|
+#define atomic_fetch_and_release(...) \
|
|
|
+ __atomic_op_release(atomic_fetch_and, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_inc_return
|
|
|
-#define atomic64_inc_return(...) \
|
|
|
- __atomic_op_fence(atomic64_inc_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_and
|
|
|
+#define atomic_fetch_and(...) \
|
|
|
+ __atomic_op_fence(atomic_fetch_and, __VA_ARGS__)
|
|
|
#endif
|
|
|
-#endif /* atomic64_inc_return_relaxed */
|
|
|
-
|
|
|
+#endif /* atomic_fetch_and_relaxed */
|
|
|
|
|
|
-/* atomic64_sub_return_relaxed */
|
|
|
-#ifndef atomic64_sub_return_relaxed
|
|
|
-#define atomic64_sub_return_relaxed atomic64_sub_return
|
|
|
-#define atomic64_sub_return_acquire atomic64_sub_return
|
|
|
-#define atomic64_sub_return_release atomic64_sub_return
|
|
|
+#ifdef atomic_andnot
|
|
|
+/* atomic_fetch_andnot_relaxed */
|
|
|
+#ifndef atomic_fetch_andnot_relaxed
|
|
|
+#define atomic_fetch_andnot_relaxed atomic_fetch_andnot
|
|
|
+#define atomic_fetch_andnot_acquire atomic_fetch_andnot
|
|
|
+#define atomic_fetch_andnot_release atomic_fetch_andnot
|
|
|
|
|
|
-#else /* atomic64_sub_return_relaxed */
|
|
|
+#else /* atomic_fetch_andnot_relaxed */
|
|
|
|
|
|
-#ifndef atomic64_sub_return_acquire
|
|
|
-#define atomic64_sub_return_acquire(...) \
|
|
|
- __atomic_op_acquire(atomic64_sub_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_andnot_acquire
|
|
|
+#define atomic_fetch_andnot_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic_fetch_andnot, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_sub_return_release
|
|
|
-#define atomic64_sub_return_release(...) \
|
|
|
- __atomic_op_release(atomic64_sub_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_andnot_release
|
|
|
+#define atomic_fetch_andnot_release(...) \
|
|
|
+ __atomic_op_release(atomic_fetch_andnot, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_sub_return
|
|
|
-#define atomic64_sub_return(...) \
|
|
|
- __atomic_op_fence(atomic64_sub_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_andnot
|
|
|
+#define atomic_fetch_andnot(...) \
|
|
|
+ __atomic_op_fence(atomic_fetch_andnot, __VA_ARGS__)
|
|
|
#endif
|
|
|
-#endif /* atomic64_sub_return_relaxed */
|
|
|
+#endif /* atomic_fetch_andnot_relaxed */
|
|
|
+#endif /* atomic_andnot */
|
|
|
|
|
|
-/* atomic64_dec_return_relaxed */
|
|
|
-#ifndef atomic64_dec_return_relaxed
|
|
|
-#define atomic64_dec_return_relaxed atomic64_dec_return
|
|
|
-#define atomic64_dec_return_acquire atomic64_dec_return
|
|
|
-#define atomic64_dec_return_release atomic64_dec_return
|
|
|
+/* atomic_fetch_xor_relaxed */
|
|
|
+#ifndef atomic_fetch_xor_relaxed
|
|
|
+#define atomic_fetch_xor_relaxed atomic_fetch_xor
|
|
|
+#define atomic_fetch_xor_acquire atomic_fetch_xor
|
|
|
+#define atomic_fetch_xor_release atomic_fetch_xor
|
|
|
|
|
|
-#else /* atomic64_dec_return_relaxed */
|
|
|
+#else /* atomic_fetch_xor_relaxed */
|
|
|
|
|
|
-#ifndef atomic64_dec_return_acquire
|
|
|
-#define atomic64_dec_return_acquire(...) \
|
|
|
- __atomic_op_acquire(atomic64_dec_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_xor_acquire
|
|
|
+#define atomic_fetch_xor_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic_fetch_xor, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_dec_return_release
|
|
|
-#define atomic64_dec_return_release(...) \
|
|
|
- __atomic_op_release(atomic64_dec_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_xor_release
|
|
|
+#define atomic_fetch_xor_release(...) \
|
|
|
+ __atomic_op_release(atomic_fetch_xor, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_dec_return
|
|
|
-#define atomic64_dec_return(...) \
|
|
|
- __atomic_op_fence(atomic64_dec_return, __VA_ARGS__)
|
|
|
+#ifndef atomic_fetch_xor
|
|
|
+#define atomic_fetch_xor(...) \
|
|
|
+ __atomic_op_fence(atomic_fetch_xor, __VA_ARGS__)
|
|
|
#endif
|
|
|
-#endif /* atomic64_dec_return_relaxed */
|
|
|
+#endif /* atomic_fetch_xor_relaxed */
|
|
|
|
|
|
-/* atomic64_xchg_relaxed */
|
|
|
-#ifndef atomic64_xchg_relaxed
|
|
|
-#define atomic64_xchg_relaxed atomic64_xchg
|
|
|
-#define atomic64_xchg_acquire atomic64_xchg
|
|
|
-#define atomic64_xchg_release atomic64_xchg
|
|
|
|
|
|
-#else /* atomic64_xchg_relaxed */
|
|
|
+/* atomic_xchg_relaxed */
|
|
|
+#ifndef atomic_xchg_relaxed
|
|
|
+#define atomic_xchg_relaxed atomic_xchg
|
|
|
+#define atomic_xchg_acquire atomic_xchg
|
|
|
+#define atomic_xchg_release atomic_xchg
|
|
|
|
|
|
-#ifndef atomic64_xchg_acquire
|
|
|
-#define atomic64_xchg_acquire(...) \
|
|
|
- __atomic_op_acquire(atomic64_xchg, __VA_ARGS__)
|
|
|
+#else /* atomic_xchg_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic_xchg_acquire
|
|
|
+#define atomic_xchg_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic_xchg, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_xchg_release
|
|
|
-#define atomic64_xchg_release(...) \
|
|
|
- __atomic_op_release(atomic64_xchg, __VA_ARGS__)
|
|
|
+#ifndef atomic_xchg_release
|
|
|
+#define atomic_xchg_release(...) \
|
|
|
+ __atomic_op_release(atomic_xchg, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_xchg
|
|
|
-#define atomic64_xchg(...) \
|
|
|
- __atomic_op_fence(atomic64_xchg, __VA_ARGS__)
|
|
|
+#ifndef atomic_xchg
|
|
|
+#define atomic_xchg(...) \
|
|
|
+ __atomic_op_fence(atomic_xchg, __VA_ARGS__)
|
|
|
#endif
|
|
|
-#endif /* atomic64_xchg_relaxed */
|
|
|
+#endif /* atomic_xchg_relaxed */
|
|
|
|
|
|
-/* atomic64_cmpxchg_relaxed */
|
|
|
-#ifndef atomic64_cmpxchg_relaxed
|
|
|
-#define atomic64_cmpxchg_relaxed atomic64_cmpxchg
|
|
|
-#define atomic64_cmpxchg_acquire atomic64_cmpxchg
|
|
|
-#define atomic64_cmpxchg_release atomic64_cmpxchg
|
|
|
+/* atomic_cmpxchg_relaxed */
|
|
|
+#ifndef atomic_cmpxchg_relaxed
|
|
|
+#define atomic_cmpxchg_relaxed atomic_cmpxchg
|
|
|
+#define atomic_cmpxchg_acquire atomic_cmpxchg
|
|
|
+#define atomic_cmpxchg_release atomic_cmpxchg
|
|
|
|
|
|
-#else /* atomic64_cmpxchg_relaxed */
|
|
|
+#else /* atomic_cmpxchg_relaxed */
|
|
|
|
|
|
-#ifndef atomic64_cmpxchg_acquire
|
|
|
-#define atomic64_cmpxchg_acquire(...) \
|
|
|
- __atomic_op_acquire(atomic64_cmpxchg, __VA_ARGS__)
|
|
|
+#ifndef atomic_cmpxchg_acquire
|
|
|
+#define atomic_cmpxchg_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic_cmpxchg, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_cmpxchg_release
|
|
|
-#define atomic64_cmpxchg_release(...) \
|
|
|
- __atomic_op_release(atomic64_cmpxchg, __VA_ARGS__)
|
|
|
+#ifndef atomic_cmpxchg_release
|
|
|
+#define atomic_cmpxchg_release(...) \
|
|
|
+ __atomic_op_release(atomic_cmpxchg, __VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef atomic64_cmpxchg
|
|
|
-#define atomic64_cmpxchg(...) \
|
|
|
- __atomic_op_fence(atomic64_cmpxchg, __VA_ARGS__)
|
|
|
+#ifndef atomic_cmpxchg
|
|
|
+#define atomic_cmpxchg(...) \
|
|
|
+ __atomic_op_fence(atomic_cmpxchg, __VA_ARGS__)
|
|
|
#endif
|
|
|
-#endif /* atomic64_cmpxchg_relaxed */
|
|
|
+#endif /* atomic_cmpxchg_relaxed */
|
|
|
|
|
|
/* cmpxchg_relaxed */
|
|
|
#ifndef cmpxchg_relaxed
|
|
@@ -463,17 +458,27 @@ static inline void atomic_andnot(int i, atomic_t *v)
|
|
|
{
|
|
|
atomic_and(~i, v);
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
-static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v)
|
|
|
+static inline int atomic_fetch_andnot(int i, atomic_t *v)
|
|
|
+{
|
|
|
+ return atomic_fetch_and(~i, v);
|
|
|
+}
|
|
|
+
|
|
|
+static inline int atomic_fetch_andnot_relaxed(int i, atomic_t *v)
|
|
|
+{
|
|
|
+ return atomic_fetch_and_relaxed(~i, v);
|
|
|
+}
|
|
|
+
|
|
|
+static inline int atomic_fetch_andnot_acquire(int i, atomic_t *v)
|
|
|
{
|
|
|
- atomic_andnot(mask, v);
|
|
|
+ return atomic_fetch_and_acquire(~i, v);
|
|
|
}
|
|
|
|
|
|
-static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v)
|
|
|
+static inline int atomic_fetch_andnot_release(int i, atomic_t *v)
|
|
|
{
|
|
|
- atomic_or(mask, v);
|
|
|
+ return atomic_fetch_and_release(~i, v);
|
|
|
}
|
|
|
+#endif
|
|
|
|
|
|
/**
|
|
|
* atomic_inc_not_zero_hint - increment if not null
|
|
@@ -558,36 +563,336 @@ static inline int atomic_dec_if_positive(atomic_t *v)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-/**
|
|
|
- * atomic_fetch_or - perform *p |= mask and return old value of *p
|
|
|
- * @mask: mask to OR on the atomic_t
|
|
|
- * @p: pointer to atomic_t
|
|
|
- */
|
|
|
-#ifndef atomic_fetch_or
|
|
|
-static inline int atomic_fetch_or(int mask, atomic_t *p)
|
|
|
-{
|
|
|
- int old, val = atomic_read(p);
|
|
|
+#ifdef CONFIG_GENERIC_ATOMIC64
|
|
|
+#include <asm-generic/atomic64.h>
|
|
|
+#endif
|
|
|
|
|
|
- for (;;) {
|
|
|
- old = atomic_cmpxchg(p, val, val | mask);
|
|
|
- if (old == val)
|
|
|
- break;
|
|
|
- val = old;
|
|
|
- }
|
|
|
+#ifndef atomic64_read_acquire
|
|
|
+#define atomic64_read_acquire(v) smp_load_acquire(&(v)->counter)
|
|
|
+#endif
|
|
|
|
|
|
- return old;
|
|
|
-}
|
|
|
+#ifndef atomic64_set_release
|
|
|
+#define atomic64_set_release(v, i) smp_store_release(&(v)->counter, (i))
|
|
|
#endif
|
|
|
|
|
|
-#ifdef CONFIG_GENERIC_ATOMIC64
|
|
|
-#include <asm-generic/atomic64.h>
|
|
|
+/* atomic64_add_return_relaxed */
|
|
|
+#ifndef atomic64_add_return_relaxed
|
|
|
+#define atomic64_add_return_relaxed atomic64_add_return
|
|
|
+#define atomic64_add_return_acquire atomic64_add_return
|
|
|
+#define atomic64_add_return_release atomic64_add_return
|
|
|
+
|
|
|
+#else /* atomic64_add_return_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_add_return_acquire
|
|
|
+#define atomic64_add_return_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_add_return, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_add_return_release
|
|
|
+#define atomic64_add_return_release(...) \
|
|
|
+ __atomic_op_release(atomic64_add_return, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_add_return
|
|
|
+#define atomic64_add_return(...) \
|
|
|
+ __atomic_op_fence(atomic64_add_return, __VA_ARGS__)
|
|
|
#endif
|
|
|
+#endif /* atomic64_add_return_relaxed */
|
|
|
+
|
|
|
+/* atomic64_inc_return_relaxed */
|
|
|
+#ifndef atomic64_inc_return_relaxed
|
|
|
+#define atomic64_inc_return_relaxed atomic64_inc_return
|
|
|
+#define atomic64_inc_return_acquire atomic64_inc_return
|
|
|
+#define atomic64_inc_return_release atomic64_inc_return
|
|
|
+
|
|
|
+#else /* atomic64_inc_return_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_inc_return_acquire
|
|
|
+#define atomic64_inc_return_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_inc_return, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_inc_return_release
|
|
|
+#define atomic64_inc_return_release(...) \
|
|
|
+ __atomic_op_release(atomic64_inc_return, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_inc_return
|
|
|
+#define atomic64_inc_return(...) \
|
|
|
+ __atomic_op_fence(atomic64_inc_return, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+#endif /* atomic64_inc_return_relaxed */
|
|
|
+
|
|
|
+
|
|
|
+/* atomic64_sub_return_relaxed */
|
|
|
+#ifndef atomic64_sub_return_relaxed
|
|
|
+#define atomic64_sub_return_relaxed atomic64_sub_return
|
|
|
+#define atomic64_sub_return_acquire atomic64_sub_return
|
|
|
+#define atomic64_sub_return_release atomic64_sub_return
|
|
|
+
|
|
|
+#else /* atomic64_sub_return_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_sub_return_acquire
|
|
|
+#define atomic64_sub_return_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_sub_return, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_sub_return_release
|
|
|
+#define atomic64_sub_return_release(...) \
|
|
|
+ __atomic_op_release(atomic64_sub_return, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_sub_return
|
|
|
+#define atomic64_sub_return(...) \
|
|
|
+ __atomic_op_fence(atomic64_sub_return, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+#endif /* atomic64_sub_return_relaxed */
|
|
|
+
|
|
|
+/* atomic64_dec_return_relaxed */
|
|
|
+#ifndef atomic64_dec_return_relaxed
|
|
|
+#define atomic64_dec_return_relaxed atomic64_dec_return
|
|
|
+#define atomic64_dec_return_acquire atomic64_dec_return
|
|
|
+#define atomic64_dec_return_release atomic64_dec_return
|
|
|
+
|
|
|
+#else /* atomic64_dec_return_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_dec_return_acquire
|
|
|
+#define atomic64_dec_return_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_dec_return, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_dec_return_release
|
|
|
+#define atomic64_dec_return_release(...) \
|
|
|
+ __atomic_op_release(atomic64_dec_return, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_dec_return
|
|
|
+#define atomic64_dec_return(...) \
|
|
|
+ __atomic_op_fence(atomic64_dec_return, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+#endif /* atomic64_dec_return_relaxed */
|
|
|
+
|
|
|
+
|
|
|
+/* atomic64_fetch_add_relaxed */
|
|
|
+#ifndef atomic64_fetch_add_relaxed
|
|
|
+#define atomic64_fetch_add_relaxed atomic64_fetch_add
|
|
|
+#define atomic64_fetch_add_acquire atomic64_fetch_add
|
|
|
+#define atomic64_fetch_add_release atomic64_fetch_add
|
|
|
+
|
|
|
+#else /* atomic64_fetch_add_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_add_acquire
|
|
|
+#define atomic64_fetch_add_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_fetch_add, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_add_release
|
|
|
+#define atomic64_fetch_add_release(...) \
|
|
|
+ __atomic_op_release(atomic64_fetch_add, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_add
|
|
|
+#define atomic64_fetch_add(...) \
|
|
|
+ __atomic_op_fence(atomic64_fetch_add, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+#endif /* atomic64_fetch_add_relaxed */
|
|
|
+
|
|
|
+/* atomic64_fetch_sub_relaxed */
|
|
|
+#ifndef atomic64_fetch_sub_relaxed
|
|
|
+#define atomic64_fetch_sub_relaxed atomic64_fetch_sub
|
|
|
+#define atomic64_fetch_sub_acquire atomic64_fetch_sub
|
|
|
+#define atomic64_fetch_sub_release atomic64_fetch_sub
|
|
|
+
|
|
|
+#else /* atomic64_fetch_sub_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_sub_acquire
|
|
|
+#define atomic64_fetch_sub_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_fetch_sub, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_sub_release
|
|
|
+#define atomic64_fetch_sub_release(...) \
|
|
|
+ __atomic_op_release(atomic64_fetch_sub, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_sub
|
|
|
+#define atomic64_fetch_sub(...) \
|
|
|
+ __atomic_op_fence(atomic64_fetch_sub, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+#endif /* atomic64_fetch_sub_relaxed */
|
|
|
+
|
|
|
+/* atomic64_fetch_or_relaxed */
|
|
|
+#ifndef atomic64_fetch_or_relaxed
|
|
|
+#define atomic64_fetch_or_relaxed atomic64_fetch_or
|
|
|
+#define atomic64_fetch_or_acquire atomic64_fetch_or
|
|
|
+#define atomic64_fetch_or_release atomic64_fetch_or
|
|
|
+
|
|
|
+#else /* atomic64_fetch_or_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_or_acquire
|
|
|
+#define atomic64_fetch_or_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_fetch_or, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_or_release
|
|
|
+#define atomic64_fetch_or_release(...) \
|
|
|
+ __atomic_op_release(atomic64_fetch_or, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_or
|
|
|
+#define atomic64_fetch_or(...) \
|
|
|
+ __atomic_op_fence(atomic64_fetch_or, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+#endif /* atomic64_fetch_or_relaxed */
|
|
|
+
|
|
|
+/* atomic64_fetch_and_relaxed */
|
|
|
+#ifndef atomic64_fetch_and_relaxed
|
|
|
+#define atomic64_fetch_and_relaxed atomic64_fetch_and
|
|
|
+#define atomic64_fetch_and_acquire atomic64_fetch_and
|
|
|
+#define atomic64_fetch_and_release atomic64_fetch_and
|
|
|
+
|
|
|
+#else /* atomic64_fetch_and_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_and_acquire
|
|
|
+#define atomic64_fetch_and_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_fetch_and, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_and_release
|
|
|
+#define atomic64_fetch_and_release(...) \
|
|
|
+ __atomic_op_release(atomic64_fetch_and, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_and
|
|
|
+#define atomic64_fetch_and(...) \
|
|
|
+ __atomic_op_fence(atomic64_fetch_and, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+#endif /* atomic64_fetch_and_relaxed */
|
|
|
+
|
|
|
+#ifdef atomic64_andnot
|
|
|
+/* atomic64_fetch_andnot_relaxed */
|
|
|
+#ifndef atomic64_fetch_andnot_relaxed
|
|
|
+#define atomic64_fetch_andnot_relaxed atomic64_fetch_andnot
|
|
|
+#define atomic64_fetch_andnot_acquire atomic64_fetch_andnot
|
|
|
+#define atomic64_fetch_andnot_release atomic64_fetch_andnot
|
|
|
+
|
|
|
+#else /* atomic64_fetch_andnot_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_andnot_acquire
|
|
|
+#define atomic64_fetch_andnot_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_fetch_andnot, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_andnot_release
|
|
|
+#define atomic64_fetch_andnot_release(...) \
|
|
|
+ __atomic_op_release(atomic64_fetch_andnot, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_andnot
|
|
|
+#define atomic64_fetch_andnot(...) \
|
|
|
+ __atomic_op_fence(atomic64_fetch_andnot, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+#endif /* atomic64_fetch_andnot_relaxed */
|
|
|
+#endif /* atomic64_andnot */
|
|
|
+
|
|
|
+/* atomic64_fetch_xor_relaxed */
|
|
|
+#ifndef atomic64_fetch_xor_relaxed
|
|
|
+#define atomic64_fetch_xor_relaxed atomic64_fetch_xor
|
|
|
+#define atomic64_fetch_xor_acquire atomic64_fetch_xor
|
|
|
+#define atomic64_fetch_xor_release atomic64_fetch_xor
|
|
|
+
|
|
|
+#else /* atomic64_fetch_xor_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_xor_acquire
|
|
|
+#define atomic64_fetch_xor_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_fetch_xor, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_xor_release
|
|
|
+#define atomic64_fetch_xor_release(...) \
|
|
|
+ __atomic_op_release(atomic64_fetch_xor, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_fetch_xor
|
|
|
+#define atomic64_fetch_xor(...) \
|
|
|
+ __atomic_op_fence(atomic64_fetch_xor, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+#endif /* atomic64_fetch_xor_relaxed */
|
|
|
+
|
|
|
+
|
|
|
+/* atomic64_xchg_relaxed */
|
|
|
+#ifndef atomic64_xchg_relaxed
|
|
|
+#define atomic64_xchg_relaxed atomic64_xchg
|
|
|
+#define atomic64_xchg_acquire atomic64_xchg
|
|
|
+#define atomic64_xchg_release atomic64_xchg
|
|
|
+
|
|
|
+#else /* atomic64_xchg_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_xchg_acquire
|
|
|
+#define atomic64_xchg_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_xchg, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_xchg_release
|
|
|
+#define atomic64_xchg_release(...) \
|
|
|
+ __atomic_op_release(atomic64_xchg, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_xchg
|
|
|
+#define atomic64_xchg(...) \
|
|
|
+ __atomic_op_fence(atomic64_xchg, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+#endif /* atomic64_xchg_relaxed */
|
|
|
+
|
|
|
+/* atomic64_cmpxchg_relaxed */
|
|
|
+#ifndef atomic64_cmpxchg_relaxed
|
|
|
+#define atomic64_cmpxchg_relaxed atomic64_cmpxchg
|
|
|
+#define atomic64_cmpxchg_acquire atomic64_cmpxchg
|
|
|
+#define atomic64_cmpxchg_release atomic64_cmpxchg
|
|
|
+
|
|
|
+#else /* atomic64_cmpxchg_relaxed */
|
|
|
+
|
|
|
+#ifndef atomic64_cmpxchg_acquire
|
|
|
+#define atomic64_cmpxchg_acquire(...) \
|
|
|
+ __atomic_op_acquire(atomic64_cmpxchg, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_cmpxchg_release
|
|
|
+#define atomic64_cmpxchg_release(...) \
|
|
|
+ __atomic_op_release(atomic64_cmpxchg, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifndef atomic64_cmpxchg
|
|
|
+#define atomic64_cmpxchg(...) \
|
|
|
+ __atomic_op_fence(atomic64_cmpxchg, __VA_ARGS__)
|
|
|
+#endif
|
|
|
+#endif /* atomic64_cmpxchg_relaxed */
|
|
|
|
|
|
#ifndef atomic64_andnot
|
|
|
static inline void atomic64_andnot(long long i, atomic64_t *v)
|
|
|
{
|
|
|
atomic64_and(~i, v);
|
|
|
}
|
|
|
+
|
|
|
+static inline long long atomic64_fetch_andnot(long long i, atomic64_t *v)
|
|
|
+{
|
|
|
+ return atomic64_fetch_and(~i, v);
|
|
|
+}
|
|
|
+
|
|
|
+static inline long long atomic64_fetch_andnot_relaxed(long long i, atomic64_t *v)
|
|
|
+{
|
|
|
+ return atomic64_fetch_and_relaxed(~i, v);
|
|
|
+}
|
|
|
+
|
|
|
+static inline long long atomic64_fetch_andnot_acquire(long long i, atomic64_t *v)
|
|
|
+{
|
|
|
+ return atomic64_fetch_and_acquire(~i, v);
|
|
|
+}
|
|
|
+
|
|
|
+static inline long long atomic64_fetch_andnot_release(long long i, atomic64_t *v)
|
|
|
+{
|
|
|
+ return atomic64_fetch_and_release(~i, v);
|
|
|
+}
|
|
|
#endif
|
|
|
|
|
|
#include <asm-generic/atomic-long.h>
|