powerpc/40x: Save SRR0/SRR1 and r10/r11 earlier in critical exception
In order to be able to switch MMU on in exception prolog, save SRR0 and SRR1 earlier. Also save r10 and r11 into stack earlier to better match with the normal exception prolog. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/79a93f253d72dc97ac968c9c62b5066960b688ed.1615552866.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
9d3c18a11a
commit
fcd4b43c36
|
@ -107,15 +107,6 @@ _ASM_NOKPROBE_SYMBOL(crit_transfer_to_handler)
|
|||
#ifdef CONFIG_40x
|
||||
.globl crit_transfer_to_handler
|
||||
crit_transfer_to_handler:
|
||||
lwz r0,crit_r10@l(0)
|
||||
stw r0,GPR10(r11)
|
||||
lwz r0,crit_r11@l(0)
|
||||
stw r0,GPR11(r11)
|
||||
mfspr r0,SPRN_SRR0
|
||||
stw r0,crit_srr0@l(0)
|
||||
mfspr r0,SPRN_SRR1
|
||||
stw r0,crit_srr1@l(0)
|
||||
|
||||
/* set the stack limit to the current stack */
|
||||
mfspr r8,SPRN_SPRG_THREAD
|
||||
lwz r0,KSP_LIMIT(r8)
|
||||
|
|
|
@ -103,6 +103,10 @@ _ENTRY(saved_ksp_limit)
|
|||
.macro CRITICAL_EXCEPTION_PROLOG
|
||||
stw r10,crit_r10@l(0) /* save two registers to work with */
|
||||
stw r11,crit_r11@l(0)
|
||||
mfspr r10,SPRN_SRR0
|
||||
mfspr r11,SPRN_SRR1
|
||||
stw r10,crit_srr0@l(0)
|
||||
stw r11,crit_srr1@l(0)
|
||||
mfcr r10 /* save CR in r10 for now */
|
||||
mfspr r11,SPRN_SRR3 /* check whether user or kernel */
|
||||
andi. r11,r11,MSR_PR
|
||||
|
@ -120,6 +124,10 @@ _ENTRY(saved_ksp_limit)
|
|||
stw r9,GPR9(r11)
|
||||
mflr r10
|
||||
stw r10,_LINK(r11)
|
||||
lwz r10,crit_r10@l(0)
|
||||
lwz r12,crit_r11@l(0)
|
||||
stw r10,GPR10(r11)
|
||||
stw r12,GPR11(r11)
|
||||
mfspr r12,SPRN_DEAR /* save DEAR and ESR in the frame */
|
||||
stw r12,_DEAR(r11) /* since they may have had stuff */
|
||||
mfspr r9,SPRN_ESR /* in them at the point where the */
|
||||
|
|
Loading…
Reference in New Issue