level interrupt handling in the Kernel

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

We found that level interrupts are handled in the following way in the Linux
kernel:
1. mask irq, disable it
2. ack irq, clear it in interrupt controller.
3. move irq, handle it in handler for the source.
4. unmask irq, reenable it.

This sequnce results in bogus interrupts in the system. The reason is that,
after step 2 but before step 3, interrupt controller sees that the interrupt
source is high, and will re-assert the interrupt. After the interrupt
handler returns and finish step 4, the bogus interrupt causes the sequence
to start again.

We solve this issue by changing the interrupt controller to do nothing in
step 2, ack irq, if it is a level. In step 4, unmask irq, we ack the
interrupt controller then, and then re-enable the interrupt. Since interrupt
is level, and source interrupt handler only clears interrupts once in the
handler, nothing will be missed.

I am not sure whether we are doing the right thing, and why the Linux kernel
chooses to handle level interrupt in that sequence.

Thanks,
Julie.

Thanks,
-- 
View this message in context: http://www.nabble.com/level-interrupt-handling-in-the-Kernel-tp22481320p22481320.html
Sent from the linux-newbie mailing list archive at Nabble.com.

--
To unsubscribe from this list: send the line "unsubscribe linux-newbie" 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.linux-learn.org/faqs

[Index of Archives]     [Audio]     [Hams]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Fedora Users]

  Powered by Linux