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.orgReceived 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