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

Re: [Xen-devel] [PATCH RFC] xen/sysfs: Use XENVER_guest_handle to query UUID



On Thu, Aug 16, 2012 at 11:25:15AM -0700, Daniel De Graaf wrote:
> The /sys/hypervisor/uuid path relies on Xenstore to query the domain's
> UUID (handle) even when the hypervisor exposes an interface to more
> directly and efficiently query this. The xenstore path /vm/UUID which is
> used for the current query is being discussed for possible removal as
> most of the information under this path is only useful for the
> toolstack, not the VM.
> 
> The UUID fetched from xenstore may also not be properly formatted as a
> UUID for the domain if the UUID has been reused (this is most often seen
> in domain 0, which if xenstored does not clean up /vm properly, can end
> up with a UUID field like "00000000-0000-0000-0000-000000000000-5").
> 
> ----8<-----------------------------------------------------
> 
> This hypercall has been present since Xen 3.1, and is the preferred
> method for a domain to obtain its UUID.

Hi Daniel,

What do you think about retaining a fallback of looking in xenstore if
the hypercall fails?

Matt

> Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
> ---
>  drivers/xen/sys-hypervisor.c    | 20 +++++---------------
>  include/xen/interface/version.h |  3 +++
>  2 files changed, 8 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/xen/sys-hypervisor.c b/drivers/xen/sys-hypervisor.c
> index 4c7db7d..416fa01 100644
> --- a/drivers/xen/sys-hypervisor.c
> +++ b/drivers/xen/sys-hypervisor.c
> @@ -116,22 +116,12 @@ static void xen_sysfs_version_destroy(void)
>  
>  static ssize_t uuid_show(struct hyp_sysfs_attr *attr, char *buffer)
>  {
> -     char *vm, *val;
> +     xen_domain_handle_t uuid;
>       int ret;
> -     extern int xenstored_ready;
> -
> -     if (!xenstored_ready)
> -             return -EBUSY;
> -
> -     vm = xenbus_read(XBT_NIL, "vm", "", NULL);
> -     if (IS_ERR(vm))
> -             return PTR_ERR(vm);
> -     val = xenbus_read(XBT_NIL, vm, "uuid", NULL);
> -     kfree(vm);
> -     if (IS_ERR(val))
> -             return PTR_ERR(val);
> -     ret = sprintf(buffer, "%s\n", val);
> -     kfree(val);
> +     ret = HYPERVISOR_xen_version(XENVER_guest_handle, uuid);
> +     if (ret)
> +             return ret;
> +     ret = sprintf(buffer, "%pU\n", uuid);
>       return ret;
>  }
>  
> diff --git a/include/xen/interface/version.h b/include/xen/interface/version.h
> index e8b6519..dd58cf5 100644
> --- a/include/xen/interface/version.h
> +++ b/include/xen/interface/version.h
> @@ -60,4 +60,7 @@ struct xen_feature_info {
>  /* arg == NULL; returns host memory page size. */
>  #define XENVER_pagesize 7
>  
> +/* arg == xen_domain_handle_t. */
> +#define XENVER_guest_handle 8
> +
>  #endif /* __XEN_PUBLIC_VERSION_H__ */

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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