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

powerpc/32: add a macro to get and/or save DAR and DSISR on stack.

Refactor reading and saving of DAR and DSISR in exception vectors.

This will ease the implementation of VMAP stack.
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/1286b3e51b07727c6b4b05f2df9af3f9b1717fb5.1576916812.git.christophe.leroy@c-s.fr
parent 5ae8fabc
...@@ -339,10 +339,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_HPTE_TABLE) ...@@ -339,10 +339,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_HPTE_TABLE)
DO_KVM 0x600 DO_KVM 0x600
Alignment: Alignment:
EXCEPTION_PROLOG EXCEPTION_PROLOG
mfspr r4,SPRN_DAR save_dar_dsisr_on_stack r4, r5, r11
stw r4,_DAR(r11)
mfspr r5,SPRN_DSISR
stw r5,_DSISR(r11)
addi r3,r1,STACK_FRAME_OVERHEAD addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_STD(0x600, alignment_exception) EXC_XFER_STD(0x600, alignment_exception)
......
...@@ -144,6 +144,17 @@ ...@@ -144,6 +144,17 @@
RFI /* jump to handler, enable MMU */ RFI /* jump to handler, enable MMU */
.endm .endm
.macro save_dar_dsisr_on_stack reg1, reg2, sp
mfspr \reg1, SPRN_DAR
mfspr \reg2, SPRN_DSISR
stw \reg1, _DAR(\sp)
stw \reg2, _DSISR(\sp)
.endm
.macro get_and_save_dar_dsisr_on_stack reg1, reg2, sp
save_dar_dsisr_on_stack \reg1, \reg2, \sp
.endm
/* /*
* Note: code which follows this uses cr0.eq (set if from kernel), * Note: code which follows this uses cr0.eq (set if from kernel),
* r11, r12 (SRR0), and r9 (SRR1). * r11, r12 (SRR0), and r9 (SRR1).
......
...@@ -128,12 +128,9 @@ instruction_counter: ...@@ -128,12 +128,9 @@ instruction_counter:
. = 0x200 . = 0x200
MachineCheck: MachineCheck:
EXCEPTION_PROLOG EXCEPTION_PROLOG
mfspr r4,SPRN_DAR save_dar_dsisr_on_stack r4, r5, r11
stw r4,_DAR(r11) li r6, RPN_PATTERN
li r5,RPN_PATTERN mtspr SPRN_DAR, r6 /* Tag DAR, to be used in DTLB Error */
mtspr SPRN_DAR,r5 /* Tag DAR, to be used in DTLB Error */
mfspr r5,SPRN_DSISR
stw r5,_DSISR(r11)
addi r3,r1,STACK_FRAME_OVERHEAD addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_STD(0x200, machine_check_exception) EXC_XFER_STD(0x200, machine_check_exception)
...@@ -156,12 +153,9 @@ InstructionAccess: ...@@ -156,12 +153,9 @@ InstructionAccess:
. = 0x600 . = 0x600
Alignment: Alignment:
EXCEPTION_PROLOG EXCEPTION_PROLOG
mfspr r4,SPRN_DAR save_dar_dsisr_on_stack r4, r5, r11
stw r4,_DAR(r11) li r6, RPN_PATTERN
li r5,RPN_PATTERN mtspr SPRN_DAR, r6 /* Tag DAR, to be used in DTLB Error */
mtspr SPRN_DAR,r5 /* Tag DAR, to be used in DTLB Error */
mfspr r5,SPRN_DSISR
stw r5,_DSISR(r11)
addi r3,r1,STACK_FRAME_OVERHEAD addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_STD(0x600, alignment_exception) EXC_XFER_STD(0x600, alignment_exception)
...@@ -502,10 +496,7 @@ DataTLBError: ...@@ -502,10 +496,7 @@ DataTLBError:
DARFixed:/* Return from dcbx instruction bug workaround */ DARFixed:/* Return from dcbx instruction bug workaround */
EXCEPTION_PROLOG_1 EXCEPTION_PROLOG_1
EXCEPTION_PROLOG_2 EXCEPTION_PROLOG_2
mfspr r5,SPRN_DSISR get_and_save_dar_dsisr_on_stack r4, r5, r11
stw r5,_DSISR(r11)
mfspr r4,SPRN_DAR
stw r4, _DAR(r11)
andis. r10,r5,DSISR_NOHPTE@h andis. r10,r5,DSISR_NOHPTE@h
beq+ .Ldtlbie beq+ .Ldtlbie
tlbie r4 tlbie r4
......
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