Commit 296e753f authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman

powerpc/64s/exception: simplify machine check early path

machine_check_handle_early_common can reach machine_check_handle_early
directly now that it runs at the relocated address, so just branch
directly.

The rfi sequence is required to enable MSR[ME] but that step is moved
into a helper function, making the code easier to follow.
Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20190802105709.27696-14-npiggin@gmail.com
parent abd1f4ca
...@@ -1006,16 +1006,13 @@ EXC_COMMON_BEGIN(machine_check_early_common) ...@@ -1006,16 +1006,13 @@ EXC_COMMON_BEGIN(machine_check_early_common)
std r3,_DAR(r1) std r3,_DAR(r1)
std r4,_DSISR(r1) std r4,_DSISR(r1)
mfmsr r11 /* get MSR value */
BEGIN_FTR_SECTION BEGIN_FTR_SECTION
ori r11,r11,MSR_ME /* turn on ME bit */ bl enable_machine_check
END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
ori r11,r11,MSR_RI /* turn on RI bit */ li r10,MSR_RI
LOAD_HANDLER(r12, machine_check_handle_early) mtmsrd r10,1
1: mtspr SPRN_SRR0,r12 b machine_check_handle_early
mtspr SPRN_SRR1,r11
RFI_TO_KERNEL
b . /* prevent speculative execution */
2: 2:
/* Stack overflow. Stay on emergency stack and panic. /* Stack overflow. Stay on emergency stack and panic.
* Keep the ME bit off while panic-ing, so that if we hit * Keep the ME bit off while panic-ing, so that if we hit
...@@ -1026,7 +1023,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) ...@@ -1026,7 +1023,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
LOAD_HANDLER(r12, unrecover_mce) LOAD_HANDLER(r12, unrecover_mce)
li r10,MSR_ME li r10,MSR_ME
andc r11,r11,r10 /* Turn off MSR_ME */ andc r11,r11,r10 /* Turn off MSR_ME */
b 1b mtspr SPRN_SRR0,r12
mtspr SPRN_SRR1,r11
RFI_TO_KERNEL
b . /* prevent speculative execution */ b . /* prevent speculative execution */
EXC_COMMON_BEGIN(machine_check_common) EXC_COMMON_BEGIN(machine_check_common)
...@@ -2269,6 +2268,20 @@ CLOSE_FIXED_SECTION(virt_trampolines); ...@@ -2269,6 +2268,20 @@ CLOSE_FIXED_SECTION(virt_trampolines);
USE_TEXT_SECTION() USE_TEXT_SECTION()
/* MSR[RI] should be clear because this uses SRR[01] */
enable_machine_check:
mflr r0
bcl 20,31,$+4
0: mflr r3
addi r3,r3,(1f - 0b)
mtspr SPRN_SRR0,r3
mfmsr r3
ori r3,r3,MSR_ME
mtspr SPRN_SRR1,r3
RFI_TO_KERNEL
1: mtlr r0
blr
/* /*
* Hash table stuff * Hash table stuff
*/ */
......
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