|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] x86/hyperv: detect absolutely necessary MSRs
commit 5babcc9a334830ff530b7e65a4da3789c083e102
Author: Wei Liu <liuwe@xxxxxxxxxxxxx>
AuthorDate: Fri Dec 27 17:14:58 2019 +0000
Commit: Wei Liu <liuwe@xxxxxxxxxxxxx>
CommitDate: Fri Jan 3 17:45:47 2020 +0000
x86/hyperv: detect absolutely necessary MSRs
If they are not available, disable Hyper-V related features.
Signed-off-by: Wei Liu <liuwe@xxxxxxxxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/arch/x86/guest/hyperv/hyperv.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/xen/arch/x86/guest/hyperv/hyperv.c
b/xen/arch/x86/guest/hyperv/hyperv.c
index 2e70b4aa82..8d38313d7a 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,16 @@ 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;
}
--
generated by git-patchbot for /home/xen/git/xen.git#staging
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |