If they are not available, disable Hyper-V related features. Signed-off-by: Wei Liu <li...@microsoft.com> --- xen/arch/x86/guest/hyperv/hyperv.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/xen/arch/x86/guest/hyperv/hyperv.c b/xen/arch/x86/guest/hyperv/hyperv.c index 2e70b4aa82..c6a26c5453 100644 --- a/xen/arch/x86/guest/hyperv/hyperv.c +++ b/xen/arch/x86/guest/hyperv/hyperv.c @@ -32,6 +32,8 @@ static const struct hypervisor_ops ops = { const struct hypervisor_ops *__init hyperv_probe(void) { uint32_t eax, ebx, ecx, edx; + uint64_t required_msrs = HV_X64_MSR_HYPERCALL_AVAILABLE | + HV_X64_MSR_VP_INDEX_AVAILABLE; cpuid(0x40000000, &eax, &ebx, &ecx, &edx); if ( !((ebx == 0x7263694d) && /* "Micr" */ @@ -57,6 +59,15 @@ const struct hypervisor_ops *__init hyperv_probe(void) ms_hyperv.max_vp_index = eax; ms_hyperv.max_lp_index = ebx; + if ( (ms_hyperv.features & required_msrs) != required_msrs ) + { + /* Oops, required MSRs are not available. Treat this as + * "Hyper-V is not available". + */ + memset(&ms_hyperv, 0, sizeof(ms_hyperv)); + return NULL; + } + return &ops; } -- 2.20.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel