|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/8] x86/hyperv: detect absolutely necessary MSRs
If they are not available, disable Hyper-V related features.
Signed-off-by: Wei Liu <liuwe@xxxxxxxxxxxxx>
---
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@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |