]> git.ipfire.org Git - thirdparty/linux.git/blobdiff - arch/x86/kernel/nmi.c
Merge tag 'x86_microcode_for_v6.7_rc1' of git://git.kernel.org/pub/scm/linux/kernel...
[thirdparty/linux.git] / arch / x86 / kernel / nmi.c
index 2c6ede434a3b65bb4c9f62ece2a0e4e30200974e..17e955ab69feda933cca3708822f6f9f598e31bf 100644 (file)
@@ -514,12 +514,13 @@ DEFINE_IDTENTRY_RAW(exc_nmi)
        }
        this_cpu_write(nmi_state, NMI_EXECUTING);
        this_cpu_write(nmi_cr2, read_cr2());
+
+nmi_restart:
        if (IS_ENABLED(CONFIG_NMI_CHECK_CPU)) {
                WRITE_ONCE(nsp->idt_seq, nsp->idt_seq + 1);
                WARN_ON_ONCE(!(nsp->idt_seq & 0x1));
                WRITE_ONCE(nsp->recv_jiffies, jiffies);
        }
-nmi_restart:
 
        /*
         * Needs to happen before DR7 is accessed, because the hypervisor can
@@ -555,16 +556,16 @@ nmi_restart:
 
        if (unlikely(this_cpu_read(nmi_cr2) != read_cr2()))
                write_cr2(this_cpu_read(nmi_cr2));
-       if (this_cpu_dec_return(nmi_state))
-               goto nmi_restart;
-
-       if (user_mode(regs))
-               mds_user_clear_cpu_buffers();
        if (IS_ENABLED(CONFIG_NMI_CHECK_CPU)) {
                WRITE_ONCE(nsp->idt_seq, nsp->idt_seq + 1);
                WARN_ON_ONCE(nsp->idt_seq & 0x1);
                WRITE_ONCE(nsp->recv_jiffies, jiffies);
        }
+       if (this_cpu_dec_return(nmi_state))
+               goto nmi_restart;
+
+       if (user_mode(regs))
+               mds_user_clear_cpu_buffers();
 }
 
 #if IS_ENABLED(CONFIG_KVM_INTEL)