]> err.no Git - linux-2.6/blobdiff - arch/i386/pci/i386.c
Merge master.kernel.org:/home/rmk/linux-2.6-arm
[linux-2.6] / arch / i386 / pci / i386.c
index c205ea7e233bcd2fb3873d6d3626270f1a030b05..93a364c82150cddbe8886f8fc35d026120ae0e75 100644 (file)
@@ -106,11 +106,16 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list)
                if ((dev = bus->self)) {
                        for (idx = PCI_BRIDGE_RESOURCES; idx < PCI_NUM_RESOURCES; idx++) {
                                r = &dev->resource[idx];
-                               if (!r->start)
+                               if (!r->flags)
                                        continue;
                                pr = pci_find_parent_resource(dev, r);
-                               if (!pr || request_resource(pr, r) < 0)
+                               if (!r->start || !pr || request_resource(pr, r) < 0) {
                                        printk(KERN_ERR "PCI: Cannot allocate resource region %d of bridge %s\n", idx, pci_name(dev));
+                                       /* Something is wrong with the region.
+                                          Invalidate the resource to prevent child
+                                          resource allocations in this range. */
+                                       r->flags = 0;
+                               }
                        }
                }
                pcibios_allocate_bus_resources(&bus->children);
@@ -227,7 +232,7 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask)
 
        pci_read_config_word(dev, PCI_COMMAND, &cmd);
        old_cmd = cmd;
-       for(idx=0; idx<6; idx++) {
+       for(idx = 0; idx < PCI_NUM_RESOURCES; idx++) {
                /* Only set up the requested stuff */
                if (!(mask & (1<<idx)))
                        continue;