+4
-2
arch/x86/kernel/cpu/mce/core.c
+4
-2
arch/x86/kernel/cpu/mce/core.c
···
1904
1905
static __always_inline void exc_machine_check_kernel(struct pt_regs *regs)
1906
{
1907
WARN_ON_ONCE(user_mode(regs));
1908
1909
/*
···
1916
mce_check_crashing_cpu())
1917
return;
1918
1919
-
nmi_enter();
1920
/*
1921
* The call targets are marked noinstr, but objtool can't figure
1922
* that out because it's an indirect call. Annotate it.
···
1927
if (regs->flags & X86_EFLAGS_IF)
1928
trace_hardirqs_on_prepare();
1929
instrumentation_end();
1930
-
nmi_exit();
1931
}
1932
1933
static __always_inline void exc_machine_check_user(struct pt_regs *regs)
···
1904
1905
static __always_inline void exc_machine_check_kernel(struct pt_regs *regs)
1906
{
1907
+
bool irq_state;
1908
+
1909
WARN_ON_ONCE(user_mode(regs));
1910
1911
/*
···
1914
mce_check_crashing_cpu())
1915
return;
1916
1917
+
irq_state = idtentry_enter_nmi(regs);
1918
/*
1919
* The call targets are marked noinstr, but objtool can't figure
1920
* that out because it's an indirect call. Annotate it.
···
1925
if (regs->flags & X86_EFLAGS_IF)
1926
trace_hardirqs_on_prepare();
1927
instrumentation_end();
1928
+
idtentry_exit_nmi(regs, irq_state);
1929
}
1930
1931
static __always_inline void exc_machine_check_user(struct pt_regs *regs)