Detect nested features exposed by Hyper-V if SVM is enabled.

Signed-off-by: Vineeth Pillai <virem...@linux.microsoft.com>
---
 arch/x86/kernel/cpu/mshyperv.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index 3546d3e21787..c6f812851e37 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -252,6 +252,7 @@ static void __init hv_smp_prepare_cpus(unsigned int 
max_cpus)
 
 static void __init ms_hyperv_init_platform(void)
 {
+       int hv_max_functions_eax;
        int hv_host_info_eax;
        int hv_host_info_ebx;
        int hv_host_info_ecx;
@@ -269,6 +270,8 @@ static void __init ms_hyperv_init_platform(void)
        ms_hyperv.misc_features = cpuid_edx(HYPERV_CPUID_FEATURES);
        ms_hyperv.hints    = cpuid_eax(HYPERV_CPUID_ENLIGHTMENT_INFO);
 
+       hv_max_functions_eax = cpuid_eax(HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS);
+
        pr_info("Hyper-V: privilege flags low 0x%x, high 0x%x, hints 0x%x, misc 
0x%x\n",
                ms_hyperv.features, ms_hyperv.priv_high, ms_hyperv.hints,
                ms_hyperv.misc_features);
@@ -298,8 +301,7 @@ static void __init ms_hyperv_init_platform(void)
        /*
         * Extract host information.
         */
-       if (cpuid_eax(HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS) >=
-           HYPERV_CPUID_VERSION) {
+       if (hv_max_functions_eax >= HYPERV_CPUID_VERSION) {
                hv_host_info_eax = cpuid_eax(HYPERV_CPUID_VERSION);
                hv_host_info_ebx = cpuid_ebx(HYPERV_CPUID_VERSION);
                hv_host_info_ecx = cpuid_ecx(HYPERV_CPUID_VERSION);
@@ -325,9 +327,11 @@ static void __init ms_hyperv_init_platform(void)
                        ms_hyperv.isolation_config_a, 
ms_hyperv.isolation_config_b);
        }
 
-       if (ms_hyperv.hints & HV_X64_ENLIGHTENED_VMCS_RECOMMENDED) {
+       if (hv_max_functions_eax >= HYPERV_CPUID_NESTED_FEATURES) {
                ms_hyperv.nested_features =
                        cpuid_eax(HYPERV_CPUID_NESTED_FEATURES);
+               pr_info("Hyper-V: Nested features: 0x%x\n",
+                       ms_hyperv.nested_features);
        }
 
        /*
-- 
2.25.1

Reply via email to