Skip to content

Commit a74599a

Browse files
npigginozbenh
authored andcommitted
powerpc/pseries: PACA save area fix for MCE vs MCE
MCE must not enable MSR_RI until PACA_EXMC is no longer being used. Signed-off-by: Benjamin Herrenschmidt <[email protected]>
1 parent 3f3b5dc commit a74599a

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

arch/powerpc/kernel/exceptions-64s.S

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,23 @@ machine_check_fwnmi:
485485
EXCEPTION_PROLOG_0(PACA_EXMC)
486486
machine_check_pSeries_0:
487487
EXCEPTION_PROLOG_1(PACA_EXMC, KVMTEST, 0x200)
488-
EXCEPTION_PROLOG_PSERIES_1(machine_check_common, EXC_STD)
488+
/*
489+
* The following is essentially EXCEPTION_PROLOG_PSERIES_1 with the
490+
* difference that MSR_RI is not enabled, because PACA_EXMC is being
491+
* used, so nested machine check corrupts it. machine_check_common
492+
* enables MSR_RI.
493+
*/
494+
ld r12,PACAKBASE(r13)
495+
ld r10,PACAKMSR(r13)
496+
xori r10,r10,MSR_RI
497+
mfspr r11,SPRN_SRR0
498+
LOAD_HANDLER(r12, machine_check_common)
499+
mtspr SPRN_SRR0,r12
500+
mfspr r12,SPRN_SRR1
501+
mtspr SPRN_SRR1,r10
502+
rfid
503+
b . /* prevent speculative execution */
504+
489505
KVM_HANDLER_SKIP(PACA_EXMC, EXC_STD, 0x200)
490506
KVM_HANDLER_SKIP(PACA_EXGEN, EXC_STD, 0x300)
491507
KVM_HANDLER_SKIP(PACA_EXSLB, EXC_STD, 0x380)
@@ -977,6 +993,9 @@ machine_check_common:
977993
RECONCILE_IRQ_STATE(r10, r11)
978994
ld r3,PACA_EXMC+EX_DAR(r13)
979995
lwz r4,PACA_EXMC+EX_DSISR(r13)
996+
/* Enable MSR_RI when finished with PACA_EXMC */
997+
li r10,MSR_RI
998+
mtmsrd r10,1
980999
std r3,_DAR(r1)
9811000
std r4,_DSISR(r1)
9821001
bl save_nvgprs

0 commit comments

Comments
 (0)