mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-25 00:39:32 +07:00
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: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20190802105709.27696-14-npiggin@gmail.com
This commit is contained in:
parent
abd1f4ca2b
commit
296e753fb4
@ -1006,16 +1006,13 @@ EXC_COMMON_BEGIN(machine_check_early_common)
|
||||
std r3,_DAR(r1)
|
||||
std r4,_DSISR(r1)
|
||||
|
||||
mfmsr r11 /* get MSR value */
|
||||
BEGIN_FTR_SECTION
|
||||
ori r11,r11,MSR_ME /* turn on ME bit */
|
||||
bl enable_machine_check
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
|
||||
ori r11,r11,MSR_RI /* turn on RI bit */
|
||||
LOAD_HANDLER(r12, machine_check_handle_early)
|
||||
1: mtspr SPRN_SRR0,r12
|
||||
mtspr SPRN_SRR1,r11
|
||||
RFI_TO_KERNEL
|
||||
b . /* prevent speculative execution */
|
||||
li r10,MSR_RI
|
||||
mtmsrd r10,1
|
||||
b machine_check_handle_early
|
||||
|
||||
2:
|
||||
/* Stack overflow. Stay on emergency stack and panic.
|
||||
* Keep the ME bit off while panic-ing, so that if we hit
|
||||
@ -1026,7 +1023,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
|
||||
LOAD_HANDLER(r12, unrecover_mce)
|
||||
li r10,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 */
|
||||
|
||||
EXC_COMMON_BEGIN(machine_check_common)
|
||||
@ -2269,6 +2268,20 @@ CLOSE_FIXED_SECTION(virt_trampolines);
|
||||
|
||||
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
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user