#ifndef _ASM_ARM_XEN_EVENTS_H #define _ASM_ARM_XEN_EVENTS_H #include enum ipi_vector { XEN_PLACEHOLDER_VECTOR, /* Xen IPIs go here */ XEN_NR_IPIS, }; 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; } #endif /* _ASM_ARM_XEN_EVENTS_H */