[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.