mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Don't attach to Host-PCI bridges with a bad bus number.
If the bus number assigned to a Host-PCI bridge doesn't match the first bus number in the associated producer range from _CRS, print a warning and fail to attach rather than panicking due to an assertion failure. At least one single-socket Dell machine leaves a "ghost" Host-PCI bridge device in the ACPI namespace that seems to correspond to the I/O hub in the second socket of a two-socket machine. However, the BIOS doesn't configure the settings for this "ghost" bridge correctly, nor does it have any PCI devices behind it. Tested by: royger MFC after: 2 weeks
This commit is contained in:
parent
31847d9434
commit
a1eff92bc8
1 changed files with 14 additions and 4 deletions
|
|
@ -488,10 +488,17 @@ acpi_pcib_acpi_attach(device_t dev)
|
|||
pci_domain_release_bus(sc->ap_segment, dev, rid, bus_res);
|
||||
}
|
||||
} else {
|
||||
#ifdef INVARIANTS
|
||||
if (first_decoded_bus(sc, &start) == 0)
|
||||
KASSERT(start == sc->ap_bus, ("bus number mismatch"));
|
||||
#endif
|
||||
/*
|
||||
* Require the bus number from _BBN to match the start of any
|
||||
* decoded range.
|
||||
*/
|
||||
if (first_decoded_bus(sc, &start) == 0 && sc->ap_bus != start) {
|
||||
device_printf(dev,
|
||||
"bus number %d does not match start of decoded range %ju\n",
|
||||
sc->ap_bus, (uintmax_t)start);
|
||||
pcib_host_res_free(dev, &sc->ap_host_res);
|
||||
return (ENXIO);
|
||||
}
|
||||
}
|
||||
#else
|
||||
/*
|
||||
|
|
@ -514,6 +521,9 @@ acpi_pcib_acpi_attach(device_t dev)
|
|||
|
||||
if (device_add_child(dev, "pci", -1) == NULL) {
|
||||
device_printf(device_get_parent(dev), "couldn't attach pci bus\n");
|
||||
#if defined(NEW_PCIB) && defined(PCI_RES_BUS)
|
||||
pcib_host_res_free(dev, &sc->ap_host_res);
|
||||
#endif
|
||||
return (ENXIO);
|
||||
}
|
||||
return (bus_generic_attach(dev));
|
||||
|
|
|
|||
Loading…
Reference in a new issue