[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 14/16] RFC: xen: arm: allow platform code to select dom0 event channel irq
On Wed, 20 Nov 2013, 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 <ian.campbell@xxxxxxxxxx> I think this is a reasonable approach for 4.4. Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > RFC: I'm not all that happy with this, but it seems better than nothing for > 4.4... > > If other existing platforms also have this issue I can extend the patch if > told what a suitable PPI is. > --- > 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 23986a9..b1b850b 100644 > --- a/xen/arch/arm/platforms/xgene-storm.c > +++ b/xen/arch/arm/platforms/xgene-storm.c > @@ -52,6 +52,7 @@ PLATFORM_START(xgene_storm, "APM X-GENE STORM") > .init = xgene_storm_init, > .reset = xgene_storm_reset, > .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 c282b30..92b954d 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; > }; > > /* > @@ -56,6 +60,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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |