diff --git a/src/system/kernel/arch/x86/irq_routing_table.cpp b/src/system/kernel/arch/x86/irq_routing_table.cpp index c442fac456..578896baef 100644 --- a/src/system/kernel/arch/x86/irq_routing_table.cpp +++ b/src/system/kernel/arch/x86/irq_routing_table.cpp @@ -578,8 +578,11 @@ ensure_all_functions_matched(pci_module_info* pci, uint8 bus, } if (!matched) { - if (pci->read_pci_config(bus, device, function, - PCI_interrupt_line, 1) == 0) { + uint32 interrupt_line = pci->read_pci_config(bus, device, + function, PCI_interrupt_line, 1); + // On x86, interrupt line 255 means "unknown" or "no connection" + // (PCI Local Bus spec 3.0, section 6.2.4 / page 223, footnote.) + if (interrupt_line == 0 || interrupt_line == 255) { dprintf("assuming no interrupt use on PCI device" " %u:%u:%u (bios irq 0, no routing information)\n", bus, device, function);