All of lore.kernel.org
 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>
Subject: Re: [PATCH 03/21] libs/guest: introduce xc_cpu_policy_t
Date: Wed, 31 Mar 2021 21:10:13 +0100	[thread overview]
Message-ID: <7f52bd98-24fd-95ba-f8c6-05a331941b49@citrix.com> (raw)
In-Reply-To: <20210323095849.37858-4-roger.pau@citrix.com>

On 23/03/2021 09:58, Roger Pau Monne wrote:
> Introduce an opaque type that is used to store the CPUID and MSRs
> policies of a domain. Such type uses the existing cpu_policy structure
> to store the data, but doesn't expose the type to the users of the
> xenguest library.
>
> Introduce an allocation (init) and freeing function (destroy) to
> manage the type.
>
> Note the type is not yet used anywhere.
>
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> ---
>  tools/include/xenctrl.h         |  6 ++++++
>  tools/libs/guest/xg_cpuid_x86.c | 28 ++++++++++++++++++++++++++++
>  2 files changed, 34 insertions(+)
>
> diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h
> index e91ff92b9b1..ffb3024bfeb 100644
> --- a/tools/include/xenctrl.h
> +++ b/tools/include/xenctrl.h
> @@ -2590,6 +2590,12 @@ int xc_psr_get_domain_data(xc_interface *xch, uint32_t domid,
>  int xc_psr_get_hw_info(xc_interface *xch, uint32_t socket,
>                         xc_psr_feat_type type, xc_psr_hw_info *hw_info);
>  
> +typedef struct cpu_policy *xc_cpu_policy_t;
> +
> +/* Create and free a xc_cpu_policy object. */
> +xc_cpu_policy_t xc_cpu_policy_init(void);
> +void xc_cpu_policy_destroy(xc_cpu_policy_t policy);
> +
>  int xc_get_cpu_levelling_caps(xc_interface *xch, uint32_t *caps);
>  int xc_get_cpu_featureset(xc_interface *xch, uint32_t index,
>                            uint32_t *nr_features, uint32_t *featureset);
> diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x86.c
> index 9846f81e1f1..ade5281c178 100644
> --- a/tools/libs/guest/xg_cpuid_x86.c
> +++ b/tools/libs/guest/xg_cpuid_x86.c
> @@ -659,3 +659,31 @@ out:
>  
>      return rc;
>  }
> +
> +xc_cpu_policy_t xc_cpu_policy_init(void)
> +{
> +    xc_cpu_policy_t policy = calloc(1, sizeof(*policy));
> +
> +    if ( !policy )
> +        return NULL;
> +
> +    policy->cpuid = calloc(1, sizeof(*policy->cpuid));
> +    policy->msr = calloc(1, sizeof(*policy->msr));
> +    if ( !policy->cpuid || !policy->msr )
> +    {
> +        xc_cpu_policy_destroy(policy);
> +        return NULL;
> +    }
> +
> +    return policy;
> +}
> +
> +void xc_cpu_policy_destroy(xc_cpu_policy_t policy)
> +{
> +    if ( !policy )
> +        return;
> +
> +    free(policy->cpuid);
> +    free(policy->msr);
> +    free(policy);
> +}

Looking at the series as a whole, we have a fair quantity of complexity
from short-lived dynamic allocations.

I suspect that the code would be rather better if we had

struct xc_cpu_policy {
    struct cpuid_policy cpuid;
    struct msr_policy msr;
    xen_cpuid_leaf_t leaves[CPUID_MAX_SERIALISED_LEAVES];
    xen_msr_entry_t msrs[MSR_MAX_SERIALISED_ENTRIES];
    /* Names perhaps subject to improvement */
};

and just made one memory allocation.

This is userspace after all, and we're taking about <4k at the moment.

All operations with Xen need to bounce through the leaves/msrs encoding
(so we're using the space a minimum of twice for any logical operation
at the higher level), and several userspace-only operations use them too.

~Andrew



  reply	other threads:[~2021-03-31 20:10 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-23  9:58 [PATCH 00/21] libs/guest: new CPUID/MSR interface Roger Pau Monne
2021-03-23  9:58 ` [PATCH 01/21] libxl: don't ignore the return value from xc_cpuid_apply_policy Roger Pau Monne
2021-03-30 15:21   ` Jan Beulich
2021-03-30 15:38   ` Andrew Cooper
2021-03-31 18:12   ` Andrew Cooper
2021-03-23  9:58 ` [PATCH 02/21] libs/guest: rename xc_get_cpu_policy_size to xc_cpu_policy_get_size Roger Pau Monne
2021-03-31 19:03   ` Andrew Cooper
2021-03-23  9:58 ` [PATCH 03/21] libs/guest: introduce xc_cpu_policy_t Roger Pau Monne
2021-03-31 20:10   ` Andrew Cooper [this message]
2021-04-01  8:48     ` Roger Pau Monné
2021-03-23  9:58 ` [PATCH 04/21] libs/guest: introduce helper to fetch a system cpu policy Roger Pau Monne
2021-03-30 15:35   ` Jan Beulich
2021-04-01 13:56   ` Andrew Cooper
2021-03-23  9:58 ` [PATCH 05/21] libs/guest: introduce helper to fetch a domain " Roger Pau Monne
2021-03-30 15:37   ` Jan Beulich
2021-03-31 11:06     ` Roger Pau Monné
2021-04-01 13:32       ` Andrew Cooper
2021-03-23  9:58 ` [PATCH 06/21] libs/guest: introduce helper to serialize a " Roger Pau Monne
2021-03-23  9:58 ` [PATCH 07/21] tools: switch existing users of xc_get_{system,domain}_cpu_policy Roger Pau Monne
2021-03-23  9:58 ` [PATCH 08/21] libs/guest: introduce a helper to apply a cpu policy to a domain Roger Pau Monne
2021-03-23  9:58 ` [PATCH 09/21] libs/guest: allow fetching a specific CPUID leaf from a cpu policy Roger Pau Monne
2021-04-01 14:47   ` Andrew Cooper
2021-04-08 15:53     ` Roger Pau Monné
2021-03-23  9:58 ` [PATCH 10/21] libs/guest: allow fetching a specific MSR entry " Roger Pau Monne
2021-03-23  9:58 ` [PATCH 11/21] libs/guest: allow updating a cpu policy CPUID data Roger Pau Monne
2021-03-30 15:56   ` Jan Beulich
2021-03-31 12:47     ` Roger Pau Monné
2021-04-01 14:55   ` Andrew Cooper
2021-03-23  9:58 ` [PATCH 12/21] libs/guest: allow updating a cpu policy MSR data Roger Pau Monne
2021-03-23  9:58 ` [PATCH 13/21] libs/guest: switch users of xc_set_domain_cpu_policy Roger Pau Monne
2021-04-01 15:04   ` Andrew Cooper
2021-03-23  9:58 ` [PATCH 14/21] libs/guest: introduce helper to check cpu policy compatibility Roger Pau Monne
2021-03-30 16:02   ` Jan Beulich
2021-03-31 12:40     ` Roger Pau Monné
2021-03-31 14:57       ` Jan Beulich
2021-04-01 16:14   ` Andrew Cooper
2021-03-23  9:58 ` [PATCH 15/21] libs/guest: obtain a compatible cpu policy from two input ones Roger Pau Monne
2021-03-31 15:24   ` Jan Beulich
2021-04-01 16:26   ` Andrew Cooper
2021-04-09 10:56     ` Roger Pau Monné
2021-03-23  9:58 ` [PATCH 16/21] libs/guest: make a cpu policy compatible with older Xen versions Roger Pau Monne
2021-03-31 15:29   ` Jan Beulich
2021-04-01 16:31   ` Andrew Cooper
2021-03-23  9:58 ` [PATCH 17/21] libs/guest: introduce helper set cpu topology in cpu policy Roger Pau Monne
2021-04-01 17:22   ` Andrew Cooper
2021-03-23  9:58 ` [PATCH 18/21] libs/guest: rework xc_cpuid_xend_policy Roger Pau Monne
2021-03-23  9:58 ` [PATCH 19/21] libs/guest: apply a featureset into a cpu policy Roger Pau Monne
2021-03-23  9:58 ` [PATCH 20/21] libs/{light,guest}: implement xc_cpuid_apply_policy in libxl Roger Pau Monne
2021-04-01 17:44   ` Andrew Cooper
2021-04-09 14:57     ` Roger Pau Monné
2021-03-23  9:58 ` [PATCH 21/21] libs/guest: (re)move xc_cpu_policy_apply_cpuid Roger Pau Monne
2021-04-01 17:53   ` Andrew Cooper

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=7f52bd98-24fd-95ba-f8c6-05a331941b49@citrix.com \
    --to=andrew.cooper3@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 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.