Make casuword() atomic for armv6

This commit is contained in:
Olivier Houchard 2013-10-17 17:11:15 +00:00
parent 884c8e4fea
commit e49341e87c

View File

@ -67,11 +67,27 @@ ENTRY(casuword)
stmfd sp!, {r4, r5}
adr r4, .Lcasuwordfault
str r4, [r3, #PCB_ONFAULT]
#ifdef _ARM_ARCH_6
1:
cmp r0, #KERNBASE
mvnge r0, #0
bge 2f
ldrex r5, [r0]
cmp r5, r1
movne r0, r5
bne 2f
strex r5, r2, [r0]
cmp r5, #0
bne 1b
#else
ldrt r5, [r0]
cmp r5, r1
movne r0, r5
streqt r2, [r0]
#endif
moveq r0, r1
2:
ldmfd sp!, {r4, r5}
mov r1, #0x00000000
str r1, [r3, #PCB_ONFAULT]