ARM: spinlock: avoid exclusive accesses on unlock() path
Subsystems (2)
PATCH 1/1 ARM: spinlock: avoid exclusive accesses on unlock() path
When unlocking a spinlock, all we need to do is increment the owner field of the lock. Since only one CPU can be performing an unlock() operation for a given lock, this doesn't need to be exclusive.
This patch simplifies arch_spin_unlock to use non-exclusive accesses when updating the owner field of the lock.
Signed-off-by Will Deacon <[email protected]>
--- arch/arm/include/asm/spinlock.h | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-)
arch/arm/include/asm/spinlock.h +1 -15
@@ -119,22 +119,8 @@ static inline int arch_spin_trylock(arch_spinlock_t *lock)static inline void arch_spin_unlock (arch_spinlock_t *lock) { -unsigned long tmp; -u32 slock; -smp_mb (); - - __asm__ __volatile__( -" mov %1, #1\n" -"1: ldrex %0, [%2]\n" -" uadd16 %0, %0, %1\n" -" strex %1, %0, [%2]\n" -" teq %1, #0\n" -" bne 1b" - :"=&r" (slock),"=&r" (tmp) - :"r" (&lock->slock) - :"cc" ); - + lock->tickets.owner++;dsb_sev (); }
Signature · 1 line
1.8.0