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

Re: [PATCH 6/7] tools: Use new xc function for some xc_domain_getinfo calls


  • To: Alejandro Vallejo <alejandro.vallejo@xxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Date: Thu, 27 Apr 2023 13:35:18 +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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Ex0XMmkcCyK+JshzwV+UnrRjt8dIFduuMrFGElq2B9g=; b=mOi9X0wt4XDNEgIkv6EuK6E8JFDGTnmpjLarWqZNe9eHVKcBEdEDoPuFPzwjk/LLcb2VPoAOguMk9CvylJn5ntneIrbUzcvjUAtt3UPiJrGpqzsqd5ynaLS/gSlDlqOMrGxktrsq9Zl0bt9WZCOyMkZ65Zk3u+rQDiup3kWiMcswiz9+feo8SHuAYwX7OzhyiIIfIIRtXkbPhD3I/VuW4qh9ie7lC5y+GkvN1ZpUVJQ4sQX5rHykN3MdHOR3tGwKkKNoeOQ/NEHbDMHMrVrbEyGbQgb0TjZQfb6LISAPX7wW52AizMJFiRM+4bflI1wbfXxtcjtG/JXtWLdN6e46Cg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X0iwS9Y4qvTCOq2Nw4Im/9tPNcZyBcYU/h8c/aBYTgnJpdZML5E0D82up77RDhoigJAzM8PktDh4PVQePnJ3wtuR9hYIHYRL+OyylOJUZbIclhE5Cb8lsZL+JFxdBK8K+WftnNIzII4Q38yQJpZqAjZkDHOEFyNWTwf9diIUHRydIJzqXFy2OsXq4/cCO//uySBHBfhiXZ/8gksbwJ18yyt4kTaFTu6xC6C2TtJOl0lGC28WsLNn5P1q7znbyewKXp/rkXgIu/6ETm8bemAFnvk86xUudb8Ye46JseNbpfrGj+AwG8lK4oGgUi4PQ0PIyC0iooS/JU5nLmjlYli7Qw==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Wei Liu <wl@xxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Tim Deegan <tim@xxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>
  • Delivery-date: Thu, 27 Apr 2023 12:35:39 +0000
  • Ironport-data: A9a23:YQWWWqKMD/r9DRfAFE+RBJQlxSXFcZb7ZxGr2PjKsXjdYENS0WAGm jEcDWzVb/bbMWT0c9ByYYnj80wBuZCAy9VhGQVlqX01Q3x08seUXt7xwmUcnc+xBpaaEB84t ZV2hv3odp1coqr0/0/1WlTZhSAgk/rOHvykU7Ss1hlZHWdMUD0mhQ9oh9k3i4tphcnRKw6Ws Jb5rta31GWNglaYCUpJrfPSwP9TlK6q4mhA4gZhPaojUGL2zBH5MrpOfcldEFOgKmVkNrbSb /rOyri/4lTY838FYj9yuu+mGqGiaue60Tmm0hK6aYD76vRxjnVaPpIAHOgdcS9qZwChxLid/ jnvWauYEm/FNoWU8AgUvoIx/ytWZcWq85efSZSzXFD6I+QrvBIAzt03ZHzaM7H09c5TXzx25 flJMAoObzfbmbKHwrS9EfdF05FLwMnDZOvzu1lG5BSAVLMKZM6GRK/Ho9hFwD03m8ZCW+7EY NYUYiZuaxKGZABTPlAQC9Q1m+LAanvXKmUE7g7K4/dopTGNnWSd05C0WDbRUvWMSd9YgQCzo WXe8n6iKhobKMae2XyO9XfEaurnxHukBN1DTeHonhJsqAWY4WVPNDc8bgT4jqKEpGvkANwYD nVBr0LCqoB3riRHVOLVVhm1oneCsgQbHcRZF+k36galwa7T/grfDW8BJhZRZdpjuMIoSDgC0 l6Sg8ivFTFpqKeSS3+W6vGTtzzaETcRBX8PY2kDVwRty8XipakjgxSJScxseIa3gcfyAirY2 C2RoW41gLB7sCIQ/6Cy/FSCjzfyoJHMF1cx/l+OADPj6R5lbom4YYDu8ULc8ftLMIeeSB+Go WQAnM+dqusJCPlhiRCwfQnEJ5nxj97tDdEWqQcH80UJn9h1x0OeQA==
  • Ironport-hdrordr: A9a23:1lVBrqHnvT+x638tpLqF9ZLXdLJyesId70hD6qkvc3Fom52j/f xGws5x6faVslkssb8b6Km90dq7MBThHPlOkPQs1NaZLXPbUQ6TQL2KgrGSoAEIdxeOk9K1kJ 0QCJSWa+eAc2SS7/yb3ODQKb9Jrri6GeKT9J/jJh9WPH5XgspbnmNE42igYytLrUV9dPgE/M 323Ls6m9PsQwVeUiz9bUN1LdTrlpnurtbLcBQGDxko5E2nii6p0qfzF1y1zwoTSDRGxJYl6C zgnxbi7quunvmnwluEvlWjo6h+qZ/E8J9uFcaMgs8aJnHFjRupXp1oX/mvrS04u+am7XctiZ 3prw07N8p+xnvNdiWeoAfr2SPnzDEygkWShGOwsD/Gm4jUVTg6A81OicZwdQbY0VMpuJVZ3L hQ12yUmpJLBVeY9R6NreTgZlVPrA6ZsHAimekcgzh2VpYfUqZYqcg68FlOGJkNMSrm4MQMEf VoDuvb+PFKGGnqJEzxjy1K+piBT34zFhCJTgwrvdGU6SFfmDRDw04R1KUk7wA93aN4b6MBy/ XPM6xumr0LZNQRd7hBCOAIRtbyInDRQDrXWVjiYWjPJeUiATbgupT36LI66KWBY5oT1qY/n5 zHTRdxqXMyQUTzEseDtac7sywleF/NHwgF9/suoqSQ4tbHNf7W2Gy4OR4TevKb0rYi6paxYY f1BHpUa8WTWVcGV7w5mTEWYKMiWkX2YPdly+rTZGj+0v4jCreawNAzI8yjbYbFIHIDZl7VJE clcXzaGPhgh3rbL0MQxiKhFE/QRg==
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 26/04/2023 3:59 pm, Alejandro Vallejo wrote:
> diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x86.c
> index bd16a87e48..6d260d2cff 100644
> --- a/tools/libs/guest/xg_cpuid_x86.c
> +++ b/tools/libs/guest/xg_cpuid_x86.c
> @@ -281,7 +281,8 @@ static int xc_cpuid_xend_policy(
>      xc_interface *xch, uint32_t domid, const struct xc_xend_cpuid *xend)
>  {
>      int rc;
> -    xc_dominfo_t di;
> +    bool is_hvm;

I know it makes a slightly larger diff, but simply "bool hvm" is what we
use more commonly elsewhere.

> +    xc_domaininfo_t di;
>      unsigned int nr_leaves, nr_msrs;
>      uint32_t err_leaf = -1, err_subleaf = -1, err_msr = -1;
>      /*
> @@ -291,13 +292,13 @@ static int xc_cpuid_xend_policy(
>      xen_cpuid_leaf_t *host = NULL, *def = NULL, *cur = NULL;
>      unsigned int nr_host, nr_def, nr_cur;
>  
> -    if ( xc_domain_getinfo(xch, domid, 1, &di) != 1 ||
> -         di.domid != domid )
> +    if ( xc_domain_getinfo_single(xch, domid, &di) < 0 )
>      {
>          ERROR("Failed to obtain d%d info", domid);
>          rc = -ESRCH;

Now that xc_domain_getinfo_single() has a sane return value, you want to
set it in the if(), and not override to ESRCH here.

These two comments repeat several other times.

> diff --git a/tools/libs/guest/xg_dom_boot.c b/tools/libs/guest/xg_dom_boot.c
> index 263a3f4c85..59b4d641c9 100644
> --- a/tools/libs/guest/xg_dom_boot.c
> +++ b/tools/libs/guest/xg_dom_boot.c
> @@ -164,7 +164,7 @@ void *xc_dom_boot_domU_map(struct xc_dom_image *dom, 
> xen_pfn_t pfn,
>  
>  int xc_dom_boot_image(struct xc_dom_image *dom)
>  {
> -    xc_dominfo_t info;
> +    xc_domaininfo_t info;
>      int rc;
>  
>      DOMPRINTF_CALLED(dom->xch);
> @@ -174,21 +174,13 @@ int xc_dom_boot_image(struct xc_dom_image *dom)
>          return rc;
>  
>      /* collect some info */
> -    rc = xc_domain_getinfo(dom->xch, dom->guest_domid, 1, &info);
> +    rc = xc_domain_getinfo_single(dom->xch, dom->guest_domid, &info);
>      if ( rc < 0 )
>      {
>          xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
>                       "%s: getdomaininfo failed (rc=%d)", __FUNCTION__, rc);
>          return rc;

This need to change to -1, or you've broken the error convention of this
function.  (Yes, libxc is a giant mess of error handling...)

> diff --git a/tools/libs/guest/xg_resume.c b/tools/libs/guest/xg_resume.c
> index 77e2451a3c..60d682c746 100644
> --- a/tools/libs/guest/xg_resume.c
> +++ b/tools/libs/guest/xg_resume.c
> @@ -26,28 +26,27 @@
>  static int modify_returncode(xc_interface *xch, uint32_t domid)
>  {
>      vcpu_guest_context_any_t ctxt;
> -    xc_dominfo_t info;
> +    xc_domaininfo_t info;
>      xen_capabilities_info_t caps;
>      struct domain_info_context _dinfo = {};
>      struct domain_info_context *dinfo = &_dinfo;
>      int rc;
>  
> -    if ( xc_domain_getinfo(xch, domid, 1, &info) != 1 ||
> -         info.domid != domid )
> +    if ( xc_domain_getinfo_single(xch, domid, &info) < 0 )
>      {
>          PERROR("Could not get domain info");
>          return -1;
>      }
>  
> -    if ( !info.shutdown || (info.shutdown_reason != SHUTDOWN_suspend) )
> +    if ( !dominfo_shutdown_with(&info, SHUTDOWN_suspend))

Needs a space at the end.

> diff --git a/tools/libs/guest/xg_sr_restore.c 
> b/tools/libs/guest/xg_sr_restore.c
> index 7314a24cf9..a03183f4b9 100644
> --- a/tools/libs/guest/xg_sr_restore.c
> +++ b/tools/libs/guest/xg_sr_restore.c
> @@ -887,20 +888,15 @@ int xc_domain_restore(xc_interface *xch, int io_fd, 
> uint32_t dom,
>          break;
>      }
>  
> -    if ( xc_domain_getinfo(xch, dom, 1, &ctx.dominfo) != 1 )
> +    if ( xc_domain_getinfo_single(xch, dom, &ctx.dominfo) < 0 )
>      {
>          PERROR("Failed to get domain info");
>          return -1;
>      }
>  
> -    if ( ctx.dominfo.domid != dom )
> -    {
> -        ERROR("Domain %u does not exist", dom);
> -        return -1;
> -    }
> -
> +    is_hvm = !!(ctx.dominfo.flags & XEN_DOMINF_hvm_guest);

No need for !! now you switched this to bool.

> diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c
> index 9853d8d846..8fc8e9d3b2 100644
> --- a/tools/libs/guest/xg_sr_save.c
> +++ b/tools/libs/guest/xg_sr_save.c
> @@ -996,17 +994,13 @@ int xc_domain_save(xc_interface *xch, int io_fd, 
> uint32_t dom,
>      ctx.save.debug = !!(flags & XCFLAGS_DEBUG);
>      ctx.save.recv_fd = recv_fd;
>  
> -    if ( xc_domain_getinfo(xch, dom, 1, &ctx.dominfo) != 1 )
> +    if ( xc_domain_getinfo_single(xch, dom, &ctx.dominfo) < 0 )
>      {
>          PERROR("Failed to get domain info");
>          return -1;
>      }
>  
> -    if ( ctx.dominfo.domid != dom )
> -    {
> -        ERROR("Domain %u does not exist", dom);
> -        return -1;
> -    }
> +    is_hvm = !!(ctx.dominfo.flags & XEN_DOMINF_hvm_guest);

Same here.  Can drop the !!.

> diff --git a/tools/misc/xen-lowmemd.c b/tools/misc/xen-lowmemd.c
> index a3a2741242..b483f63fdc 100644
> --- a/tools/misc/xen-lowmemd.c
> +++ b/tools/misc/xen-lowmemd.c
> @@ -38,7 +38,7 @@ void cleanup(void)
>  #define BUFSZ 512
>  void handle_low_mem(void)
>  {
> -    xc_dominfo_t  dom0_info;
> +    xc_domaininfo_t  dom0_info;

Use this opportunity to remove the double space.

> diff --git a/tools/vchan/vchan-socket-proxy.c 
> b/tools/vchan/vchan-socket-proxy.c
> index e1d959c6d1..9c4c336b03 100644
> --- a/tools/vchan/vchan-socket-proxy.c
> +++ b/tools/vchan/vchan-socket-proxy.c
> @@ -254,12 +254,12 @@ static struct libxenvchan *connect_vchan(int domid, 
> const char *path) {
>          if (ctrl)
>              break;
>  
> -        ret = xc_domain_getinfo(xc, domid, 1, &dominfo);
> +        ret = xc_domain_getinfo_single(xc, domid, &dominfo);
>          /* break the loop if domain is definitely not there anymore, but
>           * continue if it is or the call failed (like EPERM) */
>          if (ret == -1 && errno == ESRCH)

Oh wow... so this bit of vchan was written expecting sane semantics out
of xc_domain_getinfo() in the first place...

This needs adjusting too because of the -1/errno -> -errno change.

~Andrew



 


Rackspace

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