diff options
Diffstat (limited to 'arch/x86/include/asm/atomic_64.h')
| -rw-r--r-- | arch/x86/include/asm/atomic_64.h | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/arch/x86/include/asm/atomic_64.h b/arch/x86/include/asm/atomic_64.h index 0d6360220007..d605dc268e79 100644 --- a/arch/x86/include/asm/atomic_64.h +++ b/arch/x86/include/asm/atomic_64.h | |||
| @@ -18,7 +18,10 @@ | |||
| 18 | * | 18 | * |
| 19 | * Atomically reads the value of @v. | 19 | * Atomically reads the value of @v. |
| 20 | */ | 20 | */ |
| 21 | #define atomic_read(v) ((v)->counter) | 21 | static inline int atomic_read(const atomic_t *v) |
| 22 | { | ||
| 23 | return v->counter; | ||
| 24 | } | ||
| 22 | 25 | ||
| 23 | /** | 26 | /** |
| 24 | * atomic_set - set atomic variable | 27 | * atomic_set - set atomic variable |
| @@ -27,7 +30,10 @@ | |||
| 27 | * | 30 | * |
| 28 | * Atomically sets the value of @v to @i. | 31 | * Atomically sets the value of @v to @i. |
| 29 | */ | 32 | */ |
| 30 | #define atomic_set(v, i) (((v)->counter) = (i)) | 33 | static inline void atomic_set(atomic_t *v, int i) |
| 34 | { | ||
| 35 | v->counter = i; | ||
| 36 | } | ||
| 31 | 37 | ||
| 32 | /** | 38 | /** |
| 33 | * atomic_add - add integer to atomic variable | 39 | * atomic_add - add integer to atomic variable |
| @@ -192,7 +198,10 @@ static inline int atomic_sub_return(int i, atomic_t *v) | |||
| 192 | * Atomically reads the value of @v. | 198 | * Atomically reads the value of @v. |
| 193 | * Doesn't imply a read memory barrier. | 199 | * Doesn't imply a read memory barrier. |
| 194 | */ | 200 | */ |
| 195 | #define atomic64_read(v) ((v)->counter) | 201 | static inline long atomic64_read(const atomic64_t *v) |
| 202 | { | ||
| 203 | return v->counter; | ||
| 204 | } | ||
| 196 | 205 | ||
| 197 | /** | 206 | /** |
| 198 | * atomic64_set - set atomic64 variable | 207 | * atomic64_set - set atomic64 variable |
| @@ -201,7 +210,10 @@ static inline int atomic_sub_return(int i, atomic_t *v) | |||
| 201 | * | 210 | * |
| 202 | * Atomically sets the value of @v to @i. | 211 | * Atomically sets the value of @v to @i. |
| 203 | */ | 212 | */ |
| 204 | #define atomic64_set(v, i) (((v)->counter) = (i)) | 213 | static inline void atomic64_set(atomic64_t *v, long i) |
| 214 | { | ||
| 215 | v->counter = i; | ||
| 216 | } | ||
| 205 | 217 | ||
| 206 | /** | 218 | /** |
| 207 | * atomic64_add - add integer to atomic64 variable | 219 | * atomic64_add - add integer to atomic64 variable |
| @@ -355,11 +367,25 @@ static inline long atomic64_sub_return(long i, atomic64_t *v) | |||
| 355 | #define atomic64_inc_return(v) (atomic64_add_return(1, (v))) | 367 | #define atomic64_inc_return(v) (atomic64_add_return(1, (v))) |
| 356 | #define atomic64_dec_return(v) (atomic64_sub_return(1, (v))) | 368 | #define atomic64_dec_return(v) (atomic64_sub_return(1, (v))) |
| 357 | 369 | ||
| 358 | #define atomic64_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new))) | 370 | static inline long atomic64_cmpxchg(atomic64_t *v, long old, long new) |
| 359 | #define atomic64_xchg(v, new) (xchg(&((v)->counter), new)) | 371 | { |
| 372 | return cmpxchg(&v->counter, old, new); | ||
| 373 | } | ||
| 374 | |||
| 375 | static inline long atomic64_xchg(atomic64_t *v, long new) | ||
| 376 | { | ||
| 377 | return xchg(&v->counter, new); | ||
| 378 | } | ||
| 360 | 379 | ||
| 361 | #define atomic_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new))) | 380 | static inline long atomic_cmpxchg(atomic_t *v, int old, int new) |
| 362 | #define atomic_xchg(v, new) (xchg(&((v)->counter), (new))) | 381 | { |
| 382 | return cmpxchg(&v->counter, old, new); | ||
| 383 | } | ||
| 384 | |||
| 385 | static inline long atomic_xchg(atomic_t *v, int new) | ||
| 386 | { | ||
| 387 | return xchg(&v->counter, new); | ||
| 388 | } | ||
| 363 | 389 | ||
| 364 | /** | 390 | /** |
| 365 | * atomic_add_unless - add unless the number is a given value | 391 | * atomic_add_unless - add unless the number is a given value |
