]> git.baikalelectronics.ru Git - kernel.git/commitdiff
KVM: VMX: Move Intel PT shenanigans out of VMXON/VMXOFF flows
authorSean Christopherson <seanjc@google.com>
Thu, 31 Dec 2020 00:26:58 +0000 (16:26 -0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 4 Feb 2021 10:27:32 +0000 (05:27 -0500)
Move the Intel PT tracking outside of the VMXON/VMXOFF helpers so that
a future patch can drop KVM's kvm_cpu_vmxoff() in favor of the kernel's
cpu_vmxoff() without an associated PT functional change, and without
losing symmetry between the VMXON and VMXOFF flows.

Barring undocumented behavior, this should have no meaningful effects
as Intel PT behavior does not interact with CR4.VMXE.

Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20201231002702.2223707-6-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/vmx/vmx.c

index 2a6d29c47b31d27cccab73f5d7195b76dfaf4d47..55ae56c244689aa25fbf1ce0763ee603b0b7fd84 100644 (file)
@@ -2313,7 +2313,6 @@ static int kvm_cpu_vmxon(u64 vmxon_pointer)
        u64 msr;
 
        cr4_set_bits(X86_CR4_VMXE);
-       intel_pt_handle_vmx(1);
 
        asm_volatile_goto("1: vmxon %[vmxon_pointer]\n\t"
                          _ASM_EXTABLE(1b, %l[fault])
@@ -2324,7 +2323,6 @@ static int kvm_cpu_vmxon(u64 vmxon_pointer)
 fault:
        WARN_ONCE(1, "VMXON faulted, MSR_IA32_FEAT_CTL (0x3a) = 0x%llx\n",
                  rdmsrl_safe(MSR_IA32_FEAT_CTL, &msr) ? 0xdeadbeef : msr);
-       intel_pt_handle_vmx(0);
        cr4_clear_bits(X86_CR4_VMXE);
 
        return -EFAULT;
@@ -2347,9 +2345,13 @@ static int hardware_enable(void)
            !hv_get_vp_assist_page(cpu))
                return -EFAULT;
 
+       intel_pt_handle_vmx(1);
+
        r = kvm_cpu_vmxon(phys_addr);
-       if (r)
+       if (r) {
+               intel_pt_handle_vmx(0);
                return r;
+       }
 
        if (enable_ept)
                ept_sync_global();
@@ -2375,7 +2377,6 @@ static void kvm_cpu_vmxoff(void)
 {
        asm volatile (__ex("vmxoff"));
 
-       intel_pt_handle_vmx(0);
        cr4_clear_bits(X86_CR4_VMXE);
 }
 
@@ -2383,6 +2384,8 @@ static void hardware_disable(void)
 {
        vmclear_local_loaded_vmcss();
        kvm_cpu_vmxoff();
+
+       intel_pt_handle_vmx(0);
 }
 
 /*