Re: [patch 3/4] genirq: add a quick check handler

From: Thomas Gleixner
Date: Sun Mar 01 2009 - 04:45:34 EST


On Sat, 28 Feb 2009, Christoph Hellwig wrote:
> I really disagree with the notation of the pre-handler. Instead of
> adding an additional pre handler method you should add a new threadfn
> method. The handler could just as now handle/not handle the interrupt,
> or as a third option defer it to the thread. That makes the different
> semantics a lot clearer, and means ->handler and ->threadfn both have
> very well defined contexts, instead of sometimes calling ->handler
> sometimes from irq and sometimes from thread context. This also
> makes it much easier for complex hardware that might have simple and
> fast interrupts that it may want to handle directly from hardirq context
> in just a couple of cycles or complex interrupts that might be deferred
> to process context.
>
> In that model that main loop in handle_IRQ_event would look something
> like this:
>
>
> do {
> ret = action->handler(irq, action->dev_id);
> switch (ret) {
> case IRQ_HANDLED:
> status |= action->flags;
> break;
> case IRQ_WAKE_THREAD:
> if (likely(!test_bit(IRQTF_DIED,
> &action->thread_flags))) {
> set_bit(IRQTF_RUNTHREAD, &action->thread_flags);
> wake_up_process(action->thread);
> }
> /*
> * Set it to handled so the spurious check
> * does not trigger.
> */
> ret = IRQ_HANDLED;
> break;
> }
> retval |= ret;
> action = action->next;
> } while (action);

Makes a lot of sense.

Thanks,

tglx

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/