can someone explain...[ PCI interrupts]
jhb at freebsd.org
Wed Dec 7 06:06:53 PST 2005
On Wednesday 07 December 2005 02:20 am, Darren Pilgrim wrote:
> From: John Baldwin
> > The reason [for masking interrupts] is that PCI interrupts are level
> > triggered, so they won't "shut up" until the ISR has run and pacified
> > the PCI device.
> But PCI interrupts can be programmed either level- or edge-triggered, so
> wouldn't programming to edge-triggered interrupts solve the "they won't
> shut up" issue?
No, PCI interrupts are level triggered. Individual APIC pins can be
programmed to be edge-triggered, sure. However, then interrupts stop working
if 2 devices are sharing a line and one interrupts after the other has
already interrupted and after the second device's ISR has already run. In
this case, the ithread will finish and go back to sleep waiting for an
interrupt. However, since the ISR for the second device wasn't run after
that device asserted its interrupt pin, the second device will keep the pin
pulled low forever, so there will never be a hi -> low transition that the
APIC pin would post an interrupt for and that intpin and all attached devices
are effectively dead.
John Baldwin <jhb at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve" = http://www.FreeBSD.org
More information about the freebsd-current