APCI method _CRS should be used to identify bus numbers during initial probe

Review Request #2379 — Created Oct. 9, 2019 and submitted — Latest diff uploaded


During PCI probe PCI roots are discovered using _BBN. _BBN is not always reliable and may have incorrect values with the result that childless PCI root entries in /devices are created. In turn this can cause issues with some user land libraries, such as libtopo.

The correct ACPI method to use is _CRS.

I have tested on variants of Supermicro servers and a Celestica server.
Denis Kozadaev (denis@tambov.ru) has tested it on a Lenovo laptop.

On the Celestica it shows correctly enumerated root devices (and no empty ones). Eg

ls /devices
agpgart           pci@14,0:intr     pci@5f,0          pci@73,0:intr
agpgart:agpgart   pci@14,0:reg      pci@5f,0:devctl   pci@73,0:reg
fw                pci@34,0          pci@5f,0:intr     pci@9b,0
options           pci@34,0:devctl   pci@5f,0:reg      pci@9b,0:devctl
pci@0,0           pci@34,0:intr     pci@64,0          pci@9b,0:intr
pci@0,0:devctl    pci@34,0:reg      pci@64,0:devctl   pci@9b,0:reg
pci@0,0:intr      pci@3d,0          pci@64,0:intr     pseudo
pci@0,0:reg       pci@3d,0:devctl   pci@64,0:reg      pseudo:devctl
pci@14,0          pci@3d,0:intr     pci@73,0          scsi_vhci
pci@14,0:devctl   pci@3d,0:reg      pci@73,0:devctl   scsi_vhci:devctl

Ideally I would like others to try the patch on different hardware.