[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.6 4/4] xen/arm: Find automatically a PPI for the DOM0 event channel interrupt
On Fri, 12 Dec 2014, Julien Grall wrote: > Use the new vgic interface to know which virtual PPI is free and use it > for the event channel code. > > At the DOM0 creation time, Xen still don't know which vIRQ will be free. > All the vIRQ will be reserved when we parse the device tree. So allocate > when the hypervisor node is created. > > It's safe to defer the allocation because no vIRQ can be injected as > long as the vCPU is not online. > > Also correct the check in arch_domain_create to use is_hardware_domain. > > Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx> > --- > xen/arch/arm/domain.c | 13 ++++++++++--- > xen/arch/arm/domain_build.c | 10 ++++++++++ > xen/arch/arm/platform.c | 7 ------- > xen/arch/arm/platforms/xgene-storm.c | 1 - > xen/include/asm-arm/platform.h | 4 ---- > 5 files changed, 20 insertions(+), 15 deletions(-) > > diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c > index 7221bc8..7d14377 100644 > --- a/xen/arch/arm/domain.c > +++ b/xen/arch/arm/domain.c > @@ -543,10 +543,17 @@ int arch_domain_create(struct domain *d, unsigned int > domcr_flags) > if ( (rc = domain_vtimer_init(d)) != 0 ) > goto fail; > > - if ( d->domain_id ) > + /* > + * The hardware domain will get a PPI later in > + * arch/arm/domain_build.c depending on the > + * interrupt map of the hardware. > + */ > + if ( !is_hardware_domain(d) ) > + { > d->arch.evtchn_irq = GUEST_EVTCHN_PPI; > - else > - d->arch.evtchn_irq = platform_dom0_evtchn_ppi(); > + /* At this stage vgic_reserve_virq should never fail */ > + BUG_ON(vgic_reserve_virq(d, GUEST_EVTCHN_PPI)); > + } Why do we still need this, if we have another vgic_allocate_virq call in make_hypervisor_node? Wouldn't that work for DomUs too? > /* > * Virtual UART is only used by linux early printk and decompress code. > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c > index c238c8f..8dedc60 100644 > --- a/xen/arch/arm/domain_build.c > +++ b/xen/arch/arm/domain_build.c > @@ -625,6 +625,16 @@ static int make_hypervisor_node(struct domain *d, > return res; > > /* > + * The allocation of the event channel IRQ has been deferred until > + * now. At this time, all PPIs use by DOM0 has been registered > + */ > + res = vgic_allocate_virq(d, 0); > + if ( res < 0 ) > + return -FDT_ERR_XEN(ENOSPC); > + > + d->arch.evtchn_irq = res; > + > + /* > * interrupts is evtchn upcall: > * - Active-low level-sensitive > * - All cpus > diff --git a/xen/arch/arm/platform.c b/xen/arch/arm/platform.c > index cb4cda8..d016797 100644 > --- a/xen/arch/arm/platform.c > +++ b/xen/arch/arm/platform.c > @@ -160,13 +160,6 @@ bool_t platform_device_is_blacklisted(const struct > dt_device_node *node) > return dt_match_node(blacklist, node); > } > > -unsigned int platform_dom0_evtchn_ppi(void) > -{ > - if ( platform && platform->dom0_evtchn_ppi ) > - return platform->dom0_evtchn_ppi; > - return GUEST_EVTCHN_PPI; > -} > - > void platform_dom0_gnttab(paddr_t *start, paddr_t *size) > { > if ( platform && platform->dom0_gnttab_size ) > diff --git a/xen/arch/arm/platforms/xgene-storm.c > b/xen/arch/arm/platforms/xgene-storm.c > index 416d42c..b0808b8 100644 > --- a/xen/arch/arm/platforms/xgene-storm.c > +++ b/xen/arch/arm/platforms/xgene-storm.c > @@ -232,7 +232,6 @@ PLATFORM_START(xgene_storm, "APM X-GENE STORM") > .quirks = xgene_storm_quirks, > .specific_mapping = xgene_storm_specific_mapping, > > - .dom0_evtchn_ppi = 24, > .dom0_gnttab_start = 0x1f800000, > .dom0_gnttab_size = 0x20000, > PLATFORM_END > diff --git a/xen/include/asm-arm/platform.h b/xen/include/asm-arm/platform.h > index eefaca6..4eba37b 100644 > --- a/xen/include/asm-arm/platform.h > +++ b/xen/include/asm-arm/platform.h > @@ -38,10 +38,6 @@ struct platform_desc { > */ > const struct dt_device_match *blacklist_dev; > /* > - * The IRQ (PPI) to use to inject event channels to dom0. > - */ > - unsigned int dom0_evtchn_ppi; > - /* > * The location of a region of physical address space which dom0 > * can use for grant table mappings. If size is zero defaults to > * 0xb0000000-0xb0020000. > -- > 2.1.3 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |