Instead of exiting quietly, print an error if the VMX or the SVM bits were already set when loading the module. Having VMX/SVM bits set means that either there is someone else doing hardware virtualization, or that the BIOS is buggy and sets it on by default. Cc: Avi Kivity <avi@xxxxxxxxxx> Cc: Marcelo Tosatti <mtosatti@xxxxxxxxxx> Signed-off-by: Sasha Levin <levinsasha928@xxxxxxxxx> --- arch/x86/kvm/svm.c | 5 ++++- arch/x86/kvm/vmx.c | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 5ca76e3..2a1df2e 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -590,8 +590,11 @@ static int svm_hardware_enable(void *garbage) int me = raw_smp_processor_id(); rdmsrl(MSR_EFER, efer); - if (check_inuse && (efer & EFER_SVME)) + if (check_inuse && (efer & EFER_SVME)) { + printk(KERN_ERR "svm_hardware_enable: SVM already set on %d\n", + me); return -EBUSY; + } if (!has_svm()) { printk(KERN_ERR "svm_hardware_enable: err EOPNOTSUPP on %d\n", diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 3046b07..df69b1d 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -2233,8 +2233,10 @@ static int hardware_enable(void *garbage) u64 phys_addr = __pa(per_cpu(vmxarea, cpu)); u64 old, test_bits; - if (check_inuse && (read_cr4() & X86_CR4_VMXE)) + if (check_inuse && (read_cr4() & X86_CR4_VMXE)) { + printk(KERN_ERR "hardware_enable: VMX already set\n"); return -EBUSY; + } INIT_LIST_HEAD(&per_cpu(loaded_vmcss_on_cpu, cpu)); rdmsrl(MSR_IA32_FEATURE_CONTROL, old); -- 1.7.6 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html