|
@@ -1091,13 +1091,22 @@ static void vmclear_local_vcpus(void)
|
|
__vcpu_clear(vmx);
|
|
__vcpu_clear(vmx);
|
|
}
|
|
}
|
|
|
|
|
|
-static void hardware_disable(void *garbage)
|
|
|
|
|
|
+
|
|
|
|
+/* Just like cpu_vmxoff(), but with the __kvm_handle_fault_on_reboot()
|
|
|
|
+ * tricks.
|
|
|
|
+ */
|
|
|
|
+static void kvm_cpu_vmxoff(void)
|
|
{
|
|
{
|
|
- vmclear_local_vcpus();
|
|
|
|
asm volatile (__ex(ASM_VMX_VMXOFF) : : : "cc");
|
|
asm volatile (__ex(ASM_VMX_VMXOFF) : : : "cc");
|
|
write_cr4(read_cr4() & ~X86_CR4_VMXE);
|
|
write_cr4(read_cr4() & ~X86_CR4_VMXE);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void hardware_disable(void *garbage)
|
|
|
|
+{
|
|
|
|
+ vmclear_local_vcpus();
|
|
|
|
+ kvm_cpu_vmxoff();
|
|
|
|
+}
|
|
|
|
+
|
|
static __init int adjust_vmx_controls(u32 ctl_min, u32 ctl_opt,
|
|
static __init int adjust_vmx_controls(u32 ctl_min, u32 ctl_opt,
|
|
u32 msr, u32 *result)
|
|
u32 msr, u32 *result)
|
|
{
|
|
{
|