All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@suse.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Sergey Dyasli <sergey.dyasli@citrix.com>,
	Xen-devel <xen-devel@lists.xen.org>,
	Wei Liu <wei.liu2@citrix.com>,
	Roger Pau Monne <roger.pau@citrix.com>
Subject: Re: [PATCH 2/4] x86/cpuid: Drop get_cpu_vendor() completely
Date: Tue, 26 Mar 2019 06:08:43 -0600	[thread overview]
Message-ID: <5C9A164B0200007800221E32@prv1-mh.provo.novell.com> (raw)
In-Reply-To: <1553170866-23812-3-git-send-email-andrew.cooper3@citrix.com>

>>> On 21.03.19 at 13:21, <andrew.cooper3@citrix.com> wrote:
> get_cpu_vendor() tries to do a number of things, and ends up doing none of
> them well.
> 
> For calculating the vendor itself, use x86_cpuid_lookup_vendor() which is
> implemented in a far more efficient manner than looping over cpu_devs[].

Well, yes, the new library function is more efficient. The downside is
that the vendor specific information no longer lives in a central place
(struct cpu_dev).

> @@ -313,7 +283,13 @@ static void __init early_cpu_detect(void)
>  	*(u32 *)&c->x86_vendor_id[8] = ecx;
>  	*(u32 *)&c->x86_vendor_id[4] = edx;
>  
> -	c->x86_vendor = get_cpu_vendor(ebx, ecx, edx, gcv_host);
> +	c->x86_vendor = x86_cpuid_lookup_vendor(ebx, ecx, edx);
> +	if (c->x86_vendor < ARRAY_SIZE(cpu_devs) && cpu_devs[c->x86_vendor])
> +		this_cpu = cpu_devs[c->x86_vendor];
> +	else
> +		printk(XENLOG_ERR
> +		       "Unrecognised or unsupported CPU vendor '%s'\n",
> +		       c->x86_vendor_id);

%s happens to work because x86_vendor_id is an array of 16
characters. I'd prefer if the code here wasn't dependent on
that property plus the fact that the last 4 characters start out
as zeros and never get written to, by using %.*s instead.

Preferably with this taken care of
Reviewed-by: Jan Beulich <jbeulich@suse.com>

Then again I wonder if we wouldn't better drop x86_vendor_id[]
altogether. It's close to unused, yet takes up NR_CPUS*16 bytes
of storage. The few uses could be replaced by a reverse function
to x86_cpuid_lookup_vendor(). I don't think we care much to be
able to "correctly" reverse X86_VENDOR_UNKNOWN.

> --- a/xen/arch/x86/cpuid.c
> +++ b/xen/arch/x86/cpuid.c
> @@ -459,8 +459,8 @@ void recalculate_cpuid_policy(struct domain *d)
>      uint32_t fs[FSCAPINTS], max_fs[FSCAPINTS];
>      unsigned int i;
>  
> -    p->x86_vendor = get_cpu_vendor(p->basic.vendor_ebx, p->basic.vendor_ecx,
> -                                   p->basic.vendor_edx, gcv_guest);
> +    p->x86_vendor = x86_cpuid_lookup_vendor(
> +        p->basic.vendor_ebx, p->basic.vendor_ecx, p->basic.vendor_edx);

Personally I dislike this style of line wrapping, but I know
./CODING_STYLE doesn't say anything as to what style to use, so
your choice is going to be it here.

Jan



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

  reply	other threads:[~2019-03-26 12:08 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-21 12:21 [PATCH 0/4] x86/cpuid: Handling of synthetic cpuid_policy fields Andrew Cooper
2019-03-21 12:21 ` [PATCH 1/4] libx86: Introduce x86_cpuid_lookup_vendor() Andrew Cooper
2019-03-26 11:52   ` Jan Beulich
2019-03-26 13:11     ` Andrew Cooper
2019-03-26 14:07       ` Jan Beulich
2019-03-26 14:23         ` Juergen Gross
2019-03-26 14:39           ` Jan Beulich
2019-03-27 15:10             ` Andrew Cooper
     [not found]           ` <5C9A39B00200007800221F23@suse.com>
2019-03-26 14:47             ` Juergen Gross
2019-03-26 15:23               ` Jan Beulich
2019-03-21 12:21 ` [PATCH 2/4] x86/cpuid: Drop get_cpu_vendor() completely Andrew Cooper
2019-03-26 12:08   ` Jan Beulich [this message]
2019-03-26 16:41     ` Andrew Cooper
2019-03-21 12:21 ` [PATCH 3/4] tools/libxc: Use x86_cpuid_lookup_vendor() rather than opencoding the logic Andrew Cooper
2019-03-26 12:09   ` Jan Beulich
2019-03-21 12:21 ` [PATCH 4/4] libx86: Recalculate synthesised cpuid_policy fields when appropriate Andrew Cooper
2019-03-26 12:20   ` Jan Beulich
2019-03-26 12:34     ` Andrew Cooper
     [not found] <1553170866*23812*1*git*send*email*andrew.cooper3@citrix.com>
     [not found] ` <1553170866*23812*2*git*send*email*andrew.cooper3@citrix.com>
     [not found]   ` <5C9A12690200007800221E05@prv1*mh.provo.novell.com>
     [not found]     ` <c5d1df3d*038d*8c0a*97da*a71f8f3fd009@citrix.com>

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5C9A164B0200007800221E32@prv1-mh.provo.novell.com \
    --to=jbeulich@suse.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=roger.pau@citrix.com \
    --cc=sergey.dyasli@citrix.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.