x86/xen: Use specific Xen pv interrupt entry for DF
authorJuergen Gross <jgross@suse.com>
Wed, 20 Jan 2021 13:55:43 +0000 (14:55 +0100)
committerBorislav Petkov <bp@suse.de>
Wed, 10 Feb 2021 11:13:40 +0000 (12:13 +0100)
Xen PV guests don't use IST. For double fault interrupts, switch to
the same model as NMI.

Correct a typo in a comment while copying it.

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-4-jgross@suse.com
arch/x86/include/asm/idtentry.h
arch/x86/xen/enlighten_pv.c
arch/x86/xen/xen-asm.S

index 616909ea258d569dc2c3e0a1091f1692dcd1ddc0..41e2e2e1b439986f672b754490c33011e05efe9a 100644 (file)
@@ -608,6 +608,9 @@ DECLARE_IDTENTRY_RAW(X86_TRAP_DB,   xenpv_exc_debug);
 
 /* #DF */
 DECLARE_IDTENTRY_DF(X86_TRAP_DF,       exc_double_fault);
+#ifdef CONFIG_XEN_PV
+DECLARE_IDTENTRY_RAW_ERRORCODE(X86_TRAP_DF,    xenpv_exc_double_fault);
+#endif
 
 /* #VC */
 #ifdef CONFIG_AMD_MEM_ENCRYPT
index 9db1d31bd59febffc255e49a9ba01f46a4e612b0..1fec2ee7a4dd0e6e513d94b24af3d4df498a6c29 100644 (file)
@@ -567,10 +567,16 @@ void noist_exc_debug(struct pt_regs *regs);
 
 DEFINE_IDTENTRY_RAW(xenpv_exc_nmi)
 {
-       /* On Xen PV, NMI doesn't use IST.  The C part is the sane as native. */
+       /* On Xen PV, NMI doesn't use IST.  The C part is the same as native. */
        exc_nmi(regs);
 }
 
+DEFINE_IDTENTRY_RAW_ERRORCODE(xenpv_exc_double_fault)
+{
+       /* On Xen PV, DF doesn't use IST.  The C part is the same as native. */
+       exc_double_fault(regs, error_code);
+}
+
 DEFINE_IDTENTRY_RAW(xenpv_exc_debug)
 {
        /*
@@ -622,7 +628,7 @@ struct trap_array_entry {
 
 static struct trap_array_entry trap_array[] = {
        TRAP_ENTRY_REDIR(exc_debug,                     true  ),
-       TRAP_ENTRY(exc_double_fault,                    true  ),
+       TRAP_ENTRY_REDIR(exc_double_fault,              true  ),
 #ifdef CONFIG_X86_MCE
        TRAP_ENTRY_REDIR(exc_machine_check,             true  ),
 #endif
index cd330ce47b8227680827952b0d0cd0f2477c0697..eac9dac3656ab88e34b9a67868da9e9c8224e4e2 100644 (file)
@@ -161,7 +161,7 @@ xen_pv_trap asm_exc_overflow
 xen_pv_trap asm_exc_bounds
 xen_pv_trap asm_exc_invalid_op
 xen_pv_trap asm_exc_device_not_available
-xen_pv_trap asm_exc_double_fault
+xen_pv_trap asm_xenpv_exc_double_fault
 xen_pv_trap asm_exc_coproc_segment_overrun
 xen_pv_trap asm_exc_invalid_tss
 xen_pv_trap asm_exc_segment_not_present