Re: PCI MSI: the new interrupt routing headache

From: Roland Dreier
Date: Fri Nov 18 2005 - 15:52:12 EST

Jeff> What needs to be done, to detect working PCI message
Jeff> signalled interrupts such that pci_enable_msi() fails
Jeff> properly?

There are two things that cause MSIs not to work. First, the PCI host
bridge may not have working MSI support. To handle this, we have the
"msi_quirk" which is set by the PCI quirk code. For example, this is
used on systems with AMD-8131 PCI-X bridges. (As I've noted
elsewhere, this is actually too crude a method -- actual systems exist
with e.g. both AMD-8131 and Nforce4 PCI bridges, so that MSI works for
PCIe devices but not devices below the AMD-8131)

Second, there are PCI devices that have an MSI capability but which
don't have working MSI support. Most revisions of the e1000 fall into
this category. In this case, it is up to the driver to know when it's
safe to try to enable MSI.

However, given that MSI/MSI-X is not in wide use, there is undoubtedly
much more broken hardware (both chipsets and devices) that we don't
know about and need to add quirks or driver workarounds for.

Hence, in the interest of discovering this hardware and also in
getting less cryptic bug reports, it's a good idea to add a test that
interrupts actually work in any driver that tries to enable MSI or
MSI-X. Since it requires knowledge of a device to know how to get the
device to trigger an interrupt, this test has to be done in each
driver and can't be centralized.

- R.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at