Message ID | 20231016151909.22133-6-dwmw2@infradead.org |
---|---|
State | New |
Headers | show |
Series | Get Xen PV shim running in qemu | expand |
On 16/10/2023 16:19, David Woodhouse wrote: > From: David Woodhouse <dwmw@amazon.co.uk> > > 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 ^ typo > 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. > ... although this can also be done by querying the remote end of the port before reset. > Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> > --- > hw/i386/kvm/xen_xenstore.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > Reviewed-by: Paul Durrant <paul@xen.org>
On Tue, 2023-10-24 at 13:35 +0100, Paul Durrant wrote: > On 16/10/2023 16:19, David Woodhouse wrote: > > From: David Woodhouse <dwmw@amazon.co.uk> > > > > 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 > > ^ typo > > > 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. > > > > ... although this can also be done by querying the remote end of the > port before reset. > I think you had to do that anyway; I don't think I was supposed to be putting s->be_port in there anyway; it was supposed to be the *frontend* port, and I've changed that in my tree. I'll drop this whole sentence (and fix the typo). > > Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> > > --- > > hw/i386/kvm/xen_xenstore.c | 10 ++++++++++ > > 1 file changed, 10 insertions(+) > > > > Reviewed-by: Paul Durrant <paul@xen.org> >
diff --git a/hw/i386/kvm/xen_xenstore.c b/hw/i386/kvm/xen_xenstore.c index d2b311109b..3300e0614a 100644 --- a/hw/i386/kvm/xen_xenstore.c +++ b/hw/i386/kvm/xen_xenstore.c @@ -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