Pegasus InfoCorp: Web site design and web software development company
Next Previous Contents

10. Interrupt Sharing and Interrupt Conflicts

When two or more devices use the same interrupt line (and the same IRQ number) it's either "Interrupt Sharing" or an "Interrupt Conflict". The PCI bus allows all PCI devices to share interrupts with each other so this is called "sharing". But if an ISA device (or a LPC device ??) tries to use the same interrupt (IRQ) as some other device (either PCI, ISA, or LPC ??) there is usually an interrupt conflict. This means that when an interrupt happens, often the wrong device driver is called and bad things happen like buffer overruns (loss of data).

Interrupt conflicts were common when the IRQs were set by jumpers on cards (ISA bus). ISA plug-and-play (no jumpers on the cards) helped since the software could change IRQs. The demise of ISA in favor of PCI has nearly eliminated IRQ conflicts. Still, your PC likely has devices on the motherboard on an ISA bus, a LPC bus, or an X-bus. But the kernel should know how these are set and thus avoid using them for PCI devices, thereby avoiding interrupt conflicts.

But IRQ sharing on the PCI bus while eliminating the conflict problem, has introduced another problem, the IRQ balancing problem. If too many high-irq-issuing devices share the same IRQ, it may cause delays in the IRQs getting serviced and can't even result in buffer overruns and other errors. This is not due to congestion on the interrupt line, but it's due to the way that the software determines which device issued the interrupt. PCI interrupt sharing

There's also the case Another case of interrupt "conflict" happens when an ISA device is activated but can't be assigned an interrupt (IRQ) since none are available. This is sort of an interrupt (IRQ) conflict since if an interrupt were assigned, it would create a conflict. This can also happen even if an interrupt is available, but it can't be used since the hardware of the device that needs the interrupt doesn't support the interrupt number available (or the motherboard doesn't support it due to "routing" problems, see PCI Interrupts). If the ISA devices use up all the interrupts, then one or more PCI cards may be in conflict since they can't get any IRQs.

Normally, the BIOS will assign interrupts and will not create conflicts. But it may be forced to create conflicts if it runs out of IRQs. This can happen if someone has set up the BIOS to reserve certain IRQs for legacy ISA devices that are not PnP. These settings may be wrong and should be checked out, especially if you're having problems. For example, someone may have reserved an IRQ for an ISA card that has long since been removed from the PC. If you unreserved this IRQ then this IRQ is available and and conflict disappears.

Sometimes the BIOS will solve the problem of an IRQ shortage by using IRQ 0. There is no such IRQ, but IRQ 0 means that the driver should use polling instead of IRQs. This means that the driver frequently checks the device (polls it) to see if the device needs servicing by the interrupt service routine. Of course, this wastes computer time and there's more likelihood of a buffer overrun inside a device since it might not get serviced by the driver promptly enough.

A few ISA devices have been designed to permit interrupt conflicts (between two ISA devices ??) but both ISA devices must be designed this way and be driven by software that knows about sharing interrupts. The motherboard must support it too.


Next Previous Contents