diff -Naru a/include/asm-x86_64/atomic.h b/include/asm-x86_64/atomic.h --- a/include/asm-x86_64/atomic.h 2006-03-17 03:52:34 -08:00 +++ b/include/asm-x86_64/atomic.h 2006-03-17 03:52:34 -08:00 @@ -338,6 +338,31 @@ return c; } +/** + * atomic_add_return - add and return + * @v: pointer of type atomic_t + * @i: integer value to add + * + * Atomically adds @i to @v and returns @i + @v + */ +static __inline__ int atomic_add_return(int i, atomic_t *v) +{ + int __i = i; + __asm__ __volatile__( + LOCK "xaddl %0, %1;" + :"=r"(i) + :"m"(v->counter), "0"(i)); + return i + __i; +} + +static __inline__ int atomic_sub_return(int i, atomic_t *v) +{ + return atomic_add_return(-i,v); +} + +#define atomic_inc_return(v) (atomic_add_return(1,v)) +#define atomic_dec_return(v) (atomic_sub_return(1,v)) + /* These are x86-specific, used by some header files */ #define atomic_clear_mask(mask, addr) \ __asm__ __volatile__(LOCK "andl %0,%1" \ # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/10/20 08:13:29-07:00 kaigai@ak.jp.nec.com # [PATCH] atomic_inc_return() for x86_64 # # Signed-off-by: KaiGai, Kohei # Signed-off-by: Andrew Morton # Signed-off-by: Linus Torvalds # # include/asm-x86_64/atomic.h # 2004/10/20 01:12:08-07:00 kaigai@ak.jp.nec.com +25 -0 # atomic_inc_return() for x86_64 # http://linux.bkbits.net:8080/linux-2.6/cset@1.1938.185.13