]> xenbits.xensource.com Git - xen.git/commitdiff
x86/hyperv: extract more information from Hyper-V
authorWei Liu <liuwe@microsoft.com>
Thu, 24 Oct 2019 13:22:53 +0000 (14:22 +0100)
committerWei Liu <wl@xen.org>
Fri, 20 Dec 2019 17:58:54 +0000 (17:58 +0000)
Provide a structure to store that information. The structure will be
accessed from other places later so make it public.

Signed-off-by: Wei Liu <liuwe@microsoft.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/guest/hyperv/hyperv.c
xen/include/asm-x86/guest/hyperv.h

index b82ae3833fc16df605c6237d232e239e964abc5d..2e70b4aa828e04312f3d862f52381a85a54961b4 100644 (file)
@@ -21,6 +21,9 @@
 #include <xen/init.h>
 
 #include <asm/guest.h>
+#include <asm/guest/hyperv-tlfs.h>
+
+struct ms_hyperv_info __read_mostly ms_hyperv;
 
 static const struct hypervisor_ops ops = {
     .name = "Hyper-V",
@@ -40,6 +43,20 @@ const struct hypervisor_ops *__init hyperv_probe(void)
     if ( eax != 0x31237648 )    /* Hv#1 */
         return NULL;
 
+    /* Extract more information from Hyper-V */
+    cpuid(HYPERV_CPUID_FEATURES, &eax, &ebx, &ecx, &edx);
+    ms_hyperv.features = eax;
+    ms_hyperv.misc_features = edx;
+
+    ms_hyperv.hints = cpuid_eax(HYPERV_CPUID_ENLIGHTMENT_INFO);
+
+    if ( ms_hyperv.hints & HV_X64_ENLIGHTENED_VMCS_RECOMMENDED )
+        ms_hyperv.nested_features = cpuid_eax(HYPERV_CPUID_NESTED_FEATURES);
+
+    cpuid(HYPERV_CPUID_IMPLEMENT_LIMITS, &eax, &ebx, &ecx, &edx);
+    ms_hyperv.max_vp_index = eax;
+    ms_hyperv.max_lp_index = ebx;
+
     return &ops;
 }
 
index 3f88b94c77a4e27e60a9d50409999ca4a47f1050..cc21b9abfc56d2a3cc7c136d433734d7916973ff 100644 (file)
 
 #ifdef CONFIG_HYPERV_GUEST
 
+#include <xen/types.h>
+
 #include <asm/guest/hypervisor.h>
 
+struct ms_hyperv_info {
+    uint32_t features;
+    uint32_t misc_features;
+    uint32_t hints;
+    uint32_t nested_features;
+    uint32_t max_vp_index;
+    uint32_t max_lp_index;
+};
+extern struct ms_hyperv_info ms_hyperv;
+
 const struct hypervisor_ops *hyperv_probe(void);
 
 #else