Commit fcd4b43c authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

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: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/79a93f253d72dc97ac968c9c62b5066960b688ed.1615552866.git.christophe.leroy@csgroup.eu
parent 9d3c18a1
...@@ -107,15 +107,6 @@ _ASM_NOKPROBE_SYMBOL(crit_transfer_to_handler) ...@@ -107,15 +107,6 @@ _ASM_NOKPROBE_SYMBOL(crit_transfer_to_handler)
#ifdef CONFIG_40x #ifdef CONFIG_40x
.globl crit_transfer_to_handler .globl crit_transfer_to_handler
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 */ /* set the stack limit to the current stack */
mfspr r8,SPRN_SPRG_THREAD mfspr r8,SPRN_SPRG_THREAD
lwz r0,KSP_LIMIT(r8) lwz r0,KSP_LIMIT(r8)
......
...@@ -103,6 +103,10 @@ _ENTRY(saved_ksp_limit) ...@@ -103,6 +103,10 @@ _ENTRY(saved_ksp_limit)
.macro CRITICAL_EXCEPTION_PROLOG .macro CRITICAL_EXCEPTION_PROLOG
stw r10,crit_r10@l(0) /* save two registers to work with */ stw r10,crit_r10@l(0) /* save two registers to work with */
stw r11,crit_r11@l(0) 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 */ mfcr r10 /* save CR in r10 for now */
mfspr r11,SPRN_SRR3 /* check whether user or kernel */ mfspr r11,SPRN_SRR3 /* check whether user or kernel */
andi. r11,r11,MSR_PR andi. r11,r11,MSR_PR
...@@ -120,6 +124,10 @@ _ENTRY(saved_ksp_limit) ...@@ -120,6 +124,10 @@ _ENTRY(saved_ksp_limit)
stw r9,GPR9(r11) stw r9,GPR9(r11)
mflr r10 mflr r10
stw r10,_LINK(r11) 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 */ mfspr r12,SPRN_DEAR /* save DEAR and ESR in the frame */
stw r12,_DEAR(r11) /* since they may have had stuff */ stw r12,_DEAR(r11) /* since they may have had stuff */
mfspr r9,SPRN_ESR /* in them at the point where the */ mfspr r9,SPRN_ESR /* in them at the point where the */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment