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

Re: [PATCH 04/21] libs/guest: introduce helper to fetch a system cpu policy


  • To: Roger Pau Monne <roger.pau@xxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Date: Thu, 1 Apr 2021 14:56:37 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=J5+D+aArvR5hMHffV4e5iFgHgIfMNVyNOY3VbxMJd5w=; b=ZW6a39PvHk0MwAgW+JjqA04zbvfTPhKzidL9/5DTFKFEWH1gvFZExlugfqIRevdY44eM+pOfEHYh6iG3d35zVUraatucjG2s3JzL231siwjxcqBA/TfR+zi4zhIj4IwRd5mzarOQQitazvXTvjVrdlTeWiZEMvJMp3VkVSEWX+Iv4986uFDKUhl++DugL7uBaJUUBmIPWbTSMSyVRGluJtRg+61mNaQYb6ehp7znguD4pw13ijVzcuDsMvgMkHrmC9XcWWepTnH4XJPijbG7Sj3JDRhh5ChcdKXaGF+12MqQ7G0OpQ/WleD4c1PytBjcaodq9HUGt9h5WspJ5psRfw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=E6w0BnwO74mTKtkEQNBNIrliss3g77WX6uc9gOcmuUIlsed62w5icEkl5j4pt61Be1a6BNmU/puYLQtlMyG4FhtKHxaWTFFWisRWLuI8r4+r8G3ItDhKmMAzAG2QnDvvaycKeq5bu36GhjpKAo2HcOPARv8AnBWapn6dTSEZOKU+GktFNDeR3LCQ7KReCAgWfa14bgQGw1C3OqDv22PmZaVt/mBgN5jHYjfeyghqplP709IhK/GkKOp889kzB3STFECWZ0vzoEWpatFTFh9+BPAKxY1BJs7B1obJrYVvwy6kle4pOsg1Vii4stxnprU2zto5ewm2JdvGlat2NoZZ8w==
  • Authentication-results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: Ian Jackson <iwj@xxxxxxxxxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Thu, 01 Apr 2021 13:56:51 +0000
  • Ironport-hdrordr: A9a23:hVKiUq+jb9UX0jyIBNZuk+FZcL1zdoIgy1knxilNYDRvWIixi9 2ukPMH1RX9lTYWXzUalcqdPbSbKEmwybdc2qNUGbu5RgHptC+TLI9k5Zb/2DGIIUfD38Zn/+ Nbf6B6YeeaMXFTh8z3+RT9Nt4mzsWO/qzAv5an815GSwZ2Z6Z8qyJwDQiGGkN7LTM2fqYRPp ya+8ZBun6caW0aB/7LTEUtcsrig5nwlJzgaQMbHBJP0mWzpB6h9bKSKWn94j4wSDVKqI1CzU HklEjD6ryno7WHzHbnphbuxrB3vPek9ddZHsyLjaEuW3jRoyKlfp5oVbHHnB1dmpDJ1H8QnN PBowgtMq1Ighu/EF2dmhfj1xLt1zwj8RbZuDmlqEH+qs/0Ti9SMbsjuatlcwDU40dlnNZw3L Mj5RP9i7NrDAjNlCm42t7QVxsCrDvXnVMel4co70B3YM87Uvt8vIYf9ERaHNMrByTh8r0qF+ FoEYX1+OtWWUnyVQGXgkBfhPiXGlgjFBaPRUYP/uaP1SJNoXx/x0wEgOQCg3Y78o4nQZUs3Z WLDo1Y0JV1CuMGZ6N0A+kMBeGtDHbWfB7KOGWOZXPqCb8AIHCIj5Ls+r066KWLdfUzvdoPsa WEdGkdmX85ekroB8HL9oZM6ArxTGK0WimoxdpZ45R/p73gVLvmOSCOUzkV4oidisRaJveed+ e4OZpQDfOmB3DpA5x10wr3XIQXKXR2arxWhv8LH3a15u7bIIzjseLWNNzJIqD2LDoiUmTjRn 8KXD35ItRc/lmmM0WIxST5ajfIQAjS7JhwGK/V86w4044WLLBBtQATlBC+/cGEKTpLt6QsZ0 tgKLb7kqe2zFPGvVrg3iFMAF5wH0xV6LLvXzdhvgkRKX75dr4FppGCY2xIxWCGIRV+VsvSFw Zaqz1MiOaKBq3V4RpnJ8OsM2qcgXdWmWmDSI0EnLafoe3/fIkjM5ogUKttNAnCGhBvgzx2oG NbZAJsfD6ZKhrezYGeyL0dHqX2asR1igbDG78vlVvv8WGn4fwJalRedTi0SsKTiRspXFNv9y BM2p5apqGBlzapIXY4m8IiPjR3GSiqKbpbEQWIY5hVkLj3eAd2CXyHnyCelgtbQBuUy2wPnG D7aSWbdfbXa2Atxkxww+Lk9kh5eX6aeF81YndmsZdlHWCDoXpr1/SXD5DDmle5ex8HwusHNi vCbiZXKgRyx8qv3Br9okf0KVw2gpEvNPfaFrItbvXa3W6sMpSBkeUDE+VP9JhocNDovelja5 PoRyaFaDf5AfguwQqbuzIsPzR1smAtlbfwwwL+hVLIrkIXEL7XOhBrVrsbK9aT4yztQOuJyo xwiZYwsfGrOmv8Z9aawcjsHnZ+AwKWpXTzQ/AjqJhSs653rrd1EpXBWTbD1X1M3nwFXbPJvV JbRL4+7KHKO4dpccBXZjlQ+UAxks+TaEQsqQ77D4YFDBoQpm6eO8nM5bXGqbAiWBLc4ATxPE SS6C1b8bPOWTCZ2bsTFqI3JiBXZSEHmQRf1fLHc5eVDgOgM/xH9h69NHS2dbdGUqiLGbkKtH 9BkqS1tv7SczC9wRzauDtwP7lH/GmmS96jGQ7kI584z/WqfVCXxraw6MG9jD3rWSK2ZkQRi4 pCb1ERZK14+0ofpZxy1DOzRKzxql8klFUb4SgPrC+S5rSb
  • Ironport-sdr: 7JS8cJrRJ22H9cNL9IYCiec/zuCz66QRiHfo5/O79ZfNRu/0g6D4Ufz2m56NlLLqr91MIL04WN knCbw827tcywRaztZD5IlpWTeh8lROIeg6ztWp2nPB+JTaDb5TGUTsJeyBpf3ApZ1CfPYwrkmj Byfgmw0Xhk94nG7tCc+8NJLr6mSBHFw1JXPWrO9WWJEggVuM/bs1lquqczV42KAH/AWt5Ki6XA lk2/2/lWq4Ojn0x9bAf1tEXkPAgZGnXbb+mLkp8EgnY9KydbR/3Q3107q8ZM5eKsCLN3K1cQ58 jlg=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 23/03/2021 09:58, Roger Pau Monne wrote:
> Such helper is based on the existing functions to fetch a CPUID and
> MSR policies, but uses the xc_cpu_policy_t type to return the data to
> the caller.
>
> Note some helper functions are introduced, those are split from
> xc_cpu_policy_get_system because they will be used by other functions
> also.
>
> No user of the interface introduced on the patch.
>
> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> ---
>  tools/include/xenctrl.h         |  4 ++
>  tools/libs/guest/xg_cpuid_x86.c | 90 +++++++++++++++++++++++++++++++++
>  2 files changed, 94 insertions(+)
>
> diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h
> index ffb3024bfeb..fc8e4b28781 100644
> --- a/tools/include/xenctrl.h
> +++ b/tools/include/xenctrl.h
> @@ -2596,6 +2596,10 @@ typedef struct cpu_policy *xc_cpu_policy_t;
>  xc_cpu_policy_t xc_cpu_policy_init(void);
>  void xc_cpu_policy_destroy(xc_cpu_policy_t policy);
>  
> +/* Retrieve a system policy, or get/set a domains policy. */
> +int xc_cpu_policy_get_system(xc_interface *xch, unsigned int idx,
> +                             xc_cpu_policy_t policy);

I'd recommend "policy_idx" as the parameter name.

> +static int deserialize_policy(xc_interface *xch, xc_cpu_policy_t policy,
> +                              unsigned int nr_leaves,
> +                              const xen_cpuid_leaf_t *leaves,
> +                              unsigned int nr_msrs, const xen_msr_entry_t 
> *msrs)
> +{
> +    uint32_t err_leaf = -1, err_subleaf = -1, err_msr = -1;
> +    int rc;
> +
> +    rc = x86_cpuid_copy_from_buffer(policy->cpuid, leaves, nr_leaves,
> +                                    &err_leaf, &err_subleaf);
> +    if ( rc )
> +    {
> +        ERROR("Failed to deserialise CPUID (err leaf %#x, subleaf %#x) (%d = 
> %s)",
> +              err_leaf, err_subleaf, -rc, strerror(-rc));
> +        return rc;
> +    }
> +
> +    rc = x86_msr_copy_from_buffer(policy->msr, msrs, nr_msrs, &err_msr);
> +    if ( rc )
> +    {
> +        ERROR("Failed to deserialise MSR (err MSR %#x) (%d = %s)",
> +              err_msr, -rc, strerror(-rc));

We possibly want to split out helpers to render the error information. 
For MSRs, it ought to be something like

if ( msr == -1 )
    // general -ENOMEM etc
else
    // MSR-specific error.  render index and value.

I think we can probably even depend on MSR-specific errors always being
-EINVAL.

~Andrew




 


Rackspace

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