提交 43e41110 编写于 作者: J Juergen Gross 提交者: Ingo Molnar

xen, x86/entry/64: Add xen NMI trap entry

Instead of trying to execute any NMI via the bare metal's NMI trap
handler use a Xen specific one for PV domains, like we do for e.g.
debug traps. As in a PV domain the NMI is handled via the normal
kernel stack this is the correct thing to do.

This will enable us to get rid of the very fragile and questionable
dependencies between the bare metal NMI handler and Xen assumptions
believed to be broken anyway.
Signed-off-by: NJuergen Gross <jgross@suse.com>
Signed-off-by: NAndy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bpetkov@suse.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/5baf5c0528d58402441550c5770b98e7961e7680.1509609304.git.luto@kernel.orgSigned-off-by: NIngo Molnar <mingo@kernel.org>
上级 c39858de
...@@ -1078,6 +1078,7 @@ idtentry int3 do_int3 has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK ...@@ -1078,6 +1078,7 @@ idtentry int3 do_int3 has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
idtentry stack_segment do_stack_segment has_error_code=1 idtentry stack_segment do_stack_segment has_error_code=1
#ifdef CONFIG_XEN #ifdef CONFIG_XEN
idtentry xennmi do_nmi has_error_code=0
idtentry xendebug do_debug has_error_code=0 idtentry xendebug do_debug has_error_code=0
idtentry xenint3 do_int3 has_error_code=0 idtentry xenint3 do_int3 has_error_code=0
#endif #endif
...@@ -1240,7 +1241,6 @@ ENTRY(error_exit) ...@@ -1240,7 +1241,6 @@ ENTRY(error_exit)
END(error_exit) END(error_exit)
/* Runs on exception stack */ /* Runs on exception stack */
/* XXX: broken on Xen PV */
ENTRY(nmi) ENTRY(nmi)
UNWIND_HINT_IRET_REGS UNWIND_HINT_IRET_REGS
/* /*
......
...@@ -37,9 +37,9 @@ asmlinkage void simd_coprocessor_error(void); ...@@ -37,9 +37,9 @@ asmlinkage void simd_coprocessor_error(void);
#if defined(CONFIG_X86_64) && defined(CONFIG_XEN_PV) #if defined(CONFIG_X86_64) && defined(CONFIG_XEN_PV)
asmlinkage void xen_divide_error(void); asmlinkage void xen_divide_error(void);
asmlinkage void xen_xennmi(void);
asmlinkage void xen_xendebug(void); asmlinkage void xen_xendebug(void);
asmlinkage void xen_xenint3(void); asmlinkage void xen_xenint3(void);
asmlinkage void xen_nmi(void);
asmlinkage void xen_overflow(void); asmlinkage void xen_overflow(void);
asmlinkage void xen_bounds(void); asmlinkage void xen_bounds(void);
asmlinkage void xen_invalid_op(void); asmlinkage void xen_invalid_op(void);
......
...@@ -600,7 +600,7 @@ static struct trap_array_entry trap_array[] = { ...@@ -600,7 +600,7 @@ static struct trap_array_entry trap_array[] = {
#ifdef CONFIG_X86_MCE #ifdef CONFIG_X86_MCE
{ machine_check, xen_machine_check, true }, { machine_check, xen_machine_check, true },
#endif #endif
{ nmi, xen_nmi, true }, { nmi, xen_xennmi, true },
{ overflow, xen_overflow, false }, { overflow, xen_overflow, false },
#ifdef CONFIG_IA32_EMULATION #ifdef CONFIG_IA32_EMULATION
{ entry_INT80_compat, xen_entry_INT80_compat, false }, { entry_INT80_compat, xen_entry_INT80_compat, false },
......
...@@ -29,7 +29,7 @@ xen_pv_trap debug ...@@ -29,7 +29,7 @@ xen_pv_trap debug
xen_pv_trap xendebug xen_pv_trap xendebug
xen_pv_trap int3 xen_pv_trap int3
xen_pv_trap xenint3 xen_pv_trap xenint3
xen_pv_trap nmi xen_pv_trap xennmi
xen_pv_trap overflow xen_pv_trap overflow
xen_pv_trap bounds xen_pv_trap bounds
xen_pv_trap invalid_op xen_pv_trap invalid_op
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册