powerpc: Add book3s hypervisor doorbell exception vectors
Directed Hypervisor Doorbell Interrupts come in at 0xe80 (or 0xc000000000004e80 if relocation on exceptions is enabled), so add exception vectors at these locations. If doorbell support is not compiled in we handle it as an unknown_exception. Signed-off-by: Ian Munsie <imunsie@au1.ibm.com> Tested-by: Michael Neuling <mikey@neuling.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
Родитель
42d02b81f2
Коммит
655bb3f4e8
|
@ -305,6 +305,8 @@ label##_relon_hv: \
|
|||
#define SOFTEN_VALUE_0x502 PACA_IRQ_EE
|
||||
#define SOFTEN_VALUE_0x900 PACA_IRQ_DEC
|
||||
#define SOFTEN_VALUE_0x982 PACA_IRQ_DEC
|
||||
#define SOFTEN_VALUE_0xe80 PACA_IRQ_DBELL
|
||||
#define SOFTEN_VALUE_0xe82 PACA_IRQ_DBELL
|
||||
|
||||
#define __SOFTEN_TEST(h, vec) \
|
||||
lbz r10,PACASOFTIRQEN(r13); \
|
||||
|
|
|
@ -293,6 +293,8 @@ hv_exception_trampoline:
|
|||
b hmi_exception_hv
|
||||
. = 0xe60
|
||||
b hmi_exception_hv
|
||||
. = 0xe80
|
||||
b h_doorbell_hv
|
||||
|
||||
/* We need to deal with the Altivec unavailable exception
|
||||
* here which is at 0xf20, thus in the middle of the
|
||||
|
@ -514,6 +516,8 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_206)
|
|||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe42)
|
||||
STD_EXCEPTION_HV(., 0xe62, hmi_exception) /* need to flush cache ? */
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe62)
|
||||
MASKABLE_EXCEPTION_HV(., 0xe82, h_doorbell)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe82)
|
||||
|
||||
/* moved from 0xf00 */
|
||||
STD_EXCEPTION_PSERIES(., 0xf00, performance_monitor)
|
||||
|
@ -657,6 +661,11 @@ machine_check_common:
|
|||
STD_EXCEPTION_COMMON(0xe00, trap_0e, .unknown_exception)
|
||||
STD_EXCEPTION_COMMON(0xe40, emulation_assist, .program_check_exception)
|
||||
STD_EXCEPTION_COMMON(0xe60, hmi_exception, .unknown_exception)
|
||||
#ifdef CONFIG_PPC_DOORBELL
|
||||
STD_EXCEPTION_COMMON_ASYNC(0xe80, h_doorbell, .doorbell_exception)
|
||||
#else
|
||||
STD_EXCEPTION_COMMON_ASYNC(0xe80, h_doorbell, .unknown_exception)
|
||||
#endif
|
||||
STD_EXCEPTION_COMMON_ASYNC(0xf00, performance_monitor, .performance_monitor_exception)
|
||||
STD_EXCEPTION_COMMON(0x1300, instruction_breakpoint, .instruction_breakpoint_exception)
|
||||
STD_EXCEPTION_COMMON(0x1502, denorm, .unknown_exception)
|
||||
|
@ -773,9 +782,8 @@ system_call_relon_pSeries:
|
|||
. = 0x4e60
|
||||
b hmi_exception_relon_hv
|
||||
|
||||
/* For when we support the doorbell interrupt:
|
||||
STD_RELON_EXCEPTION_HYPERVISOR(0x4e80, 0xe80, doorbell_hyper)
|
||||
*/
|
||||
. = 0x4e80
|
||||
b h_doorbell_relon_hv
|
||||
|
||||
performance_monitor_relon_pSeries_1:
|
||||
. = 0x4f00
|
||||
|
@ -1355,6 +1363,8 @@ _GLOBAL(do_stab_bolted)
|
|||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe40)
|
||||
STD_RELON_EXCEPTION_HV(., 0xe60, hmi_exception)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe60)
|
||||
MASKABLE_RELON_EXCEPTION_HV(., 0xe80, h_doorbell)
|
||||
KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe80)
|
||||
|
||||
STD_RELON_EXCEPTION_PSERIES(., 0xf00, performance_monitor)
|
||||
STD_RELON_EXCEPTION_PSERIES(., 0xf20, altivec_unavailable)
|
||||
|
|
Загрузка…
Ссылка в новой задаче