irq handling in DDE Linux26
zhengda1936 at gmail.com
Thu May 6 18:53:20 CEST 2010
In DDE Linux26, the interrupt is ignored when an interrupt line is disabled,
i.e., the handle_irq field of ddekit_irq_ctrl is 0.
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().
Now the problem is that after a packet is transmitted, the transmission-done
interrupt can be delivered before enable_irq_lockdep_irqrestore is called, so
the interrupt is ignored and the driver thinks the packet cannot be transmitted.
This situation happens when I run ne2k-pci in the Hurd porting of DDE Linux26.
disable_irq_nosync_lockdep_irqsave is exactly the same as disable_irq_nosync
when there isn't CONFIG_LOCKDEP. It seems to me that ne2k-pci shouldn't call it
in the first place when transmitting packets, but Linux drivers should be
correct. Then what goes wrong? Should the interrupt handler delays interrupts
instead of ignoring them silently when the interrupt line is disabled?
More information about the l4-hackers