|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/3] xen/x86: Cleanup of early cpuid handling
On Mon, Nov 02, 2015 at 05:59:45PM +0000, Andrew Cooper wrote:
> Use register names for variables, rather than their content for leaf 1.
> Reduce the number of cpuid instructions issued. Also drop some trailing
> whitespace.
>
> No functional change.
I checked for that and:
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> ---
> xen/arch/x86/cpu/common.c | 69
> +++++++++++++++++++++++------------------------
> 1 file changed, 34 insertions(+), 35 deletions(-)
>
> diff --git a/xen/arch/x86/cpu/common.c b/xen/arch/x86/cpu/common.c
> index ac8a258..c71fb13 100644
> --- a/xen/arch/x86/cpu/common.c
> +++ b/xen/arch/x86/cpu/common.c
> @@ -180,7 +180,7 @@ static inline u32 phys_pkg_id(u32 cpuid_apic, int
> index_msb)
> static void __init early_cpu_detect(void)
> {
> struct cpuinfo_x86 *c = &boot_cpu_data;
> - u32 cap4, tfms, cap0, misc;
> + u32 eax, ebx, ecx, edx;
>
> c->x86_cache_alignment = 32;
>
> @@ -192,21 +192,21 @@ static void __init early_cpu_detect(void)
>
> c->x86_vendor = get_cpu_vendor(c->x86_vendor_id, gcv_host_early);
>
> - cpuid(0x00000001, &tfms, &misc, &cap4, &cap0);
> - c->x86 = (tfms >> 8) & 15;
> - c->x86_model = (tfms >> 4) & 15;
> + cpuid(0x00000001, &eax, &ebx, &ecx, &edx);
> + c->x86 = (eax >> 8) & 15;
> + c->x86_model = (eax >> 4) & 15;
> if (c->x86 == 0xf)
> - c->x86 += (tfms >> 20) & 0xff;
> + c->x86 += (eax >> 20) & 0xff;
> if (c->x86 >= 0x6)
> - c->x86_model += ((tfms >> 16) & 0xF) << 4;
> - c->x86_mask = tfms & 15;
> - cap0 &= ~cleared_caps[cpufeat_word(X86_FEATURE_FPU)];
> - cap4 &= ~cleared_caps[cpufeat_word(X86_FEATURE_XMM3)];
> - if (cap0 & cpufeat_mask(X86_FEATURE_CLFLSH))
> - c->x86_cache_alignment = ((misc >> 8) & 0xff) * 8;
> + c->x86_model += ((eax >> 16) & 0xF) << 4;
> + c->x86_mask = eax & 15;
> + edx &= ~cleared_caps[cpufeat_word(X86_FEATURE_FPU)];
> + ecx &= ~cleared_caps[cpufeat_word(X86_FEATURE_XMM3)];
> + if (edx & cpufeat_mask(X86_FEATURE_CLFLSH))
> + c->x86_cache_alignment = ((ebx >> 8) & 0xff) * 8;
> /* Leaf 0x1 capabilities filled in early for Xen. */
> - c->x86_capability[cpufeat_word(X86_FEATURE_FPU)] = cap0;
> - c->x86_capability[cpufeat_word(X86_FEATURE_XMM3)] = cap4;
> + c->x86_capability[cpufeat_word(X86_FEATURE_FPU)] = edx;
> + c->x86_capability[cpufeat_word(X86_FEATURE_XMM3)] = ecx;
>
> if ( cpuid_eax(0x80000000) >= 0x80000008 )
> paddr_bits = cpuid_eax(0x80000008) & 0xff;
> @@ -214,29 +214,29 @@ static void __init early_cpu_detect(void)
>
> static void __cpuinit generic_identify(struct cpuinfo_x86 *c)
> {
> - u32 tfms, capability, excap, ebx;
> + u32 eax, ebx, ecx, edx, tmp;
>
> /* Get vendor name */
> cpuid(0x00000000, &c->cpuid_level,
> (int *)&c->x86_vendor_id[0],
> (int *)&c->x86_vendor_id[8],
> (int *)&c->x86_vendor_id[4]);
> -
> +
> c->x86_vendor = get_cpu_vendor(c->x86_vendor_id, gcv_host_late);
> /* Initialize the standard set of capabilities */
> /* Note that the vendor-specific code below might override */
> -
> +
> /* Intel-defined flags: level 0x00000001 */
> - cpuid(0x00000001, &tfms, &ebx, &excap, &capability);
> - c->x86_capability[cpufeat_word(X86_FEATURE_FPU)] = capability;
> - c->x86_capability[cpufeat_word(X86_FEATURE_XMM3)] = excap;
> - c->x86 = (tfms >> 8) & 15;
> - c->x86_model = (tfms >> 4) & 15;
> + cpuid(0x00000001, &eax, &ebx, &ecx, &edx);
> + c->x86_capability[cpufeat_word(X86_FEATURE_FPU)] = edx;
> + c->x86_capability[cpufeat_word(X86_FEATURE_XMM3)] = ecx;
> + c->x86 = (eax >> 8) & 15;
> + c->x86_model = (eax >> 4) & 15;
> if (c->x86 == 0xf)
> - c->x86 += (tfms >> 20) & 0xff;
> + c->x86 += (eax >> 20) & 0xff;
> if (c->x86 >= 0x6)
> - c->x86_model += ((tfms >> 16) & 0xF) << 4;
> - c->x86_mask = tfms & 15;
> + c->x86_model += ((eax >> 16) & 0xF) << 4;
> + c->x86_mask = eax & 15;
> c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0);
> c->phys_proc_id = c->apicid;
> if ( cpu_has(c, X86_FEATURE_CLFLSH) )
> @@ -249,12 +249,12 @@ static void __cpuinit generic_identify(struct
> cpuinfo_x86 *c)
> /* AMD-defined flags: level 0x80000001 */
> c->extended_cpuid_level = cpuid_eax(0x80000000);
> if ( (c->extended_cpuid_level & 0xffff0000) == 0x80000000 ) {
> - if ( c->extended_cpuid_level >= 0x80000001 ) {
> - c->x86_capability[cpufeat_word(X86_FEATURE_SYSCALL)]
> - = cpuid_edx(0x80000001);
> - c->x86_capability[cpufeat_word(X86_FEATURE_LAHF_LM)]
> - = cpuid_ecx(0x80000001);
> - }
> + if ( c->extended_cpuid_level >= 0x80000001 )
> + cpuid(0x80000001, &tmp,
> +
> &c->x86_capability[cpufeat_word(X86_FEATURE_LAHF_LM)],
> +
> &c->x86_capability[cpufeat_word(X86_FEATURE_SYSCALL)],
> + &tmp);
> +
> if ( c->extended_cpuid_level >= 0x80000004 )
> get_model_name(c); /* Default name */
> }
> @@ -263,11 +263,10 @@ static void __cpuinit generic_identify(struct
> cpuinfo_x86 *c)
> early_intel_workaround(c);
>
> /* Intel-defined flags: level 0x00000007 */
> - if ( c->cpuid_level >= 0x00000007 ) {
> - u32 dummy;
> - cpuid_count(0x00000007, 0, &dummy, &ebx, &dummy, &dummy);
> - c->x86_capability[cpufeat_word(X86_FEATURE_FSGSBASE)] = ebx;
> - }
> + if ( c->cpuid_level >= 0x00000007 )
> + cpuid_count(0x00000007, 0, &tmp,
> +
> &c->x86_capability[cpufeat_word(X86_FEATURE_FSGSBASE)],
> + &tmp, &tmp);
> }
>
> /*
> --
> 2.1.4
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |