forked from Minki/linux
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: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/1286b3e51b07727c6b4b05f2df9af3f9b1717fb5.1576916812.git.christophe.leroy@c-s.fr
This commit is contained in:
parent
5ae8fabc64
commit
c9c84fd945
@ -339,10 +339,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_HPTE_TABLE)
|
||||
DO_KVM 0x600
|
||||
Alignment:
|
||||
EXCEPTION_PROLOG
|
||||
mfspr r4,SPRN_DAR
|
||||
stw r4,_DAR(r11)
|
||||
mfspr r5,SPRN_DSISR
|
||||
stw r5,_DSISR(r11)
|
||||
save_dar_dsisr_on_stack r4, r5, r11
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
EXC_XFER_STD(0x600, alignment_exception)
|
||||
|
||||
|
@ -144,6 +144,17 @@
|
||||
RFI /* jump to handler, enable MMU */
|
||||
.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),
|
||||
* r11, r12 (SRR0), and r9 (SRR1).
|
||||
|
@ -128,12 +128,9 @@ instruction_counter:
|
||||
. = 0x200
|
||||
MachineCheck:
|
||||
EXCEPTION_PROLOG
|
||||
mfspr r4,SPRN_DAR
|
||||
stw r4,_DAR(r11)
|
||||
li r5,RPN_PATTERN
|
||||
mtspr SPRN_DAR,r5 /* Tag DAR, to be used in DTLB Error */
|
||||
mfspr r5,SPRN_DSISR
|
||||
stw r5,_DSISR(r11)
|
||||
save_dar_dsisr_on_stack r4, r5, r11
|
||||
li r6, RPN_PATTERN
|
||||
mtspr SPRN_DAR, r6 /* Tag DAR, to be used in DTLB Error */
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
EXC_XFER_STD(0x200, machine_check_exception)
|
||||
|
||||
@ -156,12 +153,9 @@ InstructionAccess:
|
||||
. = 0x600
|
||||
Alignment:
|
||||
EXCEPTION_PROLOG
|
||||
mfspr r4,SPRN_DAR
|
||||
stw r4,_DAR(r11)
|
||||
li r5,RPN_PATTERN
|
||||
mtspr SPRN_DAR,r5 /* Tag DAR, to be used in DTLB Error */
|
||||
mfspr r5,SPRN_DSISR
|
||||
stw r5,_DSISR(r11)
|
||||
save_dar_dsisr_on_stack r4, r5, r11
|
||||
li r6, RPN_PATTERN
|
||||
mtspr SPRN_DAR, r6 /* Tag DAR, to be used in DTLB Error */
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
EXC_XFER_STD(0x600, alignment_exception)
|
||||
|
||||
@ -502,10 +496,7 @@ DataTLBError:
|
||||
DARFixed:/* Return from dcbx instruction bug workaround */
|
||||
EXCEPTION_PROLOG_1
|
||||
EXCEPTION_PROLOG_2
|
||||
mfspr r5,SPRN_DSISR
|
||||
stw r5,_DSISR(r11)
|
||||
mfspr r4,SPRN_DAR
|
||||
stw r4, _DAR(r11)
|
||||
get_and_save_dar_dsisr_on_stack r4, r5, r11
|
||||
andis. r10,r5,DSISR_NOHPTE@h
|
||||
beq+ .Ldtlbie
|
||||
tlbie r4
|
||||
|
Loading…
Reference in New Issue
Block a user