X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fasm-sh64%2Fatomic.h;h=28f2ea9b567bfe1c95cfdc84d49b2e963bbd654b;hb=92e1d5be91a0e3ffa5c4697eeb09b2aa22792122;hp=6eeb57b015ce50442cd5b3c17dad2e21d022980f;hpb=4a6dae6d382e9edf3ff440b819e554ed706359bc;p=linux-2.6 diff --git a/include/asm-sh64/atomic.h b/include/asm-sh64/atomic.h index 6eeb57b015..28f2ea9b56 100644 --- a/include/asm-sh64/atomic.h +++ b/include/asm-sh64/atomic.h @@ -113,6 +113,23 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new) return ret; } +#define atomic_xchg(v, new) (xchg(&((v)->counter), new)) + +static inline int atomic_add_unless(atomic_t *v, int a, int u) +{ + int ret; + unsigned long flags; + + local_irq_save(flags); + ret = v->counter; + if (ret != u) + v->counter += a; + local_irq_restore(flags); + + return ret != u; +} +#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) + static __inline__ void atomic_clear_mask(unsigned int mask, atomic_t *v) { unsigned long flags; @@ -137,4 +154,5 @@ static __inline__ void atomic_set_mask(unsigned int mask, atomic_t *v) #define smp_mb__before_atomic_inc() barrier() #define smp_mb__after_atomic_inc() barrier() +#include #endif /* __ASM_SH64_ATOMIC_H */