|
@@ -29,7 +29,7 @@ static int gen_pci_parse_request_of_pci_ranges(struct device *dev,
|
|
|
int err, res_valid = 0;
|
|
|
struct device_node *np = dev->of_node;
|
|
|
resource_size_t iobase;
|
|
|
- struct resource_entry *win;
|
|
|
+ struct resource_entry *win, *tmp;
|
|
|
|
|
|
err = of_pci_get_host_bridge_resources(np, 0, 0xff, resources, &iobase);
|
|
|
if (err)
|
|
@@ -39,15 +39,17 @@ static int gen_pci_parse_request_of_pci_ranges(struct device *dev,
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
- resource_list_for_each_entry(win, resources) {
|
|
|
+ resource_list_for_each_entry_safe(win, tmp, resources) {
|
|
|
struct resource *res = win->res;
|
|
|
|
|
|
switch (resource_type(res)) {
|
|
|
case IORESOURCE_IO:
|
|
|
err = pci_remap_iospace(res, iobase);
|
|
|
- if (err)
|
|
|
+ if (err) {
|
|
|
dev_warn(dev, "error %d: failed to map resource %pR\n",
|
|
|
err, res);
|
|
|
+ resource_list_destroy_entry(win);
|
|
|
+ }
|
|
|
break;
|
|
|
case IORESOURCE_MEM:
|
|
|
res_valid |= !(res->flags & IORESOURCE_PREFETCH);
|