KVM: VMX: Use the kernel's version of VMXOFF
Drop kvm_cpu_vmxoff() in favor of the kernel's cpu_vmxoff(). Modify the latter to return -EIO on fault so that KVM can invoke kvm_spurious_fault() when appropriate. In addition to the obvious code reuse, dropping kvm_cpu_vmxoff() also eliminates VMX's last usage of the __ex()/__kvm_handle_fault_on_reboot() macros, thus helping pave the way toward dropping them entirely. Signed-off-by: Sean Christopherson <seanjc@google.com> Message-Id: <20201231002702.2223707-7-seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
5ef940bd9a
commit
6a28913947
@ -41,13 +41,18 @@ static inline int cpu_has_vmx(void)
|
||||
* faults are guaranteed to be due to the !post-VMXON check unless the CPU is
|
||||
* magically in RM, VM86, compat mode, or at CPL>0.
|
||||
*/
|
||||
static inline void cpu_vmxoff(void)
|
||||
static inline int cpu_vmxoff(void)
|
||||
{
|
||||
asm_volatile_goto("1: vmxoff\n\t"
|
||||
_ASM_EXTABLE(1b, %l[fault])
|
||||
::: "cc", "memory" : fault);
|
||||
|
||||
cr4_clear_bits(X86_CR4_VMXE);
|
||||
return 0;
|
||||
|
||||
fault:
|
||||
cr4_clear_bits(X86_CR4_VMXE);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
static inline int cpu_vmx_enabled(void)
|
||||
|
@ -2369,21 +2369,12 @@ static void vmclear_local_loaded_vmcss(void)
|
||||
__loaded_vmcs_clear(v);
|
||||
}
|
||||
|
||||
|
||||
/* Just like cpu_vmxoff(), but with the __kvm_handle_fault_on_reboot()
|
||||
* tricks.
|
||||
*/
|
||||
static void kvm_cpu_vmxoff(void)
|
||||
{
|
||||
asm volatile (__ex("vmxoff"));
|
||||
|
||||
cr4_clear_bits(X86_CR4_VMXE);
|
||||
}
|
||||
|
||||
static void hardware_disable(void)
|
||||
{
|
||||
vmclear_local_loaded_vmcss();
|
||||
kvm_cpu_vmxoff();
|
||||
|
||||
if (cpu_vmxoff())
|
||||
kvm_spurious_fault();
|
||||
|
||||
intel_pt_handle_vmx(0);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user