On 02/03/2023 15:34, David Woodhouse wrote:
> From: David Woodhouse <dwmw@amazon.co.uk>
>
> Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
> ---
> hw/i386/kvm/xen_xenstore.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/hw/i386/kvm/xen_xenstore.c b/hw/i386/kvm/xen_xenstore.c
> index 028f80499e..f9b7387024 100644
> --- a/hw/i386/kvm/xen_xenstore.c
> +++ b/hw/i386/kvm/xen_xenstore.c
> @@ -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"
> @@ -34,6 +35,7 @@
>
> #include "hw/xen/interface/io/xs_wire.h"
> #include "hw/xen/interface/event_channel.h"
> +#include "hw/xen/interface/grant_table.h"
>
> #define TYPE_XEN_XENSTORE "xen-xenstore"
> OBJECT_DECLARE_SIMPLE_TYPE(XenXenstoreState, XEN_XENSTORE)
> @@ -66,6 +68,9 @@ struct XenXenstoreState {
>
> uint8_t *impl_state;
> uint32_t impl_state_size;
> +
> + struct xengntdev_handle *gt;
> + void *granted_xs;
> };
>
> struct XenXenstoreState *xen_xenstore_singleton;
> @@ -1452,6 +1457,17 @@ int xen_xenstore_reset(void)
> }
> s->be_port = err;
>
> + /*
> + * 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
> + * first place. Map the grant anyway, mostly for cosmetic purposes so
> + * it *looks* like it's in use in the guest-visible grant table.
Might be useful to stick this text in the commit comment too.
Reviewed-by: Paul Durrant <paul@xen.org>
> + */
> + 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);
> +
> return 0;
> }
>