mutex subsystem, switch ARM to use the xchg based implementation
PATCH 6/9 mutex subsystem, switch ARM to use the xchg based implementation
as noted by Nicolas Pitre, atomic_[inc/dec]_call_if_[nonpositive/negative]() atomic methods are slow on ARM, because they can only be implemented via disabling interrupts. So tell the mutex code that we prefer atomic_xchg().
[ we still pull in asm-generic/atomic-call-if.h, so that they remain
generally available primitives - even though unused on ARM at the moment. ]
Signed-off-by Ingo Molnar <[email protected]>
----
include/asm-arm/atomic.h | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-)
include/asm-arm/atomic.h +7 -5
@@ -180,14 +180,16 @@ static inline void atomic_clear_mask(uns/* * Pull in the generic wrappers for atomic_dec_call_if_negative() and * atomic_inc_call_if_nonpositive(). -* -* TODO: implement optimized primitives instead, or leave the generic -* implementation in place, or use the __ARCH_WANT_XCHG_BASED_ATOMICS -* mechanism to tell the generic mutex code to use the atomic_xchg() -* based fastpath implementation. */ #include <asm-generic/atomic-call-if.h> +/* +* The atomic_[inc/dec]_call_if_[nonpositive/negative]() atomic methods +* are slow on ARM, because they can only be implemented via disabling +* interrupts. Tell the mutex code that we prefer atomic_xchg(): +*/ +#define __ARCH_WANT_XCHG_BASED_ATOMICS +static inline int atomic_add_unless (atomic_t *v,int a,int u) {int c, old;