Re: lockdep and threaded IRQs (was: ...)
From: Thomas Gleixner <hidden>
Date: 2009-02-28 20:56:25
Also in:
lkml
On Sat, 28 Feb 2009, David Brownell wrote:
Got a version that applies to mainline GIT?
http://tglx.de/~tglx/patches.tar.bz2
At a quick glance it looks like these patches don't cover set_irq_chained_handler(), which would be trouble since __setup_irq() doesn't get called in those cases.
Hmm, I did not think about chained handlers where the demux handler needs to run in a thread as well. Usually demux handlers just have a fast path kicking the particular real handlers.
They should however handle simpler cases, like I2C devices that only expose one IRQ instead of needing to demux several dozen IRQs going to different drivers and subsystems. And, not touching lockdep, the original ugliness will still be needed (re-enabling IRQs in threaded handlers).
Err ? The threaded handlers run with interrupts enabled.
static int irq_thread(void *data)
{
...
while (!kthread_should_stop()) {
set_current_state(TASK_INTERRUPTIBLE);
if (irq_thread_should_run(action) && current->irqaction) {
__set_current_state(TASK_RUNNING);
action->handler(action->irq, action->dev_id);
} else
schedule();
}
Thanks,
tglx