Re: [PATCH] genirq: spurious irq detection for threaded irqs

From: Thomas Gleixner
Date: Thu Mar 04 2010 - 17:26:58 EST


On Thu, 4 Mar 2010, Uwe Kleine-KÃnig wrote:
> -void note_interrupt(unsigned int irq, struct irq_desc *desc,
> - irqreturn_t action_ret)
> +void note_threaded_interrupt(unsigned int irq, struct irq_desc *desc,
> + irqreturn_t action_ret)
> {
> if (unlikely(action_ret != IRQ_HANDLED)) {
> /*
> @@ -262,6 +262,19 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc,
> desc->irqs_unhandled = 0;
> }
>
> +void note_interrupt(unsigned int irq, struct irq_desc *desc,
> + irqreturn_t action_ret)
> +{
> + if (action_ret == IRQ_WAKE_THREAD)
> + /* handled in irq_thread() when the threaded handler returns */
> + return;
> +
> + /* don't report IRQ_WAKE_THREAD | IRQ_HANDLED as bogus return value */
> + action_ret &= ~IRQ_WAKE_THREAD;
> +
> + note_threaded_interrupt(irq, desc, action_ret);
> +}
> +

We don't need an extra function for that. A simple

if (action_ret & IRQ_WAKE_THREAD)
return;

in note_interrupt() is sufficient to cover everything.

Thanks,

tglx