aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorenzo Pieralisi <lorenzo.pieralisi@arm.com>2014-10-23 11:23:06 -0400
committerBjorn Helgaas <bhelgaas@google.com>2014-11-05 18:49:24 -0500
commita5525b240368cf496e669703a5fe169febbc72ef (patch)
tree900fed4ba401f8a02afc84e6cba6a6cd2995d5e7
parentf114040e3ea6e07372334ade75d1ee0775c355e1 (diff)
PCI: generic: Allocate config space windows after limiting bus number range
The number of config space windows allocated for the host bridge depends on how many bus numbers are below the bridge. Instead of first allocating the windows and then limiting the bus resource, this patch reshuffles the code so that if any limitation is applied to the bus resource, it is taken into account in the windows allocation. [bhelgaas: changelog] Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Will Deacon <will.deacon@arm.com>
-rw-r--r--drivers/pci/host/pci-host-generic.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/pci/host/pci-host-generic.c b/drivers/pci/host/pci-host-generic.c
index 3d2076f59911..1e1a80fc6faa 100644
--- a/drivers/pci/host/pci-host-generic.c
+++ b/drivers/pci/host/pci-host-generic.c
@@ -276,17 +276,17 @@ static int gen_pci_parse_map_cfg_windows(struct gen_pci *pci)
276 return err; 276 return err;
277 } 277 }
278 278
279 pci->cfg.win = devm_kcalloc(dev, resource_size(&pci->cfg.bus_range),
280 sizeof(*pci->cfg.win), GFP_KERNEL);
281 if (!pci->cfg.win)
282 return -ENOMEM;
283
284 /* Limit the bus-range to fit within reg */ 279 /* Limit the bus-range to fit within reg */
285 bus_max = pci->cfg.bus_range.start + 280 bus_max = pci->cfg.bus_range.start +
286 (resource_size(&pci->cfg.res) >> pci->cfg.ops->bus_shift) - 1; 281 (resource_size(&pci->cfg.res) >> pci->cfg.ops->bus_shift) - 1;
287 pci->cfg.bus_range.end = min_t(resource_size_t, pci->cfg.bus_range.end, 282 pci->cfg.bus_range.end = min_t(resource_size_t, pci->cfg.bus_range.end,
288 bus_max); 283 bus_max);
289 284
285 pci->cfg.win = devm_kcalloc(dev, resource_size(&pci->cfg.bus_range),
286 sizeof(*pci->cfg.win), GFP_KERNEL);
287 if (!pci->cfg.win)
288 return -ENOMEM;
289
290 /* Map our Configuration Space windows */ 290 /* Map our Configuration Space windows */
291 if (!devm_request_mem_region(dev, pci->cfg.res.start, 291 if (!devm_request_mem_region(dev, pci->cfg.res.start,
292 resource_size(&pci->cfg.res), 292 resource_size(&pci->cfg.res),