arm: Convert spinlocks to new inline assembly style

Refactor the inline assembly code in spinlock.h in
preparation for supporting the Krait safe WFE sequence.

Change-Id: I2db4f823c39b164e04673f44cea916e334a20c9a
Signed-off-by: Stepan Moskovchenko <stepanm@codeaurora.org>
This commit is contained in:
Stepan Moskovchenko
2012-07-13 17:26:54 -07:00
committed by Stephen Boyd
parent 00e96795e4
commit 00f7fe11b1

View File

@@ -74,16 +74,16 @@ static inline void arch_spin_lock(arch_spinlock_t *lock)
unsigned long tmp;
__asm__ __volatile__(
"1: ldrex %0, [%1]\n"
" teq %0, #0\n"
"1: ldrex %[tmp], [%[lock]]\n"
" teq %[tmp], #0\n"
" beq 2f\n"
WFE()
"2:\n"
" strexeq %0, %2, [%1]\n"
" teqeq %0, #0\n"
" strexeq %[tmp], %[bit0], [%[lock]]\n"
" teqeq %[tmp], #0\n"
" bne 1b"
: "=&r" (tmp)
: "r" (&lock->lock), "r" (1)
: [tmp] "=&r" (tmp)
: [lock] "r" (&lock->lock), [bit0] "r" (1)
: "cc");
smp_mb();
@@ -265,16 +265,16 @@ static inline void arch_write_lock(arch_rwlock_t *rw)
unsigned long tmp;
__asm__ __volatile__(
"1: ldrex %0, [%1]\n"
" teq %0, #0\n"
"1: ldrex %[tmp], [%[lock]]\n"
" teq %[tmp], #0\n"
" beq 2f\n"
WFE()
"2:\n"
" strexeq %0, %2, [%1]\n"
" teq %0, #0\n"
" strexeq %[tmp], %[bit31], [%[lock]]\n"
" teq %[tmp], #0\n"
" bne 1b"
: "=&r" (tmp)
: "r" (&rw->lock), "r" (0x80000000)
: [tmp] "=&r" (tmp)
: [lock] "r" (&rw->lock), [bit31] "r" (0x80000000)
: "cc");
smp_mb();
@@ -333,16 +333,16 @@ static inline void arch_read_lock(arch_rwlock_t *rw)
unsigned long tmp, tmp2;
__asm__ __volatile__(
"1: ldrex %0, [%2]\n"
" adds %0, %0, #1\n"
" strexpl %1, %0, [%2]\n"
"1: ldrex %[tmp], [%[lock]]\n"
" adds %[tmp], %[tmp], #1\n"
" strexpl %[tmp2], %[tmp], [%[lock]]\n"
" bpl 2f\n"
WFE()
"2:\n"
" rsbpls %0, %1, #0\n"
" rsbpls %[tmp], %[tmp2], #0\n"
" bmi 1b"
: "=&r" (tmp), "=&r" (tmp2)
: "r" (&rw->lock)
: [tmp] "=&r" (tmp), [tmp2] "=&r" (tmp2)
: [lock] "r" (&rw->lock)
: "cc");
smp_mb();