Bug 106621 - Failure to install Hyper-V role on nested KVM guest
Summary: Failure to install Hyper-V role on nested KVM guest
Status: RESOLVED CODE_FIX
Alias: None
Product: Virtualization
Classification: Unclassified
Component: kvm (show other bugs)
Hardware: x86-64 Linux
: P1 normal
Assignee: virtualization_kvm
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-10-26 12:57 UTC by Rainmaker52
Modified: 2017-02-14 17:51 UTC (History)
5 users (show)

See Also:
Kernel Version: 4.3.0-rc7
Subsystem:
Regression: No
Bisected commit-id:


Attachments

Description Rainmaker52 2015-10-26 12:57:02 UTC
When installing the Hyper-V role on a Windows guest (tried 2008 R2, 2012 R2 and 2016 TP3), the Windows installer refuses to install because of the error 

"Hyper-V cannot be installed because virtualization support is not enabled in the BIOS."

This is because the MSR 0x3a is initialized to "0".

When VMX is activated on the guest CPU, the 0x3a register should return "5".

The following code patch (may be a bit of an overstatement) returns "5" if VMX is set on the guest CPU, thereby reporting to the guest that visualization is enabled in the BIOS. 

--- a/arch/x86/kvm/vmx.c	2015-10-25 02:39:47.000000000 +0100
+++ b/arch/x86/kvm/vmx.c	2015-10-26 13:35:51.894700786 +0100
@@ -2661,7 +2661,12 @@
 	case MSR_IA32_FEATURE_CONTROL:
 		if (!nested_vmx_allowed(vcpu))
 			return 1;
-		msr_info->data = to_vmx(vcpu)->nested.msr_ia32_feature_control;
+		if (nested_vmx_allowed(vcpu)) {
+			//Set all 3 bits in 0x3a
+			msr_info->data = 5;
+		} else {
+			msr_info->data = to_vmx(vcpu)->nested.msr_ia32_feature_control;
+		}
 		break;
 	case MSR_IA32_VMX_BASIC ... MSR_IA32_VMX_VMFUNC:
 		if (!nested_vmx_allowed(vcpu))


This, together with "-cpu host,-hypervisor,+vmx will allow Hyper-V to be installed. It will however not allow to start these Virtual Machines.
Comment 1 Alexander E. Patrakov 2017-02-14 17:14:15 UTC
While trying to run an L2 VM in HyperV in KVM, I was able to get another potentially useful log message from Windows:

Hypervisor launch failed; Processor does not support the minimum features required to run the hypervisor (MSR index 0x48B, allowed bits 0x2600000000, required bits 0xFB00000000).

That's on linux-4.9.8.
Comment 2 Alexander E. Patrakov 2017-02-14 17:21:29 UTC
in a Linux L1 guest, with "-enable-kvm -cpu host,-hypervisor,+vmx,kvm=off", "rdmsr 0x48b" returns fb00000000, but that's still not good enough for HyperV.
Comment 3 Paolo Bonzini 2017-02-14 17:51:46 UTC
Will work in 4.10.

Note You need to log in before you can comment on or make changes to this bug.