x86/xen: Use specific Xen pv interrupt entry for MCE
Xen PV guests don't use IST. For machine check interrupts, switch to the same model as debug interrupts. Signed-off-by: Juergen Gross <jgross@suse.com> Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/20210120135555.32594-3-jgross@suse.com
This commit is contained in:
parent
92bf22614b
commit
c3d7fa6684
@ -585,6 +585,9 @@ DECLARE_IDTENTRY_MCE(X86_TRAP_MC, exc_machine_check);
|
||||
#else
|
||||
DECLARE_IDTENTRY_RAW(X86_TRAP_MC, exc_machine_check);
|
||||
#endif
|
||||
#ifdef CONFIG_XEN_PV
|
||||
DECLARE_IDTENTRY_RAW(X86_TRAP_MC, xenpv_exc_machine_check);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* NMI */
|
||||
|
@ -590,6 +590,20 @@ DEFINE_IDTENTRY_RAW(exc_xen_unknown_trap)
|
||||
BUG();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_MCE
|
||||
DEFINE_IDTENTRY_RAW(xenpv_exc_machine_check)
|
||||
{
|
||||
/*
|
||||
* There's no IST on Xen PV, but we still need to dispatch
|
||||
* to the correct handler.
|
||||
*/
|
||||
if (user_mode(regs))
|
||||
noist_exc_machine_check(regs);
|
||||
else
|
||||
exc_machine_check(regs);
|
||||
}
|
||||
#endif
|
||||
|
||||
struct trap_array_entry {
|
||||
void (*orig)(void);
|
||||
void (*xen)(void);
|
||||
@ -610,7 +624,7 @@ static struct trap_array_entry trap_array[] = {
|
||||
TRAP_ENTRY_REDIR(exc_debug, true ),
|
||||
TRAP_ENTRY(exc_double_fault, true ),
|
||||
#ifdef CONFIG_X86_MCE
|
||||
TRAP_ENTRY(exc_machine_check, true ),
|
||||
TRAP_ENTRY_REDIR(exc_machine_check, true ),
|
||||
#endif
|
||||
TRAP_ENTRY_REDIR(exc_nmi, true ),
|
||||
TRAP_ENTRY(exc_int3, false ),
|
||||
|
@ -172,7 +172,7 @@ xen_pv_trap asm_exc_spurious_interrupt_bug
|
||||
xen_pv_trap asm_exc_coprocessor_error
|
||||
xen_pv_trap asm_exc_alignment_check
|
||||
#ifdef CONFIG_X86_MCE
|
||||
xen_pv_trap asm_exc_machine_check
|
||||
xen_pv_trap asm_xenpv_exc_machine_check
|
||||
#endif /* CONFIG_X86_MCE */
|
||||
xen_pv_trap asm_exc_simd_coprocessor_error
|
||||
#ifdef CONFIG_IA32_EMULATION
|
||||
|
Loading…
Reference in New Issue
Block a user