|
@@ -1333,19 +1333,25 @@ static __init int vmx_disabled_by_bios(void)
|
|
|
|
|
|
rdmsrl(MSR_IA32_FEATURE_CONTROL, msr);
|
|
|
if (msr & FEATURE_CONTROL_LOCKED) {
|
|
|
+ /* launched w/ TXT and VMX disabled */
|
|
|
if (!(msr & FEATURE_CONTROL_VMXON_ENABLED_INSIDE_SMX)
|
|
|
&& tboot_enabled())
|
|
|
return 1;
|
|
|
+ /* launched w/o TXT and VMX only enabled w/ TXT */
|
|
|
if (!(msr & FEATURE_CONTROL_VMXON_ENABLED_OUTSIDE_SMX)
|
|
|
+ && (msr & FEATURE_CONTROL_VMXON_ENABLED_INSIDE_SMX)
|
|
|
&& !tboot_enabled()) {
|
|
|
printk(KERN_WARNING "kvm: disable TXT in the BIOS or "
|
|
|
- " activate TXT before enabling KVM\n");
|
|
|
+ "activate TXT before enabling KVM\n");
|
|
|
return 1;
|
|
|
}
|
|
|
+ /* launched w/o TXT and VMX disabled */
|
|
|
+ if (!(msr & FEATURE_CONTROL_VMXON_ENABLED_OUTSIDE_SMX)
|
|
|
+ && !tboot_enabled())
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
- /* locked but not enabled */
|
|
|
}
|
|
|
|
|
|
static void kvm_cpu_vmxon(u64 addr)
|