From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v2 05/15] xen: arm: allow platform code to select dom0 event channel irq Date: Fri, 22 Nov 2013 17:01:02 +0000 Message-ID: <528F8DCE.4060801@linaro.org> References: <1385137474-31245-5-git-send-email-ian.campbell@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1385137474-31245-5-git-send-email-ian.campbell@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell , xen-devel@lists.xen.org Cc: pranavkumar@linaro.org, tim@xen.org, Anup Patel , stefano.stabellini@eu.citrix.com List-Id: xen-devel@lists.xenproject.org On 11/22/2013 04:24 PM, Ian Campbell 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 > Acked-by: Stefano Stabellini I have a patch somewhere to find a free PPI, I forget to rework it... and it's a bit invasive for 4.4. Acked-by: Julien Grall > --- > 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 > > #include > +#include > #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 \ > -- Julien Grall