lkml.org 
[lkml]   [2017]   [Dec]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 044/159] xen, x86/entry/64: Add xen NMI trap entry
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Juergen Gross <jgross@suse.com>

    commit 43e4111086a70c78bedb6ad990bee97f17b27a6e upstream.

    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: Juergen Gross <jgross@suse.com>
    Signed-off-by: Andy 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.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/entry/entry_64.S | 2 +-
    arch/x86/include/asm/traps.h | 2 +-
    arch/x86/xen/enlighten_pv.c | 2 +-
    arch/x86/xen/xen-asm_64.S | 2 +-
    4 files changed, 4 insertions(+), 4 deletions(-)

    --- a/arch/x86/entry/entry_64.S
    +++ b/arch/x86/entry/entry_64.S
    @@ -1079,6 +1079,7 @@ idtentry int3 do_int3 has_error_code
    idtentry stack_segment do_stack_segment has_error_code=1

    #ifdef CONFIG_XEN
    +idtentry xennmi do_nmi has_error_code=0
    idtentry xendebug do_debug has_error_code=0
    idtentry xenint3 do_int3 has_error_code=0
    #endif
    @@ -1241,7 +1242,6 @@ ENTRY(error_exit)
    END(error_exit)

    /* Runs on exception stack */
    -/* XXX: broken on Xen PV */
    ENTRY(nmi)
    UNWIND_HINT_IRET_REGS
    /*
    --- a/arch/x86/include/asm/traps.h
    +++ b/arch/x86/include/asm/traps.h
    @@ -38,9 +38,9 @@ asmlinkage void simd_coprocessor_error(v

    #if defined(CONFIG_X86_64) && defined(CONFIG_XEN_PV)
    asmlinkage void xen_divide_error(void);
    +asmlinkage void xen_xennmi(void);
    asmlinkage void xen_xendebug(void);
    asmlinkage void xen_xenint3(void);
    -asmlinkage void xen_nmi(void);
    asmlinkage void xen_overflow(void);
    asmlinkage void xen_bounds(void);
    asmlinkage void xen_invalid_op(void);
    --- a/arch/x86/xen/enlighten_pv.c
    +++ b/arch/x86/xen/enlighten_pv.c
    @@ -601,7 +601,7 @@ static struct trap_array_entry trap_arra
    #ifdef CONFIG_X86_MCE
    { machine_check, xen_machine_check, true },
    #endif
    - { nmi, xen_nmi, true },
    + { nmi, xen_xennmi, true },
    { overflow, xen_overflow, false },
    #ifdef CONFIG_IA32_EMULATION
    { entry_INT80_compat, xen_entry_INT80_compat, false },
    --- a/arch/x86/xen/xen-asm_64.S
    +++ b/arch/x86/xen/xen-asm_64.S
    @@ -30,7 +30,7 @@ xen_pv_trap debug
    xen_pv_trap xendebug
    xen_pv_trap int3
    xen_pv_trap xenint3
    -xen_pv_trap nmi
    +xen_pv_trap xennmi
    xen_pv_trap overflow
    xen_pv_trap bounds
    xen_pv_trap invalid_op

    \
     
     \ /
      Last update: 2017-12-22 10:53    [W:4.755 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site