|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |