|
@@ -413,6 +413,11 @@ __und_usr:
|
|
|
@
|
|
|
adr r9, BSYM(ret_from_exception)
|
|
|
|
|
|
+ @ IRQs must be enabled before attempting to read the instruction from
|
|
|
+ @ user space since that could cause a page/translation fault if the
|
|
|
+ @ page table was modified by another CPU.
|
|
|
+ enable_irq
|
|
|
+
|
|
|
tst r3, #PSR_T_BIT @ Thumb mode?
|
|
|
bne __und_usr_thumb
|
|
|
sub r4, r2, #4 @ ARM instr at LR - 4
|
|
@@ -517,7 +522,7 @@ ENDPROC(__und_usr)
|
|
|
* r9 = normal "successful" return address
|
|
|
* r10 = this threads thread_info structure
|
|
|
* lr = unrecognised instruction return address
|
|
|
- * IRQs disabled, FIQs enabled.
|
|
|
+ * IRQs enabled, FIQs enabled.
|
|
|
*/
|
|
|
@
|
|
|
@ Fall-through from Thumb-2 __und_usr
|
|
@@ -624,7 +629,6 @@ call_fpe:
|
|
|
#endif
|
|
|
|
|
|
do_fpe:
|
|
|
- enable_irq
|
|
|
ldr r4, .LCfp
|
|
|
add r10, r10, #TI_FPSTATE @ r10 = workspace
|
|
|
ldr pc, [r4] @ Call FP module USR entry point
|
|
@@ -652,8 +656,7 @@ __und_usr_fault_32:
|
|
|
b 1f
|
|
|
__und_usr_fault_16:
|
|
|
mov r1, #2
|
|
|
-1: enable_irq
|
|
|
- mov r0, sp
|
|
|
+1: mov r0, sp
|
|
|
adr lr, BSYM(ret_from_exception)
|
|
|
b __und_fault
|
|
|
ENDPROC(__und_usr_fault_32)
|