mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
locking/arch: Rename all internal __xchg() names to __arch_xchg()
Decrease the probability of this internal facility to be used by driver code. Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Ingo Molnar <mingo@kernel.org> Reviewed-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> [m68k] Acked-by: Palmer Dabbelt <palmer@rivosinc.com> [riscv] Link: https://lore.kernel.org/r/20230118154450.73842-1-andrzej.hajda@intel.com Cc: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
ee1ee6db07
commit
068550631f
20 changed files with 54 additions and 54 deletions
|
@ -6,14 +6,14 @@
|
||||||
* Atomic exchange routines.
|
* Atomic exchange routines.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ____xchg(type, args...) __xchg ## type ## _local(args)
|
#define ____xchg(type, args...) __arch_xchg ## type ## _local(args)
|
||||||
#define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args)
|
#define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args)
|
||||||
#include <asm/xchg.h>
|
#include <asm/xchg.h>
|
||||||
|
|
||||||
#define xchg_local(ptr, x) \
|
#define xchg_local(ptr, x) \
|
||||||
({ \
|
({ \
|
||||||
__typeof__(*(ptr)) _x_ = (x); \
|
__typeof__(*(ptr)) _x_ = (x); \
|
||||||
(__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_, \
|
(__typeof__(*(ptr))) __arch_xchg_local((ptr), (unsigned long)_x_,\
|
||||||
sizeof(*(ptr))); \
|
sizeof(*(ptr))); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
#undef ____xchg
|
#undef ____xchg
|
||||||
#undef ____cmpxchg
|
#undef ____cmpxchg
|
||||||
#define ____xchg(type, args...) __xchg ##type(args)
|
#define ____xchg(type, args...) __arch_xchg ##type(args)
|
||||||
#define ____cmpxchg(type, args...) __cmpxchg ##type(args)
|
#define ____cmpxchg(type, args...) __cmpxchg ##type(args)
|
||||||
#include <asm/xchg.h>
|
#include <asm/xchg.h>
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
__typeof__(*(ptr)) _x_ = (x); \
|
__typeof__(*(ptr)) _x_ = (x); \
|
||||||
smp_mb(); \
|
smp_mb(); \
|
||||||
__ret = (__typeof__(*(ptr))) \
|
__ret = (__typeof__(*(ptr))) \
|
||||||
__xchg((ptr), (unsigned long)_x_, sizeof(*(ptr))); \
|
__arch_xchg((ptr), (unsigned long)_x_, sizeof(*(ptr))); \
|
||||||
smp_mb(); \
|
smp_mb(); \
|
||||||
__ret; \
|
__ret; \
|
||||||
})
|
})
|
||||||
|
|
|
@ -85,7 +85,7 @@
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_ARC_HAS_LLSC
|
#ifdef CONFIG_ARC_HAS_LLSC
|
||||||
|
|
||||||
#define __xchg(ptr, val) \
|
#define __arch_xchg(ptr, val) \
|
||||||
({ \
|
({ \
|
||||||
__asm__ __volatile__( \
|
__asm__ __volatile__( \
|
||||||
" ex %0, [%1] \n" /* set new value */ \
|
" ex %0, [%1] \n" /* set new value */ \
|
||||||
|
@ -102,7 +102,7 @@
|
||||||
\
|
\
|
||||||
switch(sizeof(*(_p_))) { \
|
switch(sizeof(*(_p_))) { \
|
||||||
case 4: \
|
case 4: \
|
||||||
_val_ = __xchg(_p_, _val_); \
|
_val_ = __arch_xchg(_p_, _val_); \
|
||||||
break; \
|
break; \
|
||||||
default: \
|
default: \
|
||||||
BUILD_BUG(); \
|
BUILD_BUG(); \
|
||||||
|
|
|
@ -25,7 +25,8 @@
|
||||||
#define swp_is_buggy
|
#define swp_is_buggy
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size)
|
static inline unsigned long
|
||||||
|
__arch_xchg(unsigned long x, volatile void *ptr, int size)
|
||||||
{
|
{
|
||||||
extern void __bad_xchg(volatile void *, int);
|
extern void __bad_xchg(volatile void *, int);
|
||||||
unsigned long ret;
|
unsigned long ret;
|
||||||
|
@ -115,7 +116,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size
|
||||||
}
|
}
|
||||||
|
|
||||||
#define arch_xchg_relaxed(ptr, x) ({ \
|
#define arch_xchg_relaxed(ptr, x) ({ \
|
||||||
(__typeof__(*(ptr)))__xchg((unsigned long)(x), (ptr), \
|
(__typeof__(*(ptr)))__arch_xchg((unsigned long)(x), (ptr), \
|
||||||
sizeof(*(ptr))); \
|
sizeof(*(ptr))); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -62,9 +62,8 @@ __XCHG_CASE( , , mb_, 64, dmb ish, nop, , a, l, "memory")
|
||||||
#undef __XCHG_CASE
|
#undef __XCHG_CASE
|
||||||
|
|
||||||
#define __XCHG_GEN(sfx) \
|
#define __XCHG_GEN(sfx) \
|
||||||
static __always_inline unsigned long __xchg##sfx(unsigned long x, \
|
static __always_inline unsigned long \
|
||||||
volatile void *ptr, \
|
__arch_xchg##sfx(unsigned long x, volatile void *ptr, int size) \
|
||||||
int size) \
|
|
||||||
{ \
|
{ \
|
||||||
switch (size) { \
|
switch (size) { \
|
||||||
case 1: \
|
case 1: \
|
||||||
|
@ -93,7 +92,7 @@ __XCHG_GEN(_mb)
|
||||||
({ \
|
({ \
|
||||||
__typeof__(*(ptr)) __ret; \
|
__typeof__(*(ptr)) __ret; \
|
||||||
__ret = (__typeof__(*(ptr))) \
|
__ret = (__typeof__(*(ptr))) \
|
||||||
__xchg##sfx((unsigned long)(x), (ptr), sizeof(*(ptr))); \
|
__arch_xchg##sfx((unsigned long)(x), (ptr), sizeof(*(ptr))); \
|
||||||
__ret; \
|
__ret; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#define _ASM_CMPXCHG_H
|
#define _ASM_CMPXCHG_H
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* __xchg - atomically exchange a register and a memory location
|
* __arch_xchg - atomically exchange a register and a memory location
|
||||||
* @x: value to swap
|
* @x: value to swap
|
||||||
* @ptr: pointer to memory
|
* @ptr: pointer to memory
|
||||||
* @size: size of the value
|
* @size: size of the value
|
||||||
|
@ -19,8 +19,8 @@
|
||||||
* Note: there was an errata for V2 about .new's and memw_locked.
|
* Note: there was an errata for V2 about .new's and memw_locked.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static inline unsigned long __xchg(unsigned long x, volatile void *ptr,
|
static inline unsigned long
|
||||||
int size)
|
__arch_xchg(unsigned long x, volatile void *ptr, int size)
|
||||||
{
|
{
|
||||||
unsigned long retval;
|
unsigned long retval;
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr,
|
||||||
* Atomically swap the contents of a register with memory. Should be atomic
|
* Atomically swap the contents of a register with memory. Should be atomic
|
||||||
* between multiple CPU's and within interrupts on the same CPU.
|
* between multiple CPU's and within interrupts on the same CPU.
|
||||||
*/
|
*/
|
||||||
#define arch_xchg(ptr, v) ((__typeof__(*(ptr)))__xchg((unsigned long)(v), (ptr), \
|
#define arch_xchg(ptr, v) ((__typeof__(*(ptr)))__arch_xchg((unsigned long)(v), (ptr), \
|
||||||
sizeof(*(ptr))))
|
sizeof(*(ptr))))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include <uapi/asm/cmpxchg.h>
|
#include <uapi/asm/cmpxchg.h>
|
||||||
|
|
||||||
#define arch_xchg(ptr, x) \
|
#define arch_xchg(ptr, x) \
|
||||||
({(__typeof__(*(ptr))) __xchg((unsigned long) (x), (ptr), sizeof(*(ptr)));})
|
({(__typeof__(*(ptr))) __arch_xchg((unsigned long) (x), (ptr), sizeof(*(ptr)));})
|
||||||
|
|
||||||
#define arch_cmpxchg(ptr, o, n) cmpxchg_acq((ptr), (o), (n))
|
#define arch_cmpxchg(ptr, o, n) cmpxchg_acq((ptr), (o), (n))
|
||||||
#define arch_cmpxchg64(ptr, o, n) cmpxchg_acq((ptr), (o), (n))
|
#define arch_cmpxchg64(ptr, o, n) cmpxchg_acq((ptr), (o), (n))
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
*/
|
*/
|
||||||
extern void ia64_xchg_called_with_bad_pointer(void);
|
extern void ia64_xchg_called_with_bad_pointer(void);
|
||||||
|
|
||||||
#define __xchg(x, ptr, size) \
|
#define __arch_xchg(x, ptr, size) \
|
||||||
({ \
|
({ \
|
||||||
unsigned long __xchg_result; \
|
unsigned long __xchg_result; \
|
||||||
\
|
\
|
||||||
|
@ -51,7 +51,7 @@ extern void ia64_xchg_called_with_bad_pointer(void);
|
||||||
|
|
||||||
#ifndef __KERNEL__
|
#ifndef __KERNEL__
|
||||||
#define xchg(ptr, x) \
|
#define xchg(ptr, x) \
|
||||||
({(__typeof__(*(ptr))) __xchg((unsigned long) (x), (ptr), sizeof(*(ptr)));})
|
({(__typeof__(*(ptr))) __arch_xchg((unsigned long) (x), (ptr), sizeof(*(ptr)));})
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -62,7 +62,7 @@ static inline unsigned int __xchg_small(volatile void *ptr, unsigned int val,
|
||||||
}
|
}
|
||||||
|
|
||||||
static __always_inline unsigned long
|
static __always_inline unsigned long
|
||||||
__xchg(volatile void *ptr, unsigned long x, int size)
|
__arch_xchg(volatile void *ptr, unsigned long x, int size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -87,7 +87,7 @@ __xchg(volatile void *ptr, unsigned long x, int size)
|
||||||
__typeof__(*(ptr)) __res; \
|
__typeof__(*(ptr)) __res; \
|
||||||
\
|
\
|
||||||
__res = (__typeof__(*(ptr))) \
|
__res = (__typeof__(*(ptr))) \
|
||||||
__xchg((ptr), (unsigned long)(x), sizeof(*(ptr))); \
|
__arch_xchg((ptr), (unsigned long)(x), sizeof(*(ptr))); \
|
||||||
\
|
\
|
||||||
__res; \
|
__res; \
|
||||||
})
|
})
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
extern unsigned long __invalid_xchg_size(unsigned long, volatile void *, int);
|
extern unsigned long __invalid_xchg_size(unsigned long, volatile void *, int);
|
||||||
|
|
||||||
#ifndef CONFIG_RMW_INSNS
|
#ifndef CONFIG_RMW_INSNS
|
||||||
static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
|
static inline unsigned long __arch_xchg(unsigned long x, volatile void * ptr, int size)
|
||||||
{
|
{
|
||||||
unsigned long flags, tmp;
|
unsigned long flags, tmp;
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int siz
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
|
static inline unsigned long __arch_xchg(unsigned long x, volatile void * ptr, int size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -75,7 +75,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int siz
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define arch_xchg(ptr,x) ({(__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)));})
|
#define arch_xchg(ptr,x) ({(__typeof__(*(ptr)))__arch_xchg((unsigned long)(x),(ptr),sizeof(*(ptr)));})
|
||||||
|
|
||||||
#include <asm-generic/cmpxchg-local.h>
|
#include <asm-generic/cmpxchg-local.h>
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ extern unsigned long __xchg_small(volatile void *ptr, unsigned long val,
|
||||||
unsigned int size);
|
unsigned int size);
|
||||||
|
|
||||||
static __always_inline
|
static __always_inline
|
||||||
unsigned long __xchg(volatile void *ptr, unsigned long x, int size)
|
unsigned long __arch_xchg(volatile void *ptr, unsigned long x, int size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -102,7 +102,7 @@ unsigned long __xchg(volatile void *ptr, unsigned long x, int size)
|
||||||
smp_mb__before_llsc(); \
|
smp_mb__before_llsc(); \
|
||||||
\
|
\
|
||||||
__res = (__typeof__(*(ptr))) \
|
__res = (__typeof__(*(ptr))) \
|
||||||
__xchg((ptr), (unsigned long)(x), sizeof(*(ptr))); \
|
__arch_xchg((ptr), (unsigned long)(x), sizeof(*(ptr))); \
|
||||||
\
|
\
|
||||||
smp_llsc_mb(); \
|
smp_llsc_mb(); \
|
||||||
\
|
\
|
||||||
|
|
|
@ -147,8 +147,8 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
||||||
extern unsigned long __xchg_called_with_bad_pointer(void)
|
extern unsigned long __xchg_called_with_bad_pointer(void)
|
||||||
__compiletime_error("Bad argument size for xchg");
|
__compiletime_error("Bad argument size for xchg");
|
||||||
|
|
||||||
static inline unsigned long __xchg(volatile void *ptr, unsigned long with,
|
static inline unsigned long
|
||||||
int size)
|
__arch_xchg(volatile void *ptr, unsigned long with, int size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -163,7 +163,7 @@ static inline unsigned long __xchg(volatile void *ptr, unsigned long with,
|
||||||
|
|
||||||
#define arch_xchg(ptr, with) \
|
#define arch_xchg(ptr, with) \
|
||||||
({ \
|
({ \
|
||||||
(__typeof__(*(ptr))) __xchg((ptr), \
|
(__typeof__(*(ptr))) __arch_xchg((ptr), \
|
||||||
(unsigned long)(with), \
|
(unsigned long)(with), \
|
||||||
sizeof(*(ptr))); \
|
sizeof(*(ptr))); \
|
||||||
})
|
})
|
||||||
|
|
|
@ -22,7 +22,7 @@ extern unsigned long __xchg64(unsigned long, volatile unsigned long *);
|
||||||
|
|
||||||
/* optimizer better get rid of switch since size is a constant */
|
/* optimizer better get rid of switch since size is a constant */
|
||||||
static inline unsigned long
|
static inline unsigned long
|
||||||
__xchg(unsigned long x, volatile void *ptr, int size)
|
__arch_xchg(unsigned long x, volatile void *ptr, int size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
|
@ -49,7 +49,7 @@ __xchg(unsigned long x, volatile void *ptr, int size)
|
||||||
__typeof__(*(ptr)) __ret; \
|
__typeof__(*(ptr)) __ret; \
|
||||||
__typeof__(*(ptr)) _x_ = (x); \
|
__typeof__(*(ptr)) _x_ = (x); \
|
||||||
__ret = (__typeof__(*(ptr))) \
|
__ret = (__typeof__(*(ptr))) \
|
||||||
__xchg((unsigned long)_x_, (ptr), sizeof(*(ptr))); \
|
__arch_xchg((unsigned long)_x_, (ptr), sizeof(*(ptr))); \
|
||||||
__ret; \
|
__ret; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -229,7 +229,7 @@ __xchg_local(void *ptr, unsigned long x, unsigned int size)
|
||||||
return __xchg_u64_local(ptr, x);
|
return __xchg_u64_local(ptr, x);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
BUILD_BUG_ON_MSG(1, "Unsupported size for __xchg");
|
BUILD_BUG_ON_MSG(1, "Unsupported size for __xchg_local");
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,7 +248,7 @@ __xchg_relaxed(void *ptr, unsigned long x, unsigned int size)
|
||||||
return __xchg_u64_relaxed(ptr, x);
|
return __xchg_u64_relaxed(ptr, x);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
BUILD_BUG_ON_MSG(1, "Unsupported size for __xchg_local");
|
BUILD_BUG_ON_MSG(1, "Unsupported size for __xchg_relaxed");
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
#define arch_xchg_local(ptr,x) \
|
#define arch_xchg_local(ptr,x) \
|
||||||
|
|
|
@ -261,7 +261,7 @@ c_t arch_atomic##prefix##_xchg_release(atomic##prefix##_t *v, c_t n) \
|
||||||
static __always_inline \
|
static __always_inline \
|
||||||
c_t arch_atomic##prefix##_xchg(atomic##prefix##_t *v, c_t n) \
|
c_t arch_atomic##prefix##_xchg(atomic##prefix##_t *v, c_t n) \
|
||||||
{ \
|
{ \
|
||||||
return __xchg(&(v->counter), n, size); \
|
return __arch_xchg(&(v->counter), n, size); \
|
||||||
} \
|
} \
|
||||||
static __always_inline \
|
static __always_inline \
|
||||||
c_t arch_atomic##prefix##_cmpxchg_relaxed(atomic##prefix##_t *v, \
|
c_t arch_atomic##prefix##_cmpxchg_relaxed(atomic##prefix##_t *v, \
|
||||||
|
|
|
@ -114,7 +114,7 @@
|
||||||
_x_, sizeof(*(ptr))); \
|
_x_, sizeof(*(ptr))); \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define __xchg(ptr, new, size) \
|
#define __arch_xchg(ptr, new, size) \
|
||||||
({ \
|
({ \
|
||||||
__typeof__(ptr) __ptr = (ptr); \
|
__typeof__(ptr) __ptr = (ptr); \
|
||||||
__typeof__(new) __new = (new); \
|
__typeof__(new) __new = (new); \
|
||||||
|
@ -143,7 +143,7 @@
|
||||||
#define arch_xchg(ptr, x) \
|
#define arch_xchg(ptr, x) \
|
||||||
({ \
|
({ \
|
||||||
__typeof__(*(ptr)) _x_ = (x); \
|
__typeof__(*(ptr)) _x_ = (x); \
|
||||||
(__typeof__(*(ptr))) __xchg((ptr), _x_, sizeof(*(ptr))); \
|
(__typeof__(*(ptr))) __arch_xchg((ptr), _x_, sizeof(*(ptr))); \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define xchg32(ptr, x) \
|
#define xchg32(ptr, x) \
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
|
|
||||||
void __xchg_called_with_bad_pointer(void);
|
void __xchg_called_with_bad_pointer(void);
|
||||||
|
|
||||||
static __always_inline unsigned long __xchg(unsigned long x,
|
static __always_inline unsigned long
|
||||||
unsigned long address, int size)
|
__arch_xchg(unsigned long x, unsigned long address, int size)
|
||||||
{
|
{
|
||||||
unsigned long old;
|
unsigned long old;
|
||||||
int shift;
|
int shift;
|
||||||
|
@ -77,7 +77,7 @@ static __always_inline unsigned long __xchg(unsigned long x,
|
||||||
__typeof__(*(ptr)) __ret; \
|
__typeof__(*(ptr)) __ret; \
|
||||||
\
|
\
|
||||||
__ret = (__typeof__(*(ptr))) \
|
__ret = (__typeof__(*(ptr))) \
|
||||||
__xchg((unsigned long)(x), (unsigned long)(ptr), \
|
__arch_xchg((unsigned long)(x), (unsigned long)(ptr), \
|
||||||
sizeof(*(ptr))); \
|
sizeof(*(ptr))); \
|
||||||
__ret; \
|
__ret; \
|
||||||
})
|
})
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
extern void __xchg_called_with_bad_pointer(void);
|
extern void __xchg_called_with_bad_pointer(void);
|
||||||
|
|
||||||
#define __xchg(ptr, x, size) \
|
#define __arch_xchg(ptr, x, size) \
|
||||||
({ \
|
({ \
|
||||||
unsigned long __xchg__res; \
|
unsigned long __xchg__res; \
|
||||||
volatile void *__xchg_ptr = (ptr); \
|
volatile void *__xchg_ptr = (ptr); \
|
||||||
|
@ -46,7 +46,7 @@ extern void __xchg_called_with_bad_pointer(void);
|
||||||
})
|
})
|
||||||
|
|
||||||
#define arch_xchg(ptr,x) \
|
#define arch_xchg(ptr,x) \
|
||||||
((__typeof__(*(ptr)))__xchg((ptr),(unsigned long)(x), sizeof(*(ptr))))
|
((__typeof__(*(ptr)))__arch_xchg((ptr),(unsigned long)(x), sizeof(*(ptr))))
|
||||||
|
|
||||||
/* This function doesn't exist, so you'll get a linker error
|
/* This function doesn't exist, so you'll get a linker error
|
||||||
* if something tries to do an invalid cmpxchg(). */
|
* if something tries to do an invalid cmpxchg(). */
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
unsigned long __xchg_u32(volatile u32 *m, u32 new);
|
unsigned long __xchg_u32(volatile u32 *m, u32 new);
|
||||||
void __xchg_called_with_bad_pointer(void);
|
void __xchg_called_with_bad_pointer(void);
|
||||||
|
|
||||||
static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr, int size)
|
static inline unsigned long __arch_xchg(unsigned long x, __volatile__ void * ptr, int size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
case 4:
|
case 4:
|
||||||
|
@ -25,7 +25,7 @@ static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr, int
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define arch_xchg(ptr,x) ({(__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)));})
|
#define arch_xchg(ptr,x) ({(__typeof__(*(ptr)))__arch_xchg((unsigned long)(x),(ptr),sizeof(*(ptr)));})
|
||||||
|
|
||||||
/* Emulate cmpxchg() the same way we emulate atomics,
|
/* Emulate cmpxchg() the same way we emulate atomics,
|
||||||
* by hashing the object address and indexing into an array
|
* by hashing the object address and indexing into an array
|
||||||
|
|
|
@ -55,7 +55,7 @@ static inline unsigned long xchg64(__volatile__ unsigned long *m, unsigned long
|
||||||
#define arch_xchg(ptr,x) \
|
#define arch_xchg(ptr,x) \
|
||||||
({ __typeof__(*(ptr)) __ret; \
|
({ __typeof__(*(ptr)) __ret; \
|
||||||
__ret = (__typeof__(*(ptr))) \
|
__ret = (__typeof__(*(ptr))) \
|
||||||
__xchg((unsigned long)(x), (ptr), sizeof(*(ptr))); \
|
__arch_xchg((unsigned long)(x), (ptr), sizeof(*(ptr))); \
|
||||||
__ret; \
|
__ret; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -87,8 +87,8 @@ xchg16(__volatile__ unsigned short *m, unsigned short val)
|
||||||
return (load32 & mask) >> bit_shift;
|
return (load32 & mask) >> bit_shift;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr,
|
static inline unsigned long
|
||||||
int size)
|
__arch_xchg(unsigned long x, __volatile__ void * ptr, int size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
case 2:
|
case 2:
|
||||||
|
|
|
@ -170,7 +170,7 @@ static inline unsigned long xchg_u32(volatile int * m, unsigned long val)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define arch_xchg(ptr,x) \
|
#define arch_xchg(ptr,x) \
|
||||||
((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
|
((__typeof__(*(ptr)))__arch_xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
|
||||||
|
|
||||||
static inline u32 xchg_small(volatile void *ptr, u32 x, int size)
|
static inline u32 xchg_small(volatile void *ptr, u32 x, int size)
|
||||||
{
|
{
|
||||||
|
@ -203,7 +203,7 @@ static inline u32 xchg_small(volatile void *ptr, u32 x, int size)
|
||||||
extern void __xchg_called_with_bad_pointer(void);
|
extern void __xchg_called_with_bad_pointer(void);
|
||||||
|
|
||||||
static __inline__ unsigned long
|
static __inline__ unsigned long
|
||||||
__xchg(unsigned long x, volatile void * ptr, int size)
|
__arch_xchg(unsigned long x, volatile void * ptr, int size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
case 1:
|
case 1:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue