Re: [PATCH 2.6.16] Shared interrupts sometimes lost



On Sat, 2006-04-08 at 14:10 +1000, Neil Brown wrote:

To explain what I think is happening, let me start with a very simple
case. A number of PCI devices (this one included) have a number of
events which can trigger an interrupt. The events which are current
are presented as bits in a register, and are ORed together (and
possibly masked by another register) to make the IRQ line.
When 1's are written to any bits in this register, it acknowledges
the event and clears the bit.
A typical code fragment is
events = read_register(INTERRUPTS);
write_register(INTERRUPTS, events);
... handle each 1 bits in events ....


Isn't a more typical IRQ handler:

while (events = read_register(INTERRUPTS) != 0) {
...handle each bit in events and ACK it...
}

Lee

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages

  • Re: EDAC (was: Re: 2.6.14-rc5-mm1)
    ... >> The EDAC scanning code first scans the STATUS ... >> of all the PCI devices in the system. ... >> register reflects operations on the main bus. ... scan for parity errors. ...
    (Linux-Kernel)
  • Re: EDAC (was: Re: 2.6.14-rc5-mm1)
    ... > The EDAC scanning code first scans the STATUS register ... > of all the PCI devices in the system. ... > register reflects operations on the main bus. ... And will blacklisting make EDAC useless? ...
    (Linux-Kernel)
  • Re: [PATCH 2.6.16] Shared interrupts sometimes lost
    ... A number of PCI devices have a number of ... events which can trigger an interrupt. ... possibly masked by another register) to make the IRQ line. ... In the unlikely event the event was set while inside the ISR the interrupt should be asserted again so there is no need to do this. ...
    (Linux-Kernel)