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

Re: [Xen-devel] [PATCH v3 18/18] xen/arm: IRQ: Handle multiple action per IRQ



On Tue, 2014-04-08 at 15:44 +0100, Julien Grall wrote:
>          desc->status &= ~IRQ_PENDING;
>          spin_unlock_irq(&desc->lock);
> -        action->handler(irq, action->dev_id, regs);
> +        list_for_each_entry_safe(action, next, &desc->action, next)
> +            action->handler(irq, action->dev_id, regs);

You aren't removing entries from within the loop so I don't think you
need the _safe variant.

>          spin_lock_irq(&desc->lock);
>      }
>  
> @@ -217,33 +220,69 @@ void release_irq(unsigned int irq, const void *dev_id)
>  {
>      struct irq_desc *desc;
>      unsigned long flags;
> -   struct irqaction *action;
> +    struct irqaction *action;
> +    bool_t found = 0;
>  
>      desc = irq_to_desc(irq);
>  
>      spin_lock_irqsave(&desc->lock,flags);
>  
> -    desc->handler->shutdown(desc);
> +    list_for_each_entry(action, &desc->action, next)
> +    {
> +        if ( action->dev_id == dev_id )
> +        {
> +            found  = 1;

Extra space before =.

I actually think a goto found would actually be clearer here than the
flag.

        for each
                if (got it)
                        goto found

        printk(not found)
        return

  found:
        /* Found it. */

> +    /* Sanity checks:
> +     *  - if the IRQ is marked as shared
> +     *  - dev_id is not NULL when IRQF_SHARED is set
> +     */
> +    if ( !list_empty(&desc->action) &&
> +         (!(desc->status & IRQF_SHARED) || !shared) )
> +        return -EINVAL;

Did you mean EBUSY?

> @@ -68,7 +72,11 @@ typedef struct irq_desc {
>      unsigned int status;        /* IRQ status */
>      hw_irq_controller *handler;
>      struct msi_desc   *msi_desc;
> +#ifdef CONFIG_IRQ_HAS_MULTIPLE_ACTION
> +    struct list_head action;    /* IRQ action list */
> +#else
>      struct irqaction *action;   /* IRQ action list */

This was never actually a list I think, and the comment is certainly
wrong now.

Ian.


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