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/kernel/nmi.c | |
| parent | f3020b8891b890b48d9e1a83241e3cce518427c1 (diff) | |
| parent | f87032aec41e0b00ae5fa9103eb8e7b2d1f8416b (diff) | |
| download | linux-adb334d17858d8b679a41f7f2cd230e5c6accc0a.tar.gz linux-adb334d17858d8b679a41f7f2cd230e5c6accc0a.tar.bz2 linux-adb334d17858d8b679a41f7f2cd230e5c6accc0a.zip | |
Merge branch 'WIP.x86/entry' into x86/entry, to merge the latest generic code and resolve conflicts
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/kernel/nmi.c')
| -rw-r--r-- | arch/x86/kernel/nmi.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c index d7c5e44b26f7..4fc9954a9560 100644 --- a/arch/x86/kernel/nmi.c +++ b/arch/x86/kernel/nmi.c @@ -330,7 +330,6 @@ static noinstr void default_do_nmi(struct pt_regs *regs) __this_cpu_write(last_nmi_rip, regs->ip); instrumentation_begin(); - trace_hardirqs_off_finish(); handled = nmi_handle(NMI_LOCAL, regs); __this_cpu_add(nmi_stats.normal, handled); @@ -417,8 +416,6 @@ static noinstr void default_do_nmi(struct pt_regs *regs) unknown_nmi_error(reason, regs); out: - if (regs->flags & X86_EFLAGS_IF) - trace_hardirqs_on_prepare(); instrumentation_end(); } @@ -478,6 +475,8 @@ static DEFINE_PER_CPU(unsigned long, nmi_dr7); DEFINE_IDTENTRY_RAW(exc_nmi) { + bool irq_state; + if (IS_ENABLED(CONFIG_SMP) && arch_cpu_is_offline(smp_processor_id())) return; @@ -491,14 +490,14 @@ nmi_restart: this_cpu_write(nmi_dr7, local_db_save()); - nmi_enter(); + irq_state = idtentry_enter_nmi(regs); inc_irq_stat(__nmi_count); if (!ignore_nmis) default_do_nmi(regs); - nmi_exit(); + idtentry_exit_nmi(regs, irq_state); local_db_restore(this_cpu_read(nmi_dr7)); |
