aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/host/pci-versatile.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/host/pci-versatile.c')
-rw-r--r--drivers/pci/host/pci-versatile.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/pci/host/pci-versatile.c b/drivers/pci/host/pci-versatile.c
index f234405770ab..b7dc07002f13 100644
--- a/drivers/pci/host/pci-versatile.c
+++ b/drivers/pci/host/pci-versatile.c
@@ -74,7 +74,7 @@ static int versatile_pci_parse_request_of_pci_ranges(struct device *dev,
74 int err, mem = 1, res_valid = 0; 74 int err, mem = 1, res_valid = 0;
75 struct device_node *np = dev->of_node; 75 struct device_node *np = dev->of_node;
76 resource_size_t iobase; 76 resource_size_t iobase;
77 struct resource_entry *win; 77 struct resource_entry *win, *tmp;
78 78
79 err = of_pci_get_host_bridge_resources(np, 0, 0xff, res, &iobase); 79 err = of_pci_get_host_bridge_resources(np, 0, 0xff, res, &iobase);
80 if (err) 80 if (err)
@@ -84,15 +84,17 @@ static int versatile_pci_parse_request_of_pci_ranges(struct device *dev,
84 if (err) 84 if (err)
85 goto out_release_res; 85 goto out_release_res;
86 86
87 resource_list_for_each_entry(win, res) { 87 resource_list_for_each_entry_safe(win, tmp, res) {
88 struct resource *res = win->res; 88 struct resource *res = win->res;
89 89
90 switch (resource_type(res)) { 90 switch (resource_type(res)) {
91 case IORESOURCE_IO: 91 case IORESOURCE_IO:
92 err = pci_remap_iospace(res, iobase); 92 err = pci_remap_iospace(res, iobase);
93 if (err) 93 if (err) {
94 dev_warn(dev, "error %d: failed to map resource %pR\n", 94 dev_warn(dev, "error %d: failed to map resource %pR\n",
95 err, res); 95 err, res);
96 resource_list_destroy_entry(win);
97 }
96 break; 98 break;
97 case IORESOURCE_MEM: 99 case IORESOURCE_MEM:
98 res_valid |= !(res->flags & IORESOURCE_PREFETCH); 100 res_valid |= !(res->flags & IORESOURCE_PREFETCH);