|
[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 |