ARM: 7467/1: mutex: use generic xchg-based implementation for ARMv6+
authorWill Deacon <will.deacon@arm.com>
Fri, 13 Jul 2012 18:15:40 +0000 (19:15 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 9 Aug 2012 23:25:04 +0000 (00:25 +0100)
commitc51cf2421d129a98183c2e9fd2209fa96297f118
tree308cedb80fc0e2b83e6c542d24dc11386acd964f
parent2bd8f381a4382eaeef391e0a551230610bece057
ARM: 7467/1: mutex: use generic xchg-based implementation for ARMv6+

commit a76d7bd96d65fa5119adba97e1b58d95f2e78829 upstream.

The open-coded mutex implementation for ARMv6+ cores suffers from a
severe lack of barriers, so in the uncontended case we don't actually
protect any accesses performed during the critical section.

Furthermore, the code is largely a duplication of the ARMv6+ atomic_dec
code but optimised to remove a branch instruction, as the mutex fastpath
was previously inlined. Now that this is executed out-of-line, we can
reuse the atomic access code for the locking (in fact, we use the xchg
code as this produces shorter critical sections).

This patch uses the generic xchg based implementation for mutexes on
ARMv6+, which introduces barriers to the lock/unlock operations and also
has the benefit of removing a fair amount of inline assembly code.

Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Nicolas Pitre <nico@linaro.org>
Reported-by: Shan Kang <kangshan0910@gmail.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
arch/arm/include/asm/mutex.h