Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1550458

[PATCH] ACPI/PCI: Fix bus range comparation in pci_mcfg_lookup

From Zhou Wang <wangzhou1@hisilicon.com>
Newsgroups linux.kernel
Subject [PATCH] ACPI/PCI: Fix bus range comparation in pci_mcfg_lookup
Date 2017-01-04 07:40 +0100
Message-ID <sVNoR-RY-7@gated-at.bofh.it> (permalink)
Organization linux.* mail to news gateway

Show all headers | View raw


The configuration data provided by an MCFG region (ie PCI segment and
bus range) may span multiple host bridges.

Current code in pci_mcfg_lookup() carries out an exact match of host
bridge bus range start value against the MCFG region(s) bus range start
value which would cause configurations like the following:

MCFG region:
	bus range: 0x00~0xff.
	segment: 0.

PCI host bridges configuration (segment numbers and bus ranges):
	host bridge 1:
		bus range: 0x00~0x1f.
		segment: 0.
	host bridge 2:
		bus range: 0x20~0x4f.
		segment: 0.

to fail, in that the bus range start value for host bridge 2 does
not match the bus range start value of the respective MCFG region.

Relax the bus range check in pci_mcfg_lookup() to cater for
PCI configurations with multiple host bridges sharing the same
MCFG region.

Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com>
Reviewed-by: Tomasz Nowicki <tn@semihalf.com>
Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
---
 drivers/acpi/pci_mcfg.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c
index a6a4cea..2944353 100644
--- a/drivers/acpi/pci_mcfg.c
+++ b/drivers/acpi/pci_mcfg.c
@@ -195,11 +195,10 @@ int pci_mcfg_lookup(struct acpi_pci_root *root, struct resource *cfgres,
 		goto skip_lookup;
 
 	/*
-	 * We expect exact match, unless MCFG entry end bus covers more than
-	 * specified by caller.
+	 * We expect the range in bus_res in the coverage of MCFG bus range.
 	 */
 	list_for_each_entry(e, &pci_mcfg_list, list) {
-		if (e->segment == seg && e->bus_start == bus_res->start &&
+		if (e->segment == seg && e->bus_start <= bus_res->start &&
 		    e->bus_end >= bus_res->end) {
 			root->mcfg_addr = e->addr;
 		}
-- 
1.9.1

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

[PATCH] ACPI/PCI: Fix bus range comparation in pci_mcfg_lookup Zhou Wang <wangzhou1@hisilicon.com> - 2017-01-04 07:40 +0100
  Re: [PATCH] ACPI/PCI: Fix bus range comparation in pci_mcfg_lookup Zhou Wang <wangzhou1@hisilicon.com> - 2017-01-09 04:50 +0100
    Re: [PATCH] ACPI/PCI: Fix bus range comparation in pci_mcfg_lookup "Rafael J. Wysocki" <rafael@kernel.org> - 2017-01-09 22:50 +0100
      Re: [PATCH] ACPI/PCI: Fix bus range comparation in pci_mcfg_lookup Zhou Wang <wangzhou1@hisilicon.com> - 2017-01-11 01:40 +0100
  Re: [PATCH] ACPI/PCI: Fix bus range comparation in pci_mcfg_lookup Bjorn Helgaas <helgaas@kernel.org> - 2017-01-11 22:40 +0100
    Re: [PATCH] ACPI/PCI: Fix bus range comparation in pci_mcfg_lookup Zhou Wang <wangzhou1@hisilicon.com> - 2017-01-12 01:30 +0100

csiph-web