xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Roger Pau Monne <roger.pau@citrix.com>, <xen-devel@lists.xenproject.org>
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>,
	Anthony PERARD <anthony.perard@citrix.com>
Subject: Re: [PATCH v3 07/13] libs/guest: obtain a compatible cpu policy from two input ones
Date: Tue, 4 May 2021 17:50:36 +0100	[thread overview]
Message-ID: <b12d35d6-68f8-6284-d423-e99c43ba9e90@citrix.com> (raw)
In-Reply-To: <20210430155211.3709-8-roger.pau@citrix.com>

On 30/04/2021 16:52, Roger Pau Monne wrote:
> Introduce a helper to obtain a compatible cpu policy based on two
> input cpu policies. Currently this is done by and'ing all CPUID
> feature leaves and MSR entries, except for MSR_ARCH_CAPABILITIES which
> has the RSBA bit or'ed.
>
> The _AC macro is pulled from libxl_internal.h into xen-tools/libs.h
> since it's required in order to use the msr-index.h header.
>
> Note there's no need to place this helper in libx86, since the
> calculation of a compatible policy shouldn't be done from the
> hypervisor.
>
> No callers of the interface introduced.
>
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> ---
> Changes since v2:
>  - Add some comments.
>  - Remove stray double semicolon.
>  - AND all 0x7 subleaves (except 0.EAX).
>  - Explicitly handle MSR indexes in a switch statement.
>  - Error out when an unhandled MSR is found.
>  - Add handling of leaf 0x80000021.
>
> Changes since v1:
>  - Only AND the feature parts of cpuid.
>  - Use a binary search to find the matching leaves and msr entries.
>  - Remove default case from MSR level function.
> ---
>  tools/include/xen-tools/libs.h    |   5 ++
>  tools/include/xenctrl.h           |   4 +
>  tools/libs/guest/xg_cpuid_x86.c   | 137 ++++++++++++++++++++++++++++++
>  tools/libs/light/libxl_internal.h |   2 -

This *needs* to be in libx86.  I don't particularly mind if you start
with it behind #ifdef __XEN__ (I'm still sure we'll need it in the
hypervisor), but this, more than just about anything else, needs to be
covered by the unit tests.

Next, you need to follow the same structure as Xen's cpuid.c for
deriving policies.  You can't just loop through the two serialised forms
like this.

To start with, you want to calculate the min of a/b->max_leaf, then loop
over that pulling information sideways from a/b.

For MSRs, all but MSR_INTEL_PLATFORM_INFO are CPUID qualified, so need
to look like:

if ( out.cpuid.feat.arch_caps )
    out.msr.arch_caps.raw =
        ((a.msr.arch_caps.raw ^ INV_MASK) &
         (b.msr.arch_caps.raw ^ INV_MASK)) ^ INV_MASK;

Where INV_MASK is the mask of arch caps bits which want inverted
polarity.  (Name subject to change - perhap ARCH_CAPS_POLARITY_MASK ?)


I'm sure I had some work starting this somewhere.  I'll see if I can
locate it.

~Andrew



  parent reply	other threads:[~2021-05-04 16:51 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-30 15:51 [PATCH v3 00/13] libs/guest: new CPUID/MSR interface Roger Pau Monne
2021-04-30 15:51 ` [PATCH v3 01/13] libxl: don't ignore the return value from xc_cpuid_apply_policy Roger Pau Monne
2021-05-04 14:07   ` Anthony PERARD
2021-04-30 15:52 ` [PATCH v3 02/13] libs/guest: allow fetching a specific CPUID leaf from a cpu policy Roger Pau Monne
2021-05-04 11:59   ` Andrew Cooper
2021-05-04 13:47     ` Roger Pau Monné
2021-05-04 15:46       ` Andrew Cooper
2021-04-30 15:52 ` [PATCH v3 03/13] libs/guest: allow fetching a specific MSR entry " Roger Pau Monne
2021-05-03 10:41   ` Jan Beulich
2021-05-04 10:56     ` Roger Pau Monné
2021-05-04 11:40       ` Jan Beulich
2021-05-04 11:58         ` Roger Pau Monné
2021-05-04 17:11           ` Andrew Cooper
2021-05-05  7:38             ` Jan Beulich
2021-04-30 15:52 ` [PATCH v3 04/13] libs/guest: allow updating a cpu policy CPUID data Roger Pau Monne
2021-05-04 16:19   ` Andrew Cooper
2021-04-30 15:52 ` [PATCH v3 05/13] libs/guest: allow updating a cpu policy MSR data Roger Pau Monne
2021-05-04 16:20   ` Andrew Cooper
2021-04-30 15:52 ` [PATCH v3 06/13] libs/guest: introduce helper to check cpu policy compatibility Roger Pau Monne
2021-05-04 16:27   ` Andrew Cooper
2021-04-30 15:52 ` [PATCH v3 07/13] libs/guest: obtain a compatible cpu policy from two input ones Roger Pau Monne
2021-05-03 10:43   ` Jan Beulich
2021-05-04 11:56     ` Roger Pau Monné
2021-05-04 12:12       ` Jan Beulich
2021-05-04 16:50   ` Andrew Cooper [this message]
2021-04-30 15:52 ` [PATCH v3 08/13] libs/guest: make a cpu policy compatible with older Xen versions Roger Pau Monne
2021-05-03 11:09   ` Jan Beulich
2021-05-04 15:34     ` Roger Pau Monné
2021-05-05  7:42       ` Jan Beulich
2021-05-06 10:23         ` Roger Pau Monné
2021-05-06 10:52           ` Jan Beulich
2021-04-30 15:52 ` [PATCH v3 09/13] libs/guest: introduce helper set cpu topology in cpu policy Roger Pau Monne
2021-04-30 15:52 ` [PATCH v3 10/13] libs/guest: rework xc_cpuid_xend_policy Roger Pau Monne
2021-04-30 15:52 ` [PATCH v3 11/13] libs/guest: apply a featureset into a cpu policy Roger Pau Monne
2021-04-30 15:52 ` [PATCH v3 12/13] libs/{light,guest}: implement xc_cpuid_apply_policy in libxl Roger Pau Monne
2021-05-04 14:08   ` Anthony PERARD
2021-04-30 15:52 ` [PATCH v3 13/13] libs/guest: (re)move xc_cpu_policy_apply_cpuid Roger Pau Monne
2021-05-04 14:08   ` Anthony PERARD

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=b12d35d6-68f8-6284-d423-e99c43ba9e90@citrix.com \
    --to=andrew.cooper3@citrix.com \
    --cc=anthony.perard@citrix.com \
    --cc=iwj@xenproject.org \
    --cc=roger.pau@citrix.com \
    --cc=wl@xen.org \
    --cc=xen-devel@lists.xenproject.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).