Add a module parameter 'check_inuse' to allow disabling the check of whether
virtualization has already been enabled on the given cpu.

This is needed to deal with broken BIOS which set the SVM/VMX bit by default.

Cc: Avi Kivity <[email protected]>
Cc: Marcelo Tosatti <[email protected]>
Suggested-by: Alexander Graf <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
---
 arch/x86/kvm/svm.c |    5 ++++-
 arch/x86/kvm/vmx.c |    5 ++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 475d1c9..5ca76e3 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -183,6 +183,9 @@ module_param(npt, int, S_IRUGO);
 static int nested = 1;
 module_param(nested, int, S_IRUGO);
 
+static bool check_inuse = 1;
+module_param(check_inuse, bool, S_IRUGO);
+
 static void svm_flush_tlb(struct kvm_vcpu *vcpu);
 static void svm_complete_interrupts(struct vcpu_svm *svm);
 
@@ -587,7 +590,7 @@ static int svm_hardware_enable(void *garbage)
        int me = raw_smp_processor_id();
 
        rdmsrl(MSR_EFER, efer);
-       if (efer & EFER_SVME)
+       if (check_inuse && (efer & EFER_SVME))
                return -EBUSY;
 
        if (!has_svm()) {
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index f5b49c7..3046b07 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -74,6 +74,9 @@ module_param(vmm_exclusive, bool, S_IRUGO);
 static int __read_mostly yield_on_hlt = 1;
 module_param(yield_on_hlt, bool, S_IRUGO);
 
+static bool check_inuse = 1;
+module_param(check_inuse, bool, S_IRUGO);
+
 /*
  * If nested=1, nested virtualization is supported, i.e., guests may use
  * VMX and be a hypervisor for its own guests. If nested=0, guests may not
@@ -2230,7 +2233,7 @@ static int hardware_enable(void *garbage)
        u64 phys_addr = __pa(per_cpu(vmxarea, cpu));
        u64 old, test_bits;
 
-       if (read_cr4() & X86_CR4_VMXE)
+       if (check_inuse && (read_cr4() & X86_CR4_VMXE))
                return -EBUSY;
 
        INIT_LIST_HEAD(&per_cpu(loaded_vmcss_on_cpu, cpu));
-- 
1.7.6

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to