irq handling in DDE Linux26

Da Zheng zhengda1936 at
Sat May 8 17:19:08 CEST 2010

On 10-5-7 下午4:31, Samuel Thibault wrote:
> Hello,
> Da Zheng, le Fri 07 May 2010 00:53:20 +0800, a écrit :
>> In ne2k-pci, an example in DDE Linux26, when a packet is transmitted by the
>> driver, disable_irq_nosync_lockdep_irqsave() is called to disable irq. Then it
>> triggers a send and calls enable_irq_lockdep_irqrestore().
>> Should the interrupt handler delays interrupts instead of ignoring
>> them silently when the interrupt line is disabled?
> See __enable_irq in the linux source code:
> 		check_irq_resend(desc, irq);
> which re-sends the irq if it has been set to pending while it was
> disabled.
OK, I see. Thanks. I kind of understand how irq is handled by Linux. It seems
DDE Linux26 might lose some edge-triggered interrupts when irq is disabled since
it doesn't set irq pending.

A stupid question: when disable_irq_nosync is called, IRQ_DISABLED is set in the
irq descriptor in the Linux kernel and the corresponding hardirq line should be
masked as well (at least, it seems the kernel for x86 does so). How can
handle_edge_irq be called? or this can only happen on SMP as only the hardirq
line in the local CPU is masked?

Zheng Da

More information about the l4-hackers mailing list