[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v6 5/6] xen/arm: IRQ: extend {request, setup}_irq to take an irqflags in parameter



I forgot to cc Aravind.

On 05/12/2014 06:57 PM, Julien Grall wrote:
> The irqflags will be used later on ARM to know if we can shared the IRQ or 
> not.
> 
> On x86, the irqflags should always be 0.
> 
> Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
> Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> Cc: Keir Fraser <keir@xxxxxxx>
> Cc: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx>
> Cc: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
> ---
>     Changes in v4:
>         - request_irq should pass irqflags to setup irq on x86
> 
>     Changes in v3:
>         - Patch added
> ---
>  xen/arch/arm/gic.c                       |    2 +-
>  xen/arch/arm/irq.c                       |    6 +++---
>  xen/arch/arm/time.c                      |    6 +++---
>  xen/arch/x86/hpet.c                      |    2 +-
>  xen/arch/x86/i8259.c                     |    2 +-
>  xen/arch/x86/irq.c                       |    9 ++++++---
>  xen/arch/x86/time.c                      |    2 +-
>  xen/drivers/char/exynos4210-uart.c       |    2 +-
>  xen/drivers/char/ns16550.c               |    2 +-
>  xen/drivers/char/omap-uart.c             |    2 +-
>  xen/drivers/char/pl011.c                 |    2 +-
>  xen/drivers/passthrough/amd/iommu_init.c |    2 +-
>  xen/drivers/passthrough/vtd/iommu.c      |    2 +-
>  xen/include/xen/irq.h                    |    5 +++--
>  14 files changed, 25 insertions(+), 21 deletions(-)
> 
> diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
> index b9fa73d..ff1addc 100644
> --- a/xen/arch/arm/gic.c
> +++ b/xen/arch/arm/gic.c
> @@ -887,7 +887,7 @@ void gic_dump_info(struct vcpu *v)
>  
>  void __cpuinit init_maintenance_interrupt(void)
>  {
> -    request_irq(gic.maintenance_irq, maintenance_interrupt,
> +    request_irq(gic.maintenance_irq, 0, maintenance_interrupt,
>                  "irq-maintenance", NULL);
>  }
>  
> diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c
> index 8e45b9e..5226b58 100644
> --- a/xen/arch/arm/irq.c
> +++ b/xen/arch/arm/irq.c
> @@ -133,7 +133,7 @@ static inline struct domain *irq_get_domain(struct 
> irq_desc *desc)
>      return desc->action->dev_id;
>  }
>  
> -int request_irq(unsigned int irq,
> +int request_irq(unsigned int irq, unsigned int irqflags,
>                  void (*handler)(int, void *, struct cpu_user_regs *),
>                  const char *devname, void *dev_id)
>  {
> @@ -160,7 +160,7 @@ int request_irq(unsigned int irq,
>      action->dev_id = dev_id;
>      action->free_on_release = 1;
>  
> -    retval = setup_irq(irq, action);
> +    retval = setup_irq(irq, irqflags, action);
>      if ( retval )
>          xfree(action);
>  
> @@ -268,7 +268,7 @@ static int __setup_irq(struct irq_desc *desc, struct 
> irqaction *new)
>      return 0;
>  }
>  
> -int setup_irq(unsigned int irq, struct irqaction *new)
> +int setup_irq(unsigned int irq, unsigned int irqflags, struct irqaction *new)
>  {
>      int rc;
>      unsigned long flags;
> diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c
> index 7eb480e..0395b7b 100644
> --- a/xen/arch/arm/time.c
> +++ b/xen/arch/arm/time.c
> @@ -236,11 +236,11 @@ void __cpuinit init_timer_interrupt(void)
>      WRITE_SYSREG32(0, CNTHP_CTL_EL2);   /* Hypervisor's timer disabled */
>      isb();
>  
> -    request_irq(timer_irq[TIMER_HYP_PPI], timer_interrupt,
> +    request_irq(timer_irq[TIMER_HYP_PPI], 0, timer_interrupt,
>                  "hyptimer", NULL);
> -    request_irq(timer_irq[TIMER_VIRT_PPI], vtimer_interrupt,
> +    request_irq(timer_irq[TIMER_VIRT_PPI], 0, vtimer_interrupt,
>                     "virtimer", NULL);
> -    request_irq(timer_irq[TIMER_PHYS_NONSECURE_PPI], timer_interrupt,
> +    request_irq(timer_irq[TIMER_PHYS_NONSECURE_PPI], 0, timer_interrupt,
>                  "phytimer", NULL);
>  }
>  
> diff --git a/xen/arch/x86/hpet.c b/xen/arch/x86/hpet.c
> index 3a4f7e8..0b13f52 100644
> --- a/xen/arch/x86/hpet.c
> +++ b/xen/arch/x86/hpet.c
> @@ -355,7 +355,7 @@ static int __init hpet_setup_msi_irq(struct 
> hpet_event_channel *ch)
>      hpet_write32(cfg, HPET_Tn_CFG(ch->idx));
>  
>      desc->handler = &hpet_msi_type;
> -    ret = request_irq(ch->msi.irq, hpet_interrupt_handler, "HPET", ch);
> +    ret = request_irq(ch->msi.irq, 0, hpet_interrupt_handler, "HPET", ch);
>      if ( ret >= 0 )
>          ret = __hpet_setup_msi_irq(desc);
>      if ( ret < 0 )
> diff --git a/xen/arch/x86/i8259.c b/xen/arch/x86/i8259.c
> index 9fec490..a71f734 100644
> --- a/xen/arch/x86/i8259.c
> +++ b/xen/arch/x86/i8259.c
> @@ -433,6 +433,6 @@ void __init init_IRQ(void)
>      outb_p(LATCH & 0xff, PIT_CH0); /* LSB */
>      outb(LATCH >> 8, PIT_CH0);     /* MSB */
>  
> -    setup_irq(2, &cascade);
> +    setup_irq(2, 0, &cascade);
>  }
>  
> diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
> index 727472d..dafd338 100644
> --- a/xen/arch/x86/irq.c
> +++ b/xen/arch/x86/irq.c
> @@ -949,7 +949,7 @@ static int __init irq_ratelimit_init(void)
>  }
>  __initcall(irq_ratelimit_init);
>  
> -int __init request_irq(unsigned int irq,
> +int __init request_irq(unsigned int irq, unsigned int irqflags,
>          void (*handler)(int, void *, struct cpu_user_regs *),
>          const char * devname, void *dev_id)
>  {
> @@ -976,7 +976,7 @@ int __init request_irq(unsigned int irq,
>      action->dev_id = dev_id;
>      action->free_on_release = 1;
>  
> -    retval = setup_irq(irq, action);
> +    retval = setup_irq(irq, irqflags, action);
>      if (retval)
>          xfree(action);
>  
> @@ -1005,11 +1005,14 @@ void __init release_irq(unsigned int irq, const void 
> *dev_id)
>          xfree(action);
>  }
>  
> -int __init setup_irq(unsigned int irq, struct irqaction *new)
> +int __init setup_irq(unsigned int irq, unsigned int irqflags,
> +                     struct irqaction *new)
>  {
>      struct irq_desc *desc;
>      unsigned long flags;
>  
> +    ASSERT(irqflags == 0);
> +
>      desc = irq_to_desc(irq);
>   
>      spin_lock_irqsave(&desc->lock,flags);
> diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c
> index b2dbde7..a4e1656 100644
> --- a/xen/arch/x86/time.c
> +++ b/xen/arch/x86/time.c
> @@ -1473,7 +1473,7 @@ void __init early_time_init(void)
>      printk("Detected %lu.%03lu MHz processor.\n", 
>             cpu_khz / 1000, cpu_khz % 1000);
>  
> -    setup_irq(0, &irq0);
> +    setup_irq(0, 0, &irq0);
>  }
>  
>  /* keep pit enabled for pit_broadcast working while cpuidle enabled */
> diff --git a/xen/drivers/char/exynos4210-uart.c 
> b/xen/drivers/char/exynos4210-uart.c
> index 404ce05..cba8729 100644
> --- a/xen/drivers/char/exynos4210-uart.c
> +++ b/xen/drivers/char/exynos4210-uart.c
> @@ -197,7 +197,7 @@ static void __init exynos4210_uart_init_postirq(struct 
> serial_port *port)
>      uart->irqaction.name    = "exynos4210_uart";
>      uart->irqaction.dev_id  = port;
>  
> -    if ( (rc = setup_irq(uart->irq, &uart->irqaction)) != 0 )
> +    if ( (rc = setup_irq(uart->irq, 0, &uart->irqaction)) != 0 )
>          dprintk(XENLOG_ERR, "Failed to allocated exynos4210_uart IRQ %d\n",
>                  uart->irq);
>  
> diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c
> index 6691806..161b251 100644
> --- a/xen/drivers/char/ns16550.c
> +++ b/xen/drivers/char/ns16550.c
> @@ -609,7 +609,7 @@ static void __init ns16550_init_postirq(struct 
> serial_port *port)
>          uart->irqaction.handler = ns16550_interrupt;
>          uart->irqaction.name    = "ns16550";
>          uart->irqaction.dev_id  = port;
> -        if ( (rc = setup_irq(uart->irq, &uart->irqaction)) != 0 )
> +        if ( (rc = setup_irq(uart->irq, 0, &uart->irqaction)) != 0 )
>              printk("ERROR: Failed to allocate ns16550 IRQ %d\n", uart->irq);
>      }
>  
> diff --git a/xen/drivers/char/omap-uart.c b/xen/drivers/char/omap-uart.c
> index e598785..a798b8d 100644
> --- a/xen/drivers/char/omap-uart.c
> +++ b/xen/drivers/char/omap-uart.c
> @@ -205,7 +205,7 @@ static void __init omap_uart_init_postirq(struct 
> serial_port *port)
>      uart->irqaction.name = "omap_uart";
>      uart->irqaction.dev_id = port;
>  
> -    if ( setup_irq(uart->irq, &uart->irqaction) != 0 )
> +    if ( setup_irq(uart->irq, 0, &uart->irqaction) != 0 )
>      {
>          dprintk(XENLOG_ERR, "Failed to allocated omap_uart IRQ %d\n",
>                  uart->irq);
> diff --git a/xen/drivers/char/pl011.c b/xen/drivers/char/pl011.c
> index 89bda94..dd19ce8 100644
> --- a/xen/drivers/char/pl011.c
> +++ b/xen/drivers/char/pl011.c
> @@ -137,7 +137,7 @@ static void __init pl011_init_postirq(struct serial_port 
> *port)
>          uart->irqaction.handler = pl011_interrupt;
>          uart->irqaction.name    = "pl011";
>          uart->irqaction.dev_id  = port;
> -        if ( (rc = setup_irq(uart->irq, &uart->irqaction)) != 0 )
> +        if ( (rc = setup_irq(uart->irq, 0, &uart->irqaction)) != 0 )
>              printk("ERROR: Failed to allocate pl011 IRQ %d\n", uart->irq);
>      }
>  
> diff --git a/xen/drivers/passthrough/amd/iommu_init.c 
> b/xen/drivers/passthrough/amd/iommu_init.c
> index 4686813..6ae44d9 100644
> --- a/xen/drivers/passthrough/amd/iommu_init.c
> +++ b/xen/drivers/passthrough/amd/iommu_init.c
> @@ -815,7 +815,7 @@ static bool_t __init set_iommu_interrupt_handler(struct 
> amd_iommu *iommu)
>          handler = &iommu_msi_type;
>      ret = __setup_msi_irq(irq_to_desc(irq), &iommu->msi, handler);
>      if ( !ret )
> -        ret = request_irq(irq, iommu_interrupt_handler, "amd_iommu", iommu);
> +        ret = request_irq(irq, 0, iommu_interrupt_handler, "amd_iommu", 
> iommu);
>      if ( ret )
>      {
>          destroy_irq(irq);
> diff --git a/xen/drivers/passthrough/vtd/iommu.c 
> b/xen/drivers/passthrough/vtd/iommu.c
> index abaa8c9..c94b0d1 100644
> --- a/xen/drivers/passthrough/vtd/iommu.c
> +++ b/xen/drivers/passthrough/vtd/iommu.c
> @@ -1082,7 +1082,7 @@ static int __init iommu_set_interrupt(struct 
> acpi_drhd_unit *drhd)
>  
>      desc = irq_to_desc(irq);
>      desc->handler = &dma_msi_type;
> -    ret = request_irq(irq, iommu_page_fault, "dmar", iommu);
> +    ret = request_irq(irq, 0, iommu_page_fault, "dmar", iommu);
>      if ( ret )
>      {
>          desc->handler = &no_irq_type;
> diff --git a/xen/include/xen/irq.h b/xen/include/xen/irq.h
> index 1f8bdb3..f9a18d8 100644
> --- a/xen/include/xen/irq.h
> +++ b/xen/include/xen/irq.h
> @@ -89,9 +89,10 @@ int arch_init_one_irq_desc(struct irq_desc *);
>  
>  #define irq_desc_initialized(desc) ((desc)->handler != NULL)
>  
> -extern int setup_irq(unsigned int irq, struct irqaction *);
> +extern int setup_irq(unsigned int irq, unsigned int irqflags,
> +                     struct irqaction *);
>  extern void release_irq(unsigned int irq, const void *dev_id);
> -extern int request_irq(unsigned int irq,
> +extern int request_irq(unsigned int irq, unsigned int irqflags,
>                 void (*handler)(int, void *, struct cpu_user_regs *),
>                 const char * devname, void *dev_id);
>  
> 


-- 
Julien Grall

_______________________________________________
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®.