int err, mem = 1, 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, res, &iobase);
        if (err)
        if (err)
                goto out_release_res;
 
-       resource_list_for_each_entry(win, res) {
+       resource_list_for_each_entry_safe(win, tmp, res) {
                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);