Debugging IRQ Problems
What is an IRQ
An Interrupt ReQuest (IRQ) line allows a device to signal the CPU to request its attention. Sometimes these interrupts get mixed up and the message does not get through. For example, if two devices use the same IRQ, and the driver is not written to handle this, it may end up processing an IRQ for which it wasn't supposed to. Modern device drivers typically resolve this themselves, but sometimes they need help.
A BIOS (Basic Input Output System) starts your computer for you, and allows you to configure devices before the computer is booted. Most times the BIOS can be accessed by pressing ESC, Del or F2 when you first power on the computer. If you have no experience with changing BIOS options, you do not want to change any of the settings without the help of knowledgable person.
How do I know there is a problem?
The following are some symptoms which may indicate an IRQ-related problem:
- Hardware devices (sound, network, etc.) being detected, but not functional.
- Problems using two hardware devices at the same time, or only when devices are connected at the same time.
- System hangs (lockup).
What do I do?
If you think you may be experiencing such a problem, try these steps in the following order:
Boot the system with the noapic kernel parameter.
- This tells the kernel to not make use of any IOAPIC's that may be present in the system
Boot the system with pci=routeirq.
- Do IRQ routing for all PCI devices. This is normally done in pci_enable-device(), and is a temporary workaround for broken drivers which don't call it.
Boot the system with pci=noacpi.
- Do not use ACPI for IRQ routing or PCI scanning.
Boot the system with acpi=off.
- Completely disable ACPI support.
You may also want to try:
- Boot the system with 'irqpoll'.
- This may be a work around for an "irqXX: nobody cared . . ." error, which basically means the interrupt has not been handled by any driver. This boot option will make the kernel poll for interrupts, in order to try to work around this issue. However, this does not help diagnose the root cause, nor should it be a permanent fix.
To add these options to the boot command line, use the edit option in the grub boot menu.
Each of these options disables a feature of Ubuntu.
NOTE: These options are architecture specific. They mainly apply to i386 and amd64.
If that fails
- If you have a BIOS conflict, be sure to check your BIOS settings to see if some of the items can be turned off temporarily (serial ports, etc.).
- Try changing the order of the cards in your PC. There have been cases where the BIOS will only work with certain types of cards in certain slots.
If you are experiencing system panics or hangs, follow the instructions at DebuggingSystemCrash
Reporting an IRQ Kernel Bug
Use the command 'ubuntu-bug linux' in a terminal.