diff options
author | Christophe Leroy <christophe.leroy@csgroup.eu> | 2021-03-12 15:50:38 +0300 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2021-03-29 05:22:08 +0300 |
commit | 719e7e212c7e637a795f130dbdd5db6c291e463f (patch) | |
tree | fb1aec6ca4bfe5d6e3481f30f749f20e67f30199 /arch/powerpc/kernel/head_8xx.S | |
parent | af6f2ce84b2f666762f75f085a7e5d6514743a84 (diff) | |
download | linux-719e7e212c7e637a795f130dbdd5db6c291e463f.tar.xz |
powerpc/32: Save trap number on stack in exception prolog
Saving the trap number into the stack goes into
the exception prolog, as EXC_XFER_xxx will soon disappear.
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/2ac7a0c9cde2ec2b23cd79e3a54cfedd816a91ae.1615552867.git.christophe.leroy@csgroup.eu
Diffstat (limited to 'arch/powerpc/kernel/head_8xx.S')
-rw-r--r-- | arch/powerpc/kernel/head_8xx.S | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/arch/powerpc/kernel/head_8xx.S b/arch/powerpc/kernel/head_8xx.S index 4078d0dc2f18..c48de97f42fc 100644 --- a/arch/powerpc/kernel/head_8xx.S +++ b/arch/powerpc/kernel/head_8xx.S @@ -122,7 +122,7 @@ instruction_counter: /* Machine check */ START_EXCEPTION(0x200, MachineCheck) - EXCEPTION_PROLOG MachineCheck handle_dar_dsisr=1 + EXCEPTION_PROLOG 0x200 MachineCheck handle_dar_dsisr=1 EXC_XFER_STD(0x200, machine_check_exception) /* External interrupt */ @@ -130,7 +130,7 @@ instruction_counter: /* Alignment exception */ START_EXCEPTION(0x600, Alignment) - EXCEPTION_PROLOG Alignment handle_dar_dsisr=1 + EXCEPTION_PROLOG 0x600 Alignment handle_dar_dsisr=1 EXC_XFER_STD(0x600, alignment_exception) /* Program check exception */ @@ -292,12 +292,12 @@ instruction_counter: * addresses. There is nothing to do but handle a big time error fault. */ START_EXCEPTION(0x1300, InstructionTLBError) - EXCEPTION_PROLOG InstructionTLBError + /* 0x400 is InstructionAccess exception, needed by bad_page_fault() */ + EXCEPTION_PROLOG 0x400 InstructionTLBError andis. r5,r9,DSISR_SRR1_MATCH_32S@h /* Filter relevant SRR1 bits */ andis. r10,r9,SRR1_ISI_NOPT@h beq+ .Litlbie tlbie r12 - /* 0x400 is InstructionAccess exception, needed by bad_page_fault() */ .Litlbie: stw r12, _DAR(r11) stw r5, _DSISR(r11) @@ -314,14 +314,14 @@ instruction_counter: beq- cr1, FixupDAR /* must be a buggy dcbX, icbi insn. */ DARFixed:/* Return from dcbx instruction bug workaround */ EXCEPTION_PROLOG_1 - EXCEPTION_PROLOG_2 DataTLBError handle_dar_dsisr=1 + /* 0x300 is DataAccess exception, needed by bad_page_fault() */ + EXCEPTION_PROLOG_2 0x300 DataTLBError handle_dar_dsisr=1 lwz r4, _DAR(r11) lwz r5, _DSISR(r11) andis. r10,r5,DSISR_NOHPTE@h beq+ .Ldtlbie tlbie r4 .Ldtlbie: - /* 0x300 is DataAccess exception, needed by bad_page_fault() */ EXC_XFER_LITE(0x300, do_page_fault) #ifdef CONFIG_VMAP_STACK @@ -345,7 +345,7 @@ DARFixed:/* Return from dcbx instruction bug workaround */ rfi 1: EXCEPTION_PROLOG_1 - EXCEPTION_PROLOG_2 DataBreakpoint handle_dar_dsisr=1 + EXCEPTION_PROLOG_2 0x1c00 DataBreakpoint handle_dar_dsisr=1 mfspr r4,SPRN_BAR stw r4,_DAR(r11) EXC_XFER_STD(0x1c00, do_break) |