Re: [PATCH v1 12/26] x86/cpu: Use scanned CPUID(0x1)

Ingo Molnar <[email protected]>
Newsgroups dev.linux.lists.x86-cpuid,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
* Ahmed S. Darwish <[email protected]> wrote:

> Use scanned CPUID(0x1) access, instead of a direct CPUID query, at early
> boot CPU detection code.
> 
> Beside the centralization benefits of the scanned CPUID API, this allows
> using the auto-generated <cpuid/leaves.h> CPUID leaf data types and their
> full C99 bitfields instead of performing ugly bitwise operations on CPUID
> register output.
> 
> Signed-off-by: Ahmed S. Darwish <[email protected]>
> ---
>  arch/x86/kernel/cpu/common.c | 16 +++++++---------
>  1 file changed, 7 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
> index 59ddf6b074f2..a08340a5e6a5 100644
> --- a/arch/x86/kernel/cpu/common.c
> +++ b/arch/x86/kernel/cpu/common.c
> @@ -895,6 +895,7 @@ void get_cpu_vendor(struct cpuinfo_x86 *c)
>  void cpu_detect(struct cpuinfo_x86 *c)
>  {
>  	const struct leaf_0x0_0 *l0 = cpudata_cpuid(c, 0x0);
> +	const struct leaf_0x1_0 *l1 = cpudata_cpuid(c, 0x1);
>  
>  	c->cpuid_level = l0->max_std_leaf;
>  	*(u32 *)&c->x86_vendor_id[0] = l0->cpu_vendorid_0;
> @@ -902,17 +903,14 @@ void cpu_detect(struct cpuinfo_x86 *c)
>  	*(u32 *)&c->x86_vendor_id[8] = l0->cpu_vendorid_2;
>  
>  	c->x86 = 4;
> -	/* Intel-defined flags: level 0x00000001 */
> -	if (c->cpuid_level >= 0x00000001) {
> -		u32 junk, tfms, cap0, misc;
>  
> -		cpuid(0x00000001, &tfms, &misc, &junk, &cap0);
> -		c->x86		= x86_family(tfms);
> -		c->x86_model	= x86_model(tfms);
> -		c->x86_stepping	= x86_stepping(tfms);
> +	if (l1) {
> +		c->x86		= cpuid_family(l1);
> +		c->x86_model	= cpuid_model(l1);
> +		c->x86_stepping	= l1->stepping;
>  
> -		if (cap0 & (1<<19)) {
> -			c->x86_clflush_size = ((misc >> 8) & 0xff) * 8;
> +		if (l1->clflush) {
> +			c->x86_clflush_size = l1->clflush_size * 8;
>  			c->x86_cache_alignment = c->x86_clflush_size;
>  		}

Nice patch, it really nicely demonstrates the maintainability 
advantages of the new CPUID parser.

Thanks,

	Ingo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.