x86/hyper-v: stash the max number of virtual/logical processor
authorVitaly Kuznetsov <vkuznets@redhat.com>
Sun, 25 Jun 2017 17:06:41 +0000 (10:06 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 17 Jul 2017 15:20:28 +0000 (17:20 +0200)
Max virtual processor will be needed for 'extended' hypercalls supporting
more than 64 vCPUs. While on it, unify on 'Hyper-V' in mshyperv.c as we
currently have a mix, report acquired misc features as well.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/include/asm/mshyperv.h
arch/x86/kernel/cpu/mshyperv.c

index 94937a357b3ec56fb9edff1d221fa8d06ad6814b..01b9c0fb3aabedfe272e648fbcc49252218bf37c 100644 (file)
@@ -28,6 +28,8 @@ struct ms_hyperv_info {
        u32 features;
        u32 misc_features;
        u32 hints;
+       u32 max_vp_index;
+       u32 max_lp_index;
 };
 
 extern struct ms_hyperv_info ms_hyperv;
index 70e717fccdd6cabaf8eb778b6f407c43b6e0c412..b3bf024fc4e0fcd78974ed6cfd39b2ea80439ee6 100644 (file)
@@ -184,9 +184,15 @@ 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);
 
-       pr_info("HyperV: features 0x%x, hints 0x%x\n",
+       pr_info("Hyper-V: features 0x%x, hints 0x%x\n",
                ms_hyperv.features, ms_hyperv.hints);
 
+       ms_hyperv.max_vp_index = cpuid_eax(HVCPUID_IMPLEMENTATION_LIMITS);
+       ms_hyperv.max_lp_index = cpuid_ebx(HVCPUID_IMPLEMENTATION_LIMITS);
+
+       pr_debug("Hyper-V: max %u virtual processors, %u logical processors\n",
+                ms_hyperv.max_vp_index, ms_hyperv.max_lp_index);
+
        /*
         * Extract host information.
         */
@@ -219,7 +225,7 @@ static void __init ms_hyperv_init_platform(void)
                rdmsrl(HV_X64_MSR_APIC_FREQUENCY, hv_lapic_frequency);
                hv_lapic_frequency = div_u64(hv_lapic_frequency, HZ);
                lapic_timer_frequency = hv_lapic_frequency;
-               pr_info("HyperV: LAPIC Timer Frequency: %#x\n",
+               pr_info("Hyper-V: LAPIC Timer Frequency: %#x\n",
                        lapic_timer_frequency);
        }
 
@@ -253,7 +259,7 @@ static void __init ms_hyperv_init_platform(void)
 }
 
 const __refconst struct hypervisor_x86 x86_hyper_ms_hyperv = {
-       .name                   = "Microsoft HyperV",
+       .name                   = "Microsoft Hyper-V",
        .detect                 = ms_hyperv_platform,
        .init_platform          = ms_hyperv_init_platform,
 };