PCI bus numbers can be reassigned after device discovery, for example during resource reallocation. Preserve the number seen at allocation time so drivers can match devices using firmware-visible bus numbers.
Signed-off-by: Mario Limonciello <[email protected]> --- drivers/pci/probe.c | 1 + include/linux/pci.h | 1 + 2 files changed, 2 insertions(+) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 27008e2ea5afc..580b288d5c64f 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -2508,6 +2508,7 @@ struct pci_dev *pci_alloc_dev(struct pci_bus *bus) INIT_LIST_HEAD(&dev->bus_list); dev->dev.type = &pci_dev_type; dev->bus = pci_bus_get(bus); + dev->initial_bus_number = bus->number; dev->driver_exclusive_resource = (struct resource) { .name = "PCI Exclusive", .start = 0, diff --git a/include/linux/pci.h b/include/linux/pci.h index 5ffcf5ce8c966..dae68b28ce051 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -363,6 +363,7 @@ struct pci_dev { struct pci_slot *slot; /* Physical slot this device is in */ unsigned int devfn; /* Encoded device & function index */ + u8 initial_bus_number; /* Bus number when device was discovered */ unsigned short vendor; unsigned short device; unsigned short subsystem_vendor; -- 2.43.0
