Re: can someone explain...[ PCI interrupts]

From: John Baldwin <jhb_at_freebsd.org>
Date: Wed, 7 Dec 2005 09:06:03 -0500
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
Received on Wed Dec 07 2005 - 13:06:53 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:48 UTC