powerpc/64s/exception: machine check use correct cfar for late handler
Bare metal machine checks run an "early" handler in real mode before running the main handler which reports the event. The main handler runs exactly as a normal interrupt handler, after the "windup" which sets registers back as they were at interrupt entry. CFAR does not get restored by the windup code, so that will be wrong when the handler is run. Restore the CFAR to the saved value before running the late handler. 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-8-npiggin@gmail.com
This commit is contained in:
parent
fa2760eca5
commit
0b66370c61
|
@ -1186,6 +1186,10 @@ FTR_SECTION_ELSE
|
||||||
ALT_FTR_SECTION_END_IFSET(CPU_FTR_HVMODE)
|
ALT_FTR_SECTION_END_IFSET(CPU_FTR_HVMODE)
|
||||||
9:
|
9:
|
||||||
/* Deliver the machine check to host kernel in V mode. */
|
/* Deliver the machine check to host kernel in V mode. */
|
||||||
|
BEGIN_FTR_SECTION
|
||||||
|
ld r10,ORIG_GPR3(r1)
|
||||||
|
mtspr SPRN_CFAR,r10
|
||||||
|
END_FTR_SECTION_IFSET(CPU_FTR_CFAR)
|
||||||
MACHINE_CHECK_HANDLER_WINDUP
|
MACHINE_CHECK_HANDLER_WINDUP
|
||||||
EXCEPTION_PROLOG_0 PACA_EXMC
|
EXCEPTION_PROLOG_0 PACA_EXMC
|
||||||
EXCEPTION_PROLOG_1 EXC_STD, PACA_EXMC, 1, 0x200, 1, 1, 0
|
EXCEPTION_PROLOG_1 EXC_STD, PACA_EXMC, 1, 0x200, 1, 1, 0
|
||||||
|
|
Loading…
Reference in New Issue