]> xenbits.xensource.com Git - people/pauldu/qemu.git/commitdiff
hw/xen: Map guest XENSTORE_PFN grant in emulated Xenstore
authorDavid Woodhouse <dwmw@amazon.co.uk>
Sat, 7 Jan 2023 13:54:07 +0000 (13:54 +0000)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Fri, 20 Jan 2023 12:28:53 +0000 (12:28 +0000)
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
hw/i386/kvm/xen_xenstore.c

index 7bd59705272c6b26ead488346ea4266584af0b9a..a77ab30816ecfa16e653743b445bae15ca818b64 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "hw/sysbus.h"
 #include "hw/xen/xen.h"
+#include "hw/xen/xen_backend_ops.h"
 #include "xen_overlay.h"
 #include "xen_evtchn.h"
 #include "xen_xenstore.h"
 
 #include "standard-headers/xen/io/xs_wire.h"
 #include "standard-headers/xen/event_channel.h"
+#include "standard-headers/xen/grant_table.h"
 
 #define TYPE_XEN_XENSTORE "xen-xenstore"
 OBJECT_DECLARE_SIMPLE_TYPE(XenXenstoreState, XEN_XENSTORE)
 
-#define XEN_PAGE_SHIFT 12
-#define XEN_PAGE_SIZE (1ULL << XEN_PAGE_SHIFT)
-
 #define ENTRIES_PER_FRAME_V1 (XEN_PAGE_SIZE / sizeof(grant_entry_v1_t))
 #define ENTRIES_PER_FRAME_V2 (XEN_PAGE_SIZE / sizeof(grant_entry_v2_t))
 
@@ -59,6 +58,8 @@ struct XenXenstoreState {
     evtchn_port_t guest_port;
     evtchn_port_t be_port;
     struct xenevtchn_handle *eh;
+    struct xengntdev_handle *gt;
+    void *granted_xs;
 };
 
 struct XenXenstoreState *xen_xenstore_singleton;
@@ -461,5 +462,11 @@ int xen_xenstore_reset(void)
     }
     s->be_port = err;
 
+    s->gt = qemu_xen_gnttab_open();
+    uint32_t xs_gntref = GNTTAB_RESERVED_XENSTORE;
+    s->granted_xs = qemu_xen_gnttab_map_refs(s->gt, 1, xen_domid,
+                                             &xs_gntref, PROT_READ|PROT_WRITE);
+    printf("Granted XS %p\n", s->granted_xs);
+
     return 0;
 }