mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/arm: Remove cmpxchg_local() and drop _mb from the other helpers
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>
This commit is contained in:
1 parent
414d22cc09
commit
5a15c8a65f
3 files changed
+19
-56
No files matched your search
@@ -112,25 +112,14 @@ 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();
|
||||
smp_mb();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
* The helper may fail to update the memory if the action takes too long.
|
||||
*
|
||||
@@ -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), \
|
||||
|
||||
@@ -125,25 +125,14 @@ 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();
|
||||
smp_mb();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
* The helper may fail to update the memory if the action takes too long.
|
||||
*
|
||||
@@ -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; \
|
||||
})
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||