|
@@ -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;
|