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

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



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.

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__ */
-- 
1.7.11.2


_______________________________________________
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®.