2.6.18-rc4 arch/i386/kernel/irq.c::do_IRQ has this code:
if (!irq_desc[irq].handle_irq) {
__do_IRQ(irq, regs);
goto out_exit;
}
#ifdef CONFIG_4KSTACKS
curctx = (union irq_ctx *) current_thread_info();
irqctx = hardirq_ctx[smp_processor_id()];
...
All registered irqs on my system have a NULL handle_irq so do_IRQ
always calls __do_IRQ on the current stack, it never switches to the
hardirq_ctx stack. Removing the test is trivial and it boots and runs
without the test for !irq_desc[irq].handle_irq, but why was the test
put there in the first place?
Note: with that test removed, do_IRQ runs on the hardirq stack, but
struct thread_info is not updated accordingly so backtrace is wrong. I
can fix that as well, but I need to understand the test for handle_irq
first.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]