|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 05/15] xen: arm: allow platform code to select dom0 event channel irq
On Fri, Nov 22, 2013 at 4:24 PM, Ian Campbell <ian.campbell@xxxxxxxxxx> wrote:
> Currently the hardcoded use of GUEST_EVTCHN_PPI is problematic if that is a
> real PPI on the platform.
>
> We really need to be smarter about selecting an unused PPI but in the meantime
> we can at least give the platform code the option of hardcoding a number which
> works for the platform.
>
> Hardcode a suitable PPI on the Xgene platform.
>
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Release-acked-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
> ---
> xen/arch/arm/domain.c | 7 +++++--
> xen/arch/arm/platform.c | 7 +++++++
> xen/arch/arm/platforms/xgene-storm.c | 1 +
> xen/include/asm-arm/platform.h | 5 +++++
> 4 files changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
> index 2f57d01..52d2403 100644
> --- a/xen/arch/arm/domain.c
> +++ b/xen/arch/arm/domain.c
> @@ -31,6 +31,7 @@
> #include <asm/processor-ca15.h>
>
> #include <asm/gic.h>
> +#include <asm/platform.h>
> #include "vtimer.h"
> #include "vuart.h"
>
> @@ -526,8 +527,10 @@ int arch_domain_create(struct domain *d, unsigned int
> domcr_flags)
> if ( (rc = vcpu_domain_init(d)) != 0 )
> goto fail;
>
> - /* XXX dom0 needs more intelligent selection of PPI */
> - d->arch.evtchn_irq = GUEST_EVTCHN_PPI;
> + if ( d->domain_id )
> + d->arch.evtchn_irq = GUEST_EVTCHN_PPI;
> + else
> + d->arch.evtchn_irq = platform_dom0_evtchn_ppi();
>
> /*
> * Virtual UART is only used by linux early printk and decompress code.
> diff --git a/xen/arch/arm/platform.c b/xen/arch/arm/platform.c
> index 0fbbdc7..a7f9ee4 100644
> --- a/xen/arch/arm/platform.c
> +++ b/xen/arch/arm/platform.c
> @@ -156,6 +156,13 @@ 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;
> +}
> +
> /*
> * Local variables:
> * mode: C
> diff --git a/xen/arch/arm/platforms/xgene-storm.c
> b/xen/arch/arm/platforms/xgene-storm.c
> index d185a4a..8658996 100644
> --- a/xen/arch/arm/platforms/xgene-storm.c
> +++ b/xen/arch/arm/platforms/xgene-storm.c
> @@ -40,6 +40,7 @@ static const char const *xgene_storm_dt_compat[] __initdata
> =
> PLATFORM_START(xgene_storm, "APM X-GENE STORM")
> .compatible = xgene_storm_dt_compat,
> .quirks = xgene_storm_quirks,
> + .dom0_evtchn_ppi = 24,
> PLATFORM_END
>
> /*
> diff --git a/xen/include/asm-arm/platform.h b/xen/include/asm-arm/platform.h
> index c9314e5..5900ee4 100644
> --- a/xen/include/asm-arm/platform.h
> +++ b/xen/include/asm-arm/platform.h
> @@ -37,6 +37,10 @@ struct platform_desc {
> * List of devices which must not pass-through to a guest
> */
> const struct dt_device_match *blacklist_dev;
> + /*
> + * The IRQ (PPI) to use to inject event channels to dom0.
> + */
> + unsigned int dom0_evtchn_ppi;
> };
>
> /*
> @@ -61,6 +65,7 @@ void platform_reset(void);
> void platform_poweroff(void);
> bool_t platform_has_quirk(uint32_t quirk);
> bool_t platform_device_is_blacklisted(const struct dt_device_node *node);
> +unsigned int platform_dom0_evtchn_ppi(void);
>
> #define PLATFORM_START(_name, _namestr) \
> static const struct platform_desc __plat_desc_##_name __used \
> --
> 1.7.10.4
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |