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.025 / U:30.132 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site