[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 3/5] xen/arm: configure dom0less domain for enabling xenstore after boot
On Sat, 29 Jan 2022, Julien Grall wrote: > On 28/01/2022 21:33, Stefano Stabellini wrote: > > From: Luca Miccio <lucmiccio@xxxxxxxxx> > > > > If "xen,enhanced" is enabled, then add to dom0less domains: > > > > - the hypervisor node in device tree > > - the xenstore event channel > > > > The xenstore event channel is also used for the first notification to > > let the guest know that xenstore has become available. > > > > Signed-off-by: Luca Miccio <lucmiccio@xxxxxxxxx> > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx> > > Reviewed-by: Bertrand Marquis <bertrand.marquis@xxxxxxx> > > CC: Julien Grall <julien@xxxxxxx> > > CC: Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx> > > CC: Bertrand Marquis <bertrand.marquis@xxxxxxx> > > > > --- > > Changes in v3: > > - use evtchn_alloc_unbound > > > > Changes in v2: > > - set HVM_PARAM_STORE_PFN to ~0ULL at domain creation > > - in alloc_xenstore_evtchn do not call _evtchn_alloc_unbound > > --- > > xen/arch/arm/domain_build.c | 41 +++++++++++++++++++++++++++++++++++++ > > 1 file changed, 41 insertions(+) > > > > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c > > index 9144d6c0b6..8e030a7f05 100644 > > --- a/xen/arch/arm/domain_build.c > > +++ b/xen/arch/arm/domain_build.c > > @@ -27,6 +27,7 @@ > > #include <asm/setup.h> > > #include <asm/cpufeature.h> > > #include <asm/domain_build.h> > > +#include <xen/event.h> > > #include <xen/irq.h> > > #include <xen/grant_table.h> > > @@ -2619,6 +2620,8 @@ static int __init prepare_dtb_domU(struct domain *d, > > struct kernel_info *kinfo) > > int ret; > > kinfo->phandle_gic = GUEST_PHANDLE_GIC; > > + kinfo->gnttab_start = GUEST_GNTTAB_BASE; > > + kinfo->gnttab_size = GUEST_GNTTAB_SIZE; > > addrcells = GUEST_ROOT_ADDRESS_CELLS; > > sizecells = GUEST_ROOT_SIZE_CELLS; > > @@ -2693,6 +2696,13 @@ static int __init prepare_dtb_domU(struct domain *d, > > struct kernel_info *kinfo) > > goto err; > > } > > + if ( kinfo->dom0less_enhanced ) > > + { > > + ret = make_hypervisor_node(d, kinfo, addrcells, sizecells); > > Looking at the code, I think the extended regions will not work properly > because we are looking at the host memory layout. In the case of domU, we want > to use the guest layout. Please have a look how it was done in libxl. Yeah you are right, I'll do that. > > + if ( ret ) > > + goto err; > > + } > > + > > ret = fdt_end_node(kinfo->fdt); > > if ( ret < 0 ) > > goto err; > > @@ -2959,6 +2969,25 @@ static int __init construct_domain(struct domain *d, > > struct kernel_info *kinfo) > > return 0; > > } > > +static int __init alloc_xenstore_evtchn(struct domain *d) > > +{ > > + evtchn_alloc_unbound_t alloc; > > + int rc; > > + > > + alloc.dom = d->domain_id; > > + alloc.remote_dom = hardware_domain->domain_id; > > The first thing evtchn_alloc_unbound() will do is looking up the domain. This > seems a bit pointless given that we have the domain in hand. Shouldn't we > extend evtchn_alloc_unbound() to pass the domain? That's a good point, but I actually think it is better to go back to [2]. The evtchn_alloc_unbound discussion is still ongoing but I'll keep this suggestion in mind. [2] https://marc.info/?l=xen-devel&m=164203543615114 > > + rc = evtchn_alloc_unbound(&alloc, true); > > + if ( rc ) > > + { > > + printk("Failed allocating event channel for domain\n"); > > + return rc; > > + } > > + > > + d->arch.hvm.params[HVM_PARAM_STORE_EVTCHN] = alloc.port; > > + > > + return 0; > > +} > > + > > static int __init construct_domU(struct domain *d, > > const struct dt_device_node *node) > > { > > @@ -3014,7 +3043,19 @@ static int __init construct_domU(struct domain *d, > > return rc; > > if ( kinfo.vpl011 ) > > + { > > rc = domain_vpl011_init(d, NULL); > > + if ( rc < 0 ) > > + return rc; > > + } > > + > > + if ( kinfo.dom0less_enhanced ) > > + { > > + rc = alloc_xenstore_evtchn(d); > > + if ( rc < 0 ) > > + return rc; > > + d->arch.hvm.params[HVM_PARAM_STORE_PFN] = ~0ULL; > > I think it would be easy to allocate the page right now. So what prevent us to > do it right now? Because (as you noted as a comment to the following patch) as soon as d->arch.hvm.params[HVM_PARAM_STORE_PFN] is set the guest can continue with the initialization and will expect the right data to be set on the page. In other words: it is not enough to have the pfn allocated, we also need xenstore to initialize it. At that point, it is better to do both later from init-dom0less.c.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |