mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-19 20:34:20 +08:00
powerpc/64s: Add exception macro that does not enable RI
Subsequent patches will add more non-RI variant exceptions, so create a macro for it rather than open-code it. This does not change generated instructions. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
6e83985b0f
commit
83a980f7f4
@ -200,6 +200,21 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
||||
#define EXCEPTION_PROLOG_PSERIES_1(label, h) \
|
||||
__EXCEPTION_PROLOG_PSERIES_1(label, h)
|
||||
|
||||
/* _NORI variant keeps MSR_RI clear */
|
||||
#define __EXCEPTION_PROLOG_PSERIES_1_NORI(label, h) \
|
||||
ld r10,PACAKMSR(r13); /* get MSR value for kernel */ \
|
||||
xori r10,r10,MSR_RI; /* Clear MSR_RI */ \
|
||||
mfspr r11,SPRN_##h##SRR0; /* save SRR0 */ \
|
||||
LOAD_HANDLER(r12,label) \
|
||||
mtspr SPRN_##h##SRR0,r12; \
|
||||
mfspr r12,SPRN_##h##SRR1; /* and SRR1 */ \
|
||||
mtspr SPRN_##h##SRR1,r10; \
|
||||
h##rfid; \
|
||||
b . /* prevent speculative execution */
|
||||
|
||||
#define EXCEPTION_PROLOG_PSERIES_1_NORI(label, h) \
|
||||
__EXCEPTION_PROLOG_PSERIES_1_NORI(label, h)
|
||||
|
||||
#define EXCEPTION_PROLOG_PSERIES(area, label, h, extra, vec) \
|
||||
EXCEPTION_PROLOG_0(area); \
|
||||
EXCEPTION_PROLOG_1(area, extra, vec); \
|
||||
|
@ -240,20 +240,11 @@ machine_check_fwnmi:
|
||||
machine_check_pSeries_0:
|
||||
EXCEPTION_PROLOG_1(PACA_EXMC, KVMTEST_PR, 0x200)
|
||||
/*
|
||||
* The following is essentially EXCEPTION_PROLOG_PSERIES_1 with the
|
||||
* difference that MSR_RI is not enabled, because PACA_EXMC is being
|
||||
* used, so nested machine check corrupts it. machine_check_common
|
||||
* enables MSR_RI.
|
||||
* MSR_RI is not enabled, because PACA_EXMC is being used, so a
|
||||
* nested machine check corrupts it. machine_check_common enables
|
||||
* MSR_RI.
|
||||
*/
|
||||
ld r10,PACAKMSR(r13)
|
||||
xori r10,r10,MSR_RI
|
||||
mfspr r11,SPRN_SRR0
|
||||
LOAD_HANDLER(r12, machine_check_common)
|
||||
mtspr SPRN_SRR0,r12
|
||||
mfspr r12,SPRN_SRR1
|
||||
mtspr SPRN_SRR1,r10
|
||||
rfid
|
||||
b . /* prevent speculative execution */
|
||||
EXCEPTION_PROLOG_PSERIES_1_NORI(machine_check_common, EXC_STD)
|
||||
|
||||
TRAMP_KVM_SKIP(PACA_EXMC, 0x200)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user