]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
x86: use xadd helper more widely
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Tue, 23 Aug 2011 23:59:58 +0000 (16:59 -0700)
committerJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Fri, 26 Aug 2011 20:22:58 +0000 (13:22 -0700)
This covers the trivial cases.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
arch/x86/include/asm/atomic.h
arch/x86/include/asm/atomic64_64.h
arch/x86/include/asm/rwsem.h
arch/x86/include/asm/uv/uv_bau.h

index 952a826ac4e55bf605a05ddad11ae1fb9c315ae9..dfc1b7bdd1c71046b01d6fb42e17eb2434438ff1 100644 (file)
@@ -172,18 +172,14 @@ static inline int atomic_add_negative(int i, atomic_t *v)
  */
 static inline int atomic_add_return(int i, atomic_t *v)
 {
-       int __i;
 #ifdef CONFIG_M386
+       int __i;
        unsigned long flags;
        if (unlikely(boot_cpu_data.x86 <= 3))
                goto no_xadd;
 #endif
        /* Modern 486+ processor */
-       __i = i;
-       asm volatile(LOCK_PREFIX "xaddl %0, %1"
-                    : "+r" (i), "+m" (v->counter)
-                    : : "memory");
-       return i + __i;
+       return i + xadd(&v->counter, i);
 
 #ifdef CONFIG_M386
 no_xadd: /* Legacy 386 processor */
index 49fd1ea229511632ac849b17f55543e6782da9ae..d76cdaa1dbfc338995b9fc608e697bc825317d4b 100644 (file)
@@ -170,11 +170,7 @@ static inline int atomic64_add_negative(long i, atomic64_t *v)
  */
 static inline long atomic64_add_return(long i, atomic64_t *v)
 {
-       long __i = i;
-       asm volatile(LOCK_PREFIX "xaddq %0, %1;"
-                    : "+r" (i), "+m" (v->counter)
-                    : : "memory");
-       return i + __i;
+       return i + xadd(&v->counter, i);
 }
 
 static inline long atomic64_sub_return(long i, atomic64_t *v)
index df4cd32b4cc6eba5e623618577466206bd6b8de2..2dbe4a721ce555aee4d1fb44f4f657b72ca427da 100644 (file)
@@ -204,13 +204,7 @@ static inline void rwsem_atomic_add(long delta, struct rw_semaphore *sem)
  */
 static inline long rwsem_atomic_update(long delta, struct rw_semaphore *sem)
 {
-       long tmp = delta;
-
-       asm volatile(LOCK_PREFIX "xadd %0,%1"
-                    : "+r" (tmp), "+m" (sem->count)
-                    : : "memory");
-
-       return tmp + delta;
+       return delta + xadd(&sem->count, delta);
 }
 
 #endif /* __KERNEL__ */
index 130f1eeee5fed416bb41ed4fa54a97bdcc31a601..ebc9344da98aa97b8a095b1e7a4f0e7ea402b7af 100644 (file)
@@ -487,11 +487,7 @@ static inline int atomic_read_short(const struct atomic_short *v)
  */
 static inline int atomic_add_short_return(short i, struct atomic_short *v)
 {
-       short __i = i;
-       asm volatile(LOCK_PREFIX "xaddw %0, %1"
-                       : "+r" (i), "+m" (v->counter)
-                       : : "memory");
-       return i + __i;
+       return i + xadd(&v->counter, i);
 }
 
 #endif /* _ASM_X86_UV_UV_BAU_H */