mirror of https://gitee.com/openkylin/linux.git
powerpc/64s: Prepare to handle data interrupts vs d-side MCE reentrancy
A subsequent fix for data interrupts (those that set DAR / DSISR) requires some interrupt macros to be open-coded, and also requires the 0x300 interrupt handler to be moved out-of-line. This patch does that without changing behaviour, which makes the later fix a smaller change. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
cbf2ba952a
commit
e779fc9364
|
@ -574,8 +574,23 @@ EXC_COMMON_BEGIN(mce_return)
|
|||
RFI_TO_KERNEL
|
||||
b .
|
||||
|
||||
EXC_REAL(data_access, 0x300, 0x80)
|
||||
EXC_VIRT(data_access, 0x4300, 0x80, 0x300)
|
||||
EXC_REAL_BEGIN(data_access, 0x300, 0x80)
|
||||
SET_SCRATCH0(r13) /* save r13 */
|
||||
EXCEPTION_PROLOG_0(PACA_EXGEN)
|
||||
b tramp_real_data_access
|
||||
EXC_REAL_END(data_access, 0x300, 0x80)
|
||||
|
||||
TRAMP_REAL_BEGIN(tramp_real_data_access)
|
||||
EXCEPTION_PROLOG_1(PACA_EXGEN, KVMTEST_PR, 0x300)
|
||||
EXCEPTION_PROLOG_2(data_access_common, EXC_STD)
|
||||
|
||||
EXC_VIRT_BEGIN(data_access, 0x4300, 0x80)
|
||||
SET_SCRATCH0(r13) /* save r13 */
|
||||
EXCEPTION_PROLOG_0(PACA_EXGEN)
|
||||
EXCEPTION_PROLOG_1(PACA_EXGEN, NOTEST, 0x300)
|
||||
EXCEPTION_PROLOG_2_RELON(data_access_common, EXC_STD)
|
||||
EXC_VIRT_END(data_access, 0x4300, 0x80)
|
||||
|
||||
TRAMP_KVM_SKIP(PACA_EXGEN, 0x300)
|
||||
|
||||
EXC_COMMON_BEGIN(data_access_common)
|
||||
|
@ -604,11 +619,20 @@ ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_TYPE_RADIX)
|
|||
|
||||
|
||||
EXC_REAL_BEGIN(data_access_slb, 0x380, 0x80)
|
||||
EXCEPTION_PROLOG(PACA_EXSLB, data_access_slb_common, EXC_STD, KVMTEST_PR, 0x380);
|
||||
SET_SCRATCH0(r13) /* save r13 */
|
||||
EXCEPTION_PROLOG_0(PACA_EXSLB)
|
||||
b tramp_real_data_access_slb
|
||||
EXC_REAL_END(data_access_slb, 0x380, 0x80)
|
||||
|
||||
TRAMP_REAL_BEGIN(tramp_real_data_access_slb)
|
||||
EXCEPTION_PROLOG_1(PACA_EXSLB, KVMTEST_PR, 0x380)
|
||||
EXCEPTION_PROLOG_2(data_access_slb_common, EXC_STD)
|
||||
|
||||
EXC_VIRT_BEGIN(data_access_slb, 0x4380, 0x80)
|
||||
EXCEPTION_RELON_PROLOG(PACA_EXSLB, data_access_slb_common, EXC_STD, NOTEST, 0x380);
|
||||
SET_SCRATCH0(r13) /* save r13 */
|
||||
EXCEPTION_PROLOG_0(PACA_EXSLB)
|
||||
EXCEPTION_PROLOG_1(PACA_EXSLB, NOTEST, 0x380)
|
||||
EXCEPTION_PROLOG_2_RELON(data_access_slb_common, EXC_STD)
|
||||
EXC_VIRT_END(data_access_slb, 0x4380, 0x80)
|
||||
|
||||
TRAMP_KVM_SKIP(PACA_EXSLB, 0x380)
|
||||
|
@ -711,8 +735,20 @@ TRAMP_KVM_HV(PACA_EXGEN, 0x500)
|
|||
EXC_COMMON_ASYNC(hardware_interrupt_common, 0x500, do_IRQ)
|
||||
|
||||
|
||||
EXC_REAL(alignment, 0x600, 0x100)
|
||||
EXC_VIRT(alignment, 0x4600, 0x100, 0x600)
|
||||
EXC_REAL_BEGIN(alignment, 0x600, 0x100)
|
||||
SET_SCRATCH0(r13) /* save r13 */
|
||||
EXCEPTION_PROLOG_0(PACA_EXGEN)
|
||||
EXCEPTION_PROLOG_1(PACA_EXGEN, KVMTEST_PR, 0x600)
|
||||
EXCEPTION_PROLOG_2(alignment_common, EXC_STD)
|
||||
EXC_REAL_END(alignment, 0x600, 0x100)
|
||||
|
||||
EXC_VIRT_BEGIN(alignment, 0x4600, 0x100)
|
||||
SET_SCRATCH0(r13) /* save r13 */
|
||||
EXCEPTION_PROLOG_0(PACA_EXGEN)
|
||||
EXCEPTION_PROLOG_1(PACA_EXGEN, NOTEST, 0x600)
|
||||
EXCEPTION_PROLOG_2_RELON(alignment_common, EXC_STD)
|
||||
EXC_VIRT_END(alignment, 0x4600, 0x100)
|
||||
|
||||
TRAMP_KVM(PACA_EXGEN, 0x600)
|
||||
EXC_COMMON_BEGIN(alignment_common)
|
||||
mfspr r10,SPRN_DAR
|
||||
|
|
Loading…
Reference in New Issue