Skip to content

Commit 53762ba

Browse files
Zhou Wangbjorn-helgaas
authored andcommitted
PCI/ACPI: Fix bus range comparison in pci_mcfg_lookup()
The configuration data provided by an MCFG entry, i.e., PCI segment and bus range, may span multiple host bridges. pci_mcfg_lookup() previously required an exact match of the host bridge starting bus and the MCFG starting bus, which made the following configuration fail: MCFG region: segment: 0 bus range: 0x00-0xff host bridge segment: 0 bus range: 0x20-0x4f Relax the bus range check in pci_mcfg_lookup() so we can use any MCFG entry that contains the required bus range, as we do in pci_mmconfig_lookup(). [bhelgaas: changelog] Signed-off-by: Zhou Wang <[email protected]> Signed-off-by: Bjorn Helgaas <[email protected]> Reviewed-by: Tomasz Nowicki <[email protected]> Acked-by: Lorenzo Pieralisi <[email protected]>
1 parent 977509f commit 53762ba

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

drivers/acpi/pci_mcfg.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,10 @@ int pci_mcfg_lookup(struct acpi_pci_root *root, struct resource *cfgres,
195195
goto skip_lookup;
196196

197197
/*
198-
* We expect exact match, unless MCFG entry end bus covers more than
199-
* specified by caller.
198+
* We expect the range in bus_res in the coverage of MCFG bus range.
200199
*/
201200
list_for_each_entry(e, &pci_mcfg_list, list) {
202-
if (e->segment == seg && e->bus_start == bus_res->start &&
201+
if (e->segment == seg && e->bus_start <= bus_res->start &&
203202
e->bus_end >= bus_res->end) {
204203
root->mcfg_addr = e->addr;
205204
}

0 commit comments

Comments
 (0)