[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCHv2 3/6] xen: generic xadd() for ticket locks
Provide a generic xadd() implementation for architectures that don't provide one. This is only temporary until arm/arm64 provides an xadd() implementation. Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx> --- xen/common/spinlock.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/xen/common/spinlock.c b/xen/common/spinlock.c index 5fd8b1c..0c4289c 100644 --- a/xen/common/spinlock.c +++ b/xen/common/spinlock.c @@ -10,6 +10,27 @@ #include <asm/processor.h> #include <asm/atomic.h> +#ifndef xadd + +static u32 generic_xaddl(volatile u32 *ptr, u32 v) +{ + u32 old, new, prev; + + old = read_atomic(ptr); + for(;;) { + new = old + v; + prev = cmpxchg(ptr, old, new); + if (prev == old) + break; + old = prev; + } + return old; +} + +#define xadd(ptr, v) generic_xaddl((ptr), (v)) + +#endif + #ifndef NDEBUG static atomic_t spin_debug __read_mostly = ATOMIC_INIT(0); -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |