[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] x86/boot: Print the CPU model string alongside the Family/Model/Stepping info



This is also useful information when looking at boot logs.

To do this, reuse get_model_name() which requires c->extended_cpuid_level to
be calculated.  early_cpu_init() already opencodes the calculation, so set
c->extended_cpuid_level directly.

While playing in this area, clean up get_model_name().  Its use in
generic_identify() makes the sole external call from the Centaur code
redundant.  Make it local and switch to using a boolean return value.

As sample boot now looks like:

  (XEN) CPU Vendor: Intel, Family 6 (0x6), Model 60 (0x3c), Stepping 3 (raw 
000306c3)
  (XEN) CPU Model:  Intel(R) Xeon(R) CPU E3-1240 v3 @ 3.40GHz

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Wei Liu <wei.liu2@xxxxxxxxxx>
CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
 xen/arch/x86/cpu/centaur.c |  1 -
 xen/arch/x86/cpu/common.c  | 15 ++++++++++-----
 xen/arch/x86/cpu/cpu.h     |  1 -
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/xen/arch/x86/cpu/centaur.c b/xen/arch/x86/cpu/centaur.c
index 34a5bfc..0e634a1 100644
--- a/xen/arch/x86/cpu/centaur.c
+++ b/xen/arch/x86/cpu/centaur.c
@@ -44,7 +44,6 @@ static void init_c3(struct cpuinfo_x86 *c)
                __set_bit(X86_FEATURE_CONSTANT_TSC, c->x86_capability);
        }
 
-       get_model_name(c);
        display_cacheinfo(c);
 }
 
diff --git a/xen/arch/x86/cpu/common.c b/xen/arch/x86/cpu/common.c
index fa8548e..12172aa 100644
--- a/xen/arch/x86/cpu/common.c
+++ b/xen/arch/x86/cpu/common.c
@@ -188,13 +188,13 @@ void ctxt_switch_levelling(const struct vcpu *next)
 bool_t opt_cpu_info;
 boolean_param("cpuinfo", opt_cpu_info);
 
-int get_model_name(struct cpuinfo_x86 *c)
+static bool get_model_name(struct cpuinfo_x86 *c)
 {
        unsigned int *v;
        char *p, *q;
 
        if (c->extended_cpuid_level < 0x80000004)
-               return 0;
+               return false;
 
        v = (unsigned int *) c->x86_model_id;
        cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]);
@@ -214,7 +214,7 @@ int get_model_name(struct cpuinfo_x86 *c)
                  *q++ = '\0';  /* Zero-pad the rest */
        }
 
-       return 1;
+       return true;
 }
 
 
@@ -303,13 +303,18 @@ void __init early_cpu_init(void)
        c->x86_capability[cpufeat_word(X86_FEATURE_FPU)] = edx;
        c->x86_capability[cpufeat_word(X86_FEATURE_SSE3)] = ecx;
 
+       c->extended_cpuid_level = cpuid_eax(0x80000000);
+       if ((c->extended_cpuid_level >> 16) != 0x8000)
+               c->extended_cpuid_level = 0;
+
        printk(XENLOG_INFO
               "CPU Vendor: %s, Family %u (%#x), Model %u (%#x), Stepping %u 
(raw %08x)\n",
               x86_cpuid_vendor_to_str(c->x86_vendor), c->x86, c->x86,
               c->x86_model, c->x86_model, c->x86_mask, eax);
+       if (get_model_name(c))
+               printk(XENLOG_INFO "CPU Model:  %.48s\n", c->x86_model_id);
 
-       eax = cpuid_eax(0x80000000);
-       if ((eax >> 16) == 0x8000 && eax >= 0x80000008) {
+       if (c->extended_cpuid_level >= 0x80000008) {
                eax = cpuid_eax(0x80000008);
                paddr_bits = eax & 0xff;
                if (paddr_bits > PADDR_BITS)
diff --git a/xen/arch/x86/cpu/cpu.h b/xen/arch/x86/cpu/cpu.h
index 54bd0d3..d30f42b 100644
--- a/xen/arch/x86/cpu/cpu.h
+++ b/xen/arch/x86/cpu/cpu.h
@@ -12,5 +12,4 @@ extern unsigned int opt_cpuid_mask_ecx, opt_cpuid_mask_edx;
 extern unsigned int opt_cpuid_mask_xsave_eax;
 extern unsigned int opt_cpuid_mask_ext_ecx, opt_cpuid_mask_ext_edx;
 
-extern int get_model_name(struct cpuinfo_x86 *c);
 extern void display_cacheinfo(struct cpuinfo_x86 *c);
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.