]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
hw/xen: populate store frontend nodes with XenStore PFN/port
authorDavid Woodhouse <dwmw@amazon.co.uk>
Thu, 12 Oct 2023 09:59:45 +0000 (10:59 +0100)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Thu, 12 Oct 2023 09:59:45 +0000 (10:59 +0100)
This is kind of redundant since without being able to get these through
ome other method (HVMOP_get_param) the guest wouldn't be able to access
XenStore in order to find them. But Xen populates them, and it does
allow guests to *rebind* to the event channel port after a reset.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
hw/i386/kvm/xen_xenstore.c

index d2b311109b8a8598d2345c1620c53c64741b56ad..3300e0614a951b032a56ab37349c367254ece3f5 100644 (file)
@@ -1432,6 +1432,7 @@ static void alloc_guest_port(XenXenstoreState *s)
 int xen_xenstore_reset(void)
 {
     XenXenstoreState *s = xen_xenstore_singleton;
+    GList *perms;
     int err;
 
     if (!s) {
@@ -1459,6 +1460,15 @@ int xen_xenstore_reset(void)
     }
     s->be_port = err;
 
+    /* Create frontend store nodes */
+    perms = g_list_append(NULL, xs_perm_as_string(XS_PERM_NONE, DOMID_QEMU));
+    perms = g_list_append(perms, xs_perm_as_string(XS_PERM_READ, xen_domid));
+
+    relpath_printf(s, perms, "store/ring-ref", "%lu", XEN_SPECIAL_PFN(XENSTORE));
+    relpath_printf(s, perms, "store/port", "%u", s->be_port);
+
+    g_list_free_full(perms, g_free);
+
     /*
      * We don't actually access the guest's page through the grant, because
      * this isn't real Xen, and we can just use the page we gave it in the