Next
Previous
Contents
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
|