From: David Woodhouse Date: Fri, 6 Jan 2023 09:59:28 +0000 (+0000) Subject: first shell of gnttab be ops X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=65a74473f1ec62a98bf56f86f72d4e7a321fbd4d;p=users%2Fdwmw2%2Fqemu.git first shell of gnttab be ops Signed-off-by: David Woodhouse --- diff --git a/hw/i386/kvm/xen_gnttab.c b/hw/i386/kvm/xen_gnttab.c index 79805b9f74..b52a6bb7ad 100644 --- a/hw/i386/kvm/xen_gnttab.c +++ b/hw/i386/kvm/xen_gnttab.c @@ -23,6 +23,7 @@ #include "hw/sysbus.h" #include "hw/xen/xen.h" +#include "hw/xen/xen_backend_ops.h" #include "xen_overlay.h" #include "xen_gnttab.h" @@ -59,11 +60,12 @@ struct XenGnttabState { MemoryRegion gnt_frames; MemoryRegion *gnt_aliases; uint64_t *gnt_frame_gpas; + + uint32_t *map_track; }; struct XenGnttabState *xen_gnttab_singleton; - static void xen_gnttab_realize(DeviceState *dev, Error **errp) { XenGnttabState *s = XEN_GNTTAB(dev); @@ -94,6 +96,8 @@ static void xen_gnttab_realize(DeviceState *dev, Error **errp) qemu_mutex_init(&s->gnt_lock); xen_gnttab_singleton = s; + + s->map_track = g_new0(uint32_t, s->max_frames * ENTRIES_PER_FRAME_V1); } static int xen_gnttab_post_load(void *opaque, int version_id) @@ -239,3 +243,63 @@ int xen_gnttab_query_size_op(struct gnttab_query_size *size) size->max_nr_frames = s->max_frames; return 0; } + +struct xengntdev_handle { + GHashTable *maps; +}; + +/* Track per-open refs, to allow close() to clean up. */ +struct instance_map { + void *virt_addr; + grant_ref_t gref; + uint32_t count; +}; + +static int xen_be_gnttab_set_max_grants(struct xengntdev_handle *xgt, uint32_t nr_grants) +{ + return 0; +} + +static void *xen_be_gnttab_map_refs(struct xengntdev_handle *xgt, uint32_t count, + uint32_t domid, uint32_t *refs, int prot) +{ + return NULL; +} + +static int xen_be_gnttab_unmap(struct xengntdev_handle *xgt, + void *start_address, uint32_t count) +{ + return 0; +} + +static int xen_be_gnttab_copy(struct xengntdev_handle *xgt, bool to_domain, uint32_t domid, + XenGrantCopySegment *segs, uint32_t nr_segs, + Error **errp) +{ + return -ENOTSUP; +} + +static struct xengntdev_handle *xen_be_gnttab_open(void) +{ + struct xengntdev_handle *xgt = g_new0(struct xengntdev_handle, 1); + + xgt->maps = g_hash_table_new(g_direct_hash, g_direct_equal); + return xgt; +} + +static int xen_be_gnttab_close(struct xengntdev_handle *xgt) +{ + g_hash_table_destroy(xgt->maps); + g_free(xgt); + return 0; +} + +struct gnttab_backend_ops libxengnttab_backend_ops = { + .open = xen_be_gnttab_open, + .close = xen_be_gnttab_close, + .grant_copy = xen_be_gnttab_copy, + .set_max_grants = xen_be_gnttab_set_max_grants, + .map_refs = xen_be_gnttab_map_refs, + .unmap = xen_be_gnttab_unmap, +}; +