|
@@ -22,40 +22,6 @@
|
|
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
|
|
-/* Tile-specific routines to support <linux/atomic.h>. */
|
|
|
-int _atomic_xchg(atomic_t *v, int n);
|
|
|
-int _atomic_xchg_add(atomic_t *v, int i);
|
|
|
-int _atomic_xchg_add_unless(atomic_t *v, int a, int u);
|
|
|
-int _atomic_cmpxchg(atomic_t *v, int o, int n);
|
|
|
-
|
|
|
-/**
|
|
|
- * atomic_xchg - atomically exchange contents of memory with a new value
|
|
|
- * @v: pointer of type atomic_t
|
|
|
- * @i: integer value to store in memory
|
|
|
- *
|
|
|
- * Atomically sets @v to @i and returns old @v
|
|
|
- */
|
|
|
-static inline int atomic_xchg(atomic_t *v, int n)
|
|
|
-{
|
|
|
- smp_mb(); /* barrier for proper semantics */
|
|
|
- return _atomic_xchg(v, n);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * atomic_cmpxchg - atomically exchange contents of memory if it matches
|
|
|
- * @v: pointer of type atomic_t
|
|
|
- * @o: old value that memory should have
|
|
|
- * @n: new value to write to memory if it matches
|
|
|
- *
|
|
|
- * Atomically checks if @v holds @o and replaces it with @n if so.
|
|
|
- * Returns the old value at @v.
|
|
|
- */
|
|
|
-static inline int atomic_cmpxchg(atomic_t *v, int o, int n)
|
|
|
-{
|
|
|
- smp_mb(); /* barrier for proper semantics */
|
|
|
- return _atomic_cmpxchg(v, o, n);
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* atomic_add - add integer to atomic variable
|
|
|
* @i: integer value to add
|
|
@@ -65,7 +31,7 @@ static inline int atomic_cmpxchg(atomic_t *v, int o, int n)
|
|
|
*/
|
|
|
static inline void atomic_add(int i, atomic_t *v)
|
|
|
{
|
|
|
- _atomic_xchg_add(v, i);
|
|
|
+ _atomic_xchg_add(&v->counter, i);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -78,7 +44,7 @@ static inline void atomic_add(int i, atomic_t *v)
|
|
|
static inline int atomic_add_return(int i, atomic_t *v)
|
|
|
{
|
|
|
smp_mb(); /* barrier for proper semantics */
|
|
|
- return _atomic_xchg_add(v, i) + i;
|
|
|
+ return _atomic_xchg_add(&v->counter, i) + i;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -93,7 +59,7 @@ static inline int atomic_add_return(int i, atomic_t *v)
|
|
|
static inline int __atomic_add_unless(atomic_t *v, int a, int u)
|
|
|
{
|
|
|
smp_mb(); /* barrier for proper semantics */
|
|
|
- return _atomic_xchg_add_unless(v, a, u);
|
|
|
+ return _atomic_xchg_add_unless(&v->counter, a, u);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -108,7 +74,7 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
|
|
|
*/
|
|
|
static inline void atomic_set(atomic_t *v, int n)
|
|
|
{
|
|
|
- _atomic_xchg(v, n);
|
|
|
+ _atomic_xchg(&v->counter, n);
|
|
|
}
|
|
|
|
|
|
/* A 64bit atomic type */
|
|
@@ -119,11 +85,6 @@ typedef struct {
|
|
|
|
|
|
#define ATOMIC64_INIT(val) { (val) }
|
|
|
|
|
|
-u64 _atomic64_xchg(atomic64_t *v, u64 n);
|
|
|
-u64 _atomic64_xchg_add(atomic64_t *v, u64 i);
|
|
|
-u64 _atomic64_xchg_add_unless(atomic64_t *v, u64 a, u64 u);
|
|
|
-u64 _atomic64_cmpxchg(atomic64_t *v, u64 o, u64 n);
|
|
|
-
|
|
|
/**
|
|
|
* atomic64_read - read atomic variable
|
|
|
* @v: pointer of type atomic64_t
|
|
@@ -137,35 +98,7 @@ static inline u64 atomic64_read(const atomic64_t *v)
|
|
|
* Casting away const is safe since the atomic support routines
|
|
|
* do not write to memory if the value has not been modified.
|
|
|
*/
|
|
|
- return _atomic64_xchg_add((atomic64_t *)v, 0);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * atomic64_xchg - atomically exchange contents of memory with a new value
|
|
|
- * @v: pointer of type atomic64_t
|
|
|
- * @i: integer value to store in memory
|
|
|
- *
|
|
|
- * Atomically sets @v to @i and returns old @v
|
|
|
- */
|
|
|
-static inline u64 atomic64_xchg(atomic64_t *v, u64 n)
|
|
|
-{
|
|
|
- smp_mb(); /* barrier for proper semantics */
|
|
|
- return _atomic64_xchg(v, n);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * atomic64_cmpxchg - atomically exchange contents of memory if it matches
|
|
|
- * @v: pointer of type atomic64_t
|
|
|
- * @o: old value that memory should have
|
|
|
- * @n: new value to write to memory if it matches
|
|
|
- *
|
|
|
- * Atomically checks if @v holds @o and replaces it with @n if so.
|
|
|
- * Returns the old value at @v.
|
|
|
- */
|
|
|
-static inline u64 atomic64_cmpxchg(atomic64_t *v, u64 o, u64 n)
|
|
|
-{
|
|
|
- smp_mb(); /* barrier for proper semantics */
|
|
|
- return _atomic64_cmpxchg(v, o, n);
|
|
|
+ return _atomic64_xchg_add((u64 *)&v->counter, 0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -177,7 +110,7 @@ static inline u64 atomic64_cmpxchg(atomic64_t *v, u64 o, u64 n)
|
|
|
*/
|
|
|
static inline void atomic64_add(u64 i, atomic64_t *v)
|
|
|
{
|
|
|
- _atomic64_xchg_add(v, i);
|
|
|
+ _atomic64_xchg_add(&v->counter, i);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -190,7 +123,7 @@ static inline void atomic64_add(u64 i, atomic64_t *v)
|
|
|
static inline u64 atomic64_add_return(u64 i, atomic64_t *v)
|
|
|
{
|
|
|
smp_mb(); /* barrier for proper semantics */
|
|
|
- return _atomic64_xchg_add(v, i) + i;
|
|
|
+ return _atomic64_xchg_add(&v->counter, i) + i;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -205,7 +138,7 @@ static inline u64 atomic64_add_return(u64 i, atomic64_t *v)
|
|
|
static inline u64 atomic64_add_unless(atomic64_t *v, u64 a, u64 u)
|
|
|
{
|
|
|
smp_mb(); /* barrier for proper semantics */
|
|
|
- return _atomic64_xchg_add_unless(v, a, u) != u;
|
|
|
+ return _atomic64_xchg_add_unless(&v->counter, a, u) != u;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -220,7 +153,7 @@ static inline u64 atomic64_add_unless(atomic64_t *v, u64 a, u64 u)
|
|
|
*/
|
|
|
static inline void atomic64_set(atomic64_t *v, u64 n)
|
|
|
{
|
|
|
- _atomic64_xchg(v, n);
|
|
|
+ _atomic64_xchg(&v->counter, n);
|
|
|
}
|
|
|
|
|
|
#define atomic64_add_negative(a, v) (atomic64_add_return((a), (v)) < 0)
|