diff options
author | Ingo Molnar <mingo@kernel.org> | 2020-07-31 12:12:21 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2020-07-31 12:13:21 +0200 |
commit | adb334d17858d8b679a41f7f2cd230e5c6accc0a (patch) | |
tree | fd4fd188aedd4412b6d1097eb58e0a479bb97596 /arch/x86/entry/common.c | |
parent | f3020b8891b890b48d9e1a83241e3cce518427c1 (diff) | |
parent | f87032aec41e0b00ae5fa9103eb8e7b2d1f8416b (diff) |
Merge branch 'WIP.x86/entry' into x86/entry, to merge the latest generic code and resolve conflictsx86-entry-2020-08-04
Pick up and resolve the NMI entry code changes from the locking tree,
and also pick up the latest two fixes from tip:core/entry.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/entry/common.c')
-rw-r--r-- | arch/x86/entry/common.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index 3de0303703ae..48512c7944e7 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -198,6 +198,40 @@ SYSCALL_DEFINE0(ni_syscall) return -ENOSYS; } +noinstr bool idtentry_enter_nmi(struct pt_regs *regs) +{ + bool irq_state = lockdep_hardirqs_enabled(); + + __nmi_enter(); + lockdep_hardirqs_off(CALLER_ADDR0); + lockdep_hardirq_enter(); + rcu_nmi_enter(); + + instrumentation_begin(); + trace_hardirqs_off_finish(); + ftrace_nmi_enter(); + instrumentation_end(); + + return irq_state; +} + +noinstr void idtentry_exit_nmi(struct pt_regs *regs, bool restore) +{ + instrumentation_begin(); + ftrace_nmi_exit(); + if (restore) { + trace_hardirqs_on_prepare(); + lockdep_hardirqs_on_prepare(CALLER_ADDR0); + } + instrumentation_end(); + + rcu_nmi_exit(); + lockdep_hardirq_exit(); + if (restore) + lockdep_hardirqs_on(CALLER_ADDR0); + __nmi_exit(); +} + #ifdef CONFIG_XEN_PV #ifndef CONFIG_PREEMPTION /* |