PCI: Fix minimum allocation address overwrite
PATCH 1/1 PCI: Fix minimum allocation address overwrite
Commit 36e097a8a297 ("PCI: Split out bridge window override of minimum allocation address") claimed to do no functional changes but unfortunately
did: The "min" variable is altered. At least the AVM A1 PCMCIA adapter was no longer detected, breaking ISDN operation.
So use a local copy of min to restore the previous behaviour.
---
Since I have access to that piece of hardware for a limited time only, please get back to ASAP in case I should do more tests, by 2015-12-26 the latest.
Additional tests were done for -stable on the latest 3.14, 4.1 and 4.3 releases, with all results as expected.
--- drivers/pci/bus.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/pci/bus.c +4 -4
@@ -140,6 +140,8 @@ static int pci_bus_alloc_from_region(struct pci_bus *bus, struct resource *res, type_mask |=IORESOURCE_TYPE_BITS ;pci_bus_for_each_resource (bus, r, i) { +resource_size_t min_used; +if (!r)continue ;
@@ -162,13 +164,11 @@ static int pci_bus_alloc_from_region(struct pci_bus *bus, struct resource *res,* this is an already-configured bridge window, its start * overrides "min". */ -if (avail.start) - min = avail.start; - + min_used = avail.start ? : min; max = avail.end;/* Ok, try it out.. */ - ret =allocate_resource (r, res, size, min, max, + ret =allocate_resource (r, res, size, min_used, max, align, alignf, alignf_data);if (ret ==0 )return 0 ;
Signature · 1 line
1.7.10.4
Bjorn Helgaas
AppliedQuoted 10 lines · Christoph Biedl
Commit
36e097a8a297("PCI: Split out bridge window override of minimum allocation address") claimed to do no functional changes but unfortunately
did: The "min" variable is altered. At least the AVM A1 PCMCIA adapter was no longer detected, breaking ISDN operation.So use a local copy of min to restore the previous behaviour.
Cc [email protected] # v3.14+Fixes 36e097a8a297 ("PCI: Split out bridge window override of minimum allocation address")Signed-off-by Christoph Biedl <[email protected]>
Applied to pci/misc for v4.5, thanks!
I don't think the problem is specific to the AVM A1 adapter; it is probably related to the specific system memory layout and maybe PCMCIA. If you have more information, e.g., a dmesg log and /proc/iomem contents, that would be useful documentation.
Quoted 47 lines
---
Since I have access to that piece of hardware for a limited time only, please get back to ASAP in case I should do more tests, by 2015-12-26 the latest.Additional tests were done for -stable on the latest 3.14, 4.1 and 4.3 releases, with all results as expected.
--- drivers/pci/bus.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)drivers/pci/bus.c +4
-4@@ -140,6 +140,8 @@ static int pci_bus_alloc_from_region(struct pci_bus *bus, struct resource *res, type_mask |=IORESOURCE_TYPE_BITS ;pci_bus_for_each_resource (bus, r, i) { +resource_size_t min_used; +if (!r)continue ;@@ -162,13 +164,11 @@ static int pci_bus_alloc_from_region(struct pci_bus *bus, struct resource *res,* this is an already-configured bridge window, its start * overrides "min". */ -if (avail.start) - min = avail.start; - + min_used = avail.start ? : min; max = avail.end;/* Ok, try it out.. */ - ret =allocate_resource (r, res, size, min, max, + ret =allocate_resource (r, res, size, min_used, max, align, alignf, alignf_data);if (ret ==0 )return 0 ;Signature · 6 lines
1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html