lkml.org 
[lkml]   [2009]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [patch 3/4] genirq: add a quick check handler
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



\
 
 \ /
  Last update: 2009-03-01 10:49    [W:0.119 / U:0.668 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site