]> xenbits.xensource.com Git - xen.git/commitdiff
xen/arm: Remove cmpxchg_local() and drop _mb from the other helpers
authorJulien Grall <jgrall@amazon.com>
Fri, 11 Sep 2020 16:06:21 +0000 (17:06 +0100)
committerJulien Grall <jgrall@amazon.com>
Fri, 18 Sep 2020 16:33:01 +0000 (17:33 +0100)
The current set of helpers are quite confusing to follow as the naming
is not very consistent.

Given that cmpxchg_local() is not used in Xen, drop it completely.
Furthermore, adopt a naming with _mb so all names are now consistent.

Signed-off-by: Julien Grall <jgrall@amazon.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
xen/include/asm-arm/arm32/cmpxchg.h
xen/include/asm-arm/arm64/cmpxchg.h
xen/include/asm-arm/guest_atomics.h

index 0770f272ee9908db55d092ce12d4d61c31e94a4b..3ef1e5c632762e011a38e608f65d868acba54be5 100644 (file)
@@ -112,23 +112,12 @@ static always_inline unsigned long __cmpxchg(volatile void *ptr,
                                             unsigned long new,
                                             int size)
 {
+       smp_mb();
        if (!__int_cmpxchg(ptr, &old, new, size, false, 0))
                ASSERT_UNREACHABLE();
-
-       return old;
-}
-
-static always_inline unsigned long __cmpxchg_mb(volatile void *ptr,
-                                                unsigned long old,
-                                                unsigned long new, int size)
-{
-       unsigned long ret;
-
-       smp_mb();
-       ret = __cmpxchg(ptr, old, new, size);
        smp_mb();
 
-       return ret;
+       return old;
 }
 
 /*
@@ -141,11 +130,11 @@ static always_inline unsigned long __cmpxchg_mb(volatile void *ptr,
  * The helper will return true when the update has succeeded (i.e no
  * timeout) and false if the update has failed.
  */
-static always_inline bool __cmpxchg_mb_timeout(volatile void *ptr,
-                                              unsigned long *old,
-                                              unsigned long new,
-                                              int size,
-                                              unsigned int max_try)
+static always_inline bool __cmpxchg_timeout(volatile void *ptr,
+                                           unsigned long *old,
+                                           unsigned long new,
+                                           int size,
+                                           unsigned int max_try)
 {
        bool ret;
 
@@ -157,12 +146,6 @@ static always_inline bool __cmpxchg_mb_timeout(volatile void *ptr,
 }
 
 #define cmpxchg(ptr,o,n)                                               \
-       ((__typeof__(*(ptr)))__cmpxchg_mb((ptr),                        \
-                                         (unsigned long)(o),           \
-                                         (unsigned long)(n),           \
-                                         sizeof(*(ptr))))
-
-#define cmpxchg_local(ptr,o,n)                                         \
        ((__typeof__(*(ptr)))__cmpxchg((ptr),                           \
                                       (unsigned long)(o),              \
                                       (unsigned long)(n),              \
index fc5c60f0bd74c38ec19214d11abc298e9515b5ab..f4a8c1ccba809f3487882efbd9b29546a1acceac 100644 (file)
@@ -125,23 +125,12 @@ static always_inline unsigned long __cmpxchg(volatile void *ptr,
                                             unsigned long new,
                                             int size)
 {
+       smp_mb();
        if (!__int_cmpxchg(ptr, &old, new, size, false, 0))
                ASSERT_UNREACHABLE();
-
-       return old;
-}
-
-static always_inline unsigned long __cmpxchg_mb(volatile void *ptr,
-                                               unsigned long old,
-                                               unsigned long new, int size)
-{
-       unsigned long ret;
-
-       smp_mb();
-       ret = __cmpxchg(ptr, old, new, size);
        smp_mb();
 
-       return ret;
+       return old;
 }
 
 /*
@@ -154,11 +143,11 @@ static always_inline unsigned long __cmpxchg_mb(volatile void *ptr,
  * The helper will return true when the update has succeeded (i.e no
  * timeout) and false if the update has failed.
  */
-static always_inline bool __cmpxchg_mb_timeout(volatile void *ptr,
-                                              unsigned long *old,
-                                              unsigned long new,
-                                              int size,
-                                              unsigned int max_try)
+static always_inline bool __cmpxchg_timeout(volatile void *ptr,
+                                           unsigned long *old,
+                                           unsigned long new,
+                                           int size,
+                                           unsigned int max_try)
 {
        bool ret;
 
@@ -173,17 +162,8 @@ static always_inline bool __cmpxchg_mb_timeout(volatile void *ptr,
 ({ \
        __typeof__(*(ptr)) __ret; \
        __ret = (__typeof__(*(ptr))) \
-               __cmpxchg_mb((ptr), (unsigned long)(o), (unsigned long)(n), \
-                            sizeof(*(ptr))); \
-       __ret; \
-})
-
-#define cmpxchg_local(ptr, o, n) \
-({ \
-       __typeof__(*(ptr)) __ret; \
-       __ret = (__typeof__(*(ptr))) \
-               __cmpxchg((ptr), (unsigned long)(o), \
-                         (unsigned long)(n), sizeof(*(ptr))); \
+               __cmpxchg((ptr), (unsigned long)(o), (unsigned long)(n), \
+                         sizeof(*(ptr))); \
        __ret; \
 })
 
index af27cc627bf3db97554b1562ddf194464146c4c4..20347849e56c9cf9163e4789ade8593e7986c214 100644 (file)
@@ -96,14 +96,14 @@ static inline unsigned long __guest_cmpxchg(struct domain *d,
 
     perfc_incr(atomics_guest);
 
-    if ( __cmpxchg_mb_timeout(ptr, &oldval, new, size,
-                              this_cpu(guest_safe_atomic_max)) )
+    if ( __cmpxchg_timeout(ptr, &oldval, new, size,
+                           this_cpu(guest_safe_atomic_max)) )
         return oldval;
 
     perfc_incr(atomics_guest_paused);
 
     domain_pause_nosync(d);
-    oldval = __cmpxchg_mb(ptr, old, new, size);
+    oldval = __cmpxchg(ptr, old, new, size);
     domain_unpause(d);
 
     return oldval;