diff options
Diffstat (limited to 'arch/arm/include/asm/xen/events.h')
| -rw-r--r-- | arch/arm/include/asm/xen/events.h | 25 | 
1 files changed, 4 insertions, 21 deletions
| diff --git a/arch/arm/include/asm/xen/events.h b/arch/arm/include/asm/xen/events.h index 5c27696de14..8b1f37bfeee 100644 --- a/arch/arm/include/asm/xen/events.h +++ b/arch/arm/include/asm/xen/events.h @@ -2,6 +2,7 @@  #define _ASM_ARM_XEN_EVENTS_H  #include <asm/ptrace.h> +#include <asm/atomic.h>  enum ipi_vector {  	XEN_PLACEHOLDER_VECTOR, @@ -15,26 +16,8 @@ static inline int xen_irqs_disabled(struct pt_regs *regs)  	return raw_irqs_disabled_flags(regs->ARM_cpsr);  } -/* - * We cannot use xchg because it does not support 8-byte - * values. However it is safe to use {ldr,dtd}exd directly because all - * platforms which Xen can run on support those instructions. - */ -static inline xen_ulong_t xchg_xen_ulong(xen_ulong_t *ptr, xen_ulong_t val) -{ -	xen_ulong_t oldval; -	unsigned int tmp; - -	wmb(); -	asm volatile("@ xchg_xen_ulong\n" -		"1:     ldrexd  %0, %H0, [%3]\n" -		"       strexd  %1, %2, %H2, [%3]\n" -		"       teq     %1, #0\n" -		"       bne     1b" -		: "=&r" (oldval), "=&r" (tmp) -		: "r" (val), "r" (ptr) -		: "memory", "cc"); -	return oldval; -} +#define xchg_xen_ulong(ptr, val) atomic64_xchg(container_of((ptr),	\ +							    atomic64_t,	\ +							    counter), (val))  #endif /* _ASM_ARM_XEN_EVENTS_H */ |