mirror of git://git.ipxe.org/ipxe.git
Browse Source
PCI Express devices do not have physical INTx output signals, and on modern motherboards there is unlikely to be any interrupt controller with physical interrupt input signals. There are multiple levels of abstraction involved in emulating the legacy INTx interrupt mechanism: the PCIe device sends Assert_INTx and Deassert_INTx messages, PCIe bridges and switches must collate these virtual wires, and the root complex must map the virtual wires into messages that can be understood by the host's emulated 8259 PIC. This complex chain of emulations is rarely tested on modern hardware, since operating systems will invariably use MSI-X for PCI devices and the I/O APIC for non-PCI devices such as the real-time clock. Since the legacy interrupt emulation mechanism is rarely tested, it is frequently unreliable. We have encountered many issues over the years in which legacy interrupts are simply not raised as expected, even when inspection shows that the device believes it is asserting an interrupt and the controller believes that the interrupt is enabled. We already maintain a list of devices that are known to fail to generate legacy interrupts correctly. This list is based on the PCI vendor and device IDs, which is not necessarily a fair test since the root cause may be a board-level misconfiguration rather than a device-level fault. Assume that any PCI Express device has a high chance of not being able to raise legacy interrupts reliably. This is a relatively intrusive change since it will affect essentially all modern network devices, but should hopefully fix all future issues with non-functional legacy interrupts, without needing to constantly grow the list of known broken devices. If some PCI Express devices are found to fail when operated in polling mode, then this change will need to be revisited. Signed-off-by: Michael Brown <mcb30@ipxe.org>coverity_scan

1 changed files with 21 additions and 3 deletions
Loading…
Reference in new issue