|
@@ -1184,6 +1184,8 @@ static void pcibios_allocate_bus_resources(struct pci_bus *bus)
|
|
|
pr, (pr && pr->name) ? pr->name : "nil");
|
|
|
|
|
|
if (pr && !(pr->flags & IORESOURCE_UNSET)) {
|
|
|
+ struct pci_dev *dev = bus->self;
|
|
|
+
|
|
|
if (request_resource(pr, res) == 0)
|
|
|
continue;
|
|
|
/*
|
|
@@ -1193,6 +1195,11 @@ static void pcibios_allocate_bus_resources(struct pci_bus *bus)
|
|
|
*/
|
|
|
if (reparent_resources(pr, res) == 0)
|
|
|
continue;
|
|
|
+
|
|
|
+ if (dev && i < PCI_BRIDGE_RESOURCE_NUM &&
|
|
|
+ pci_claim_bridge_resource(dev,
|
|
|
+ i + PCI_BRIDGE_RESOURCES) == 0)
|
|
|
+ continue;
|
|
|
}
|
|
|
pr_warning("PCI: Cannot allocate resource region "
|
|
|
"%d of PCI bridge %d, will remap\n", i, bus->number);
|
|
@@ -1401,7 +1408,10 @@ void pcibios_claim_one_bus(struct pci_bus *bus)
|
|
|
(unsigned long long)r->end,
|
|
|
(unsigned int)r->flags);
|
|
|
|
|
|
- pci_claim_resource(dev, i);
|
|
|
+ if (pci_claim_resource(dev, i) == 0)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ pci_claim_bridge_resource(dev, i);
|
|
|
}
|
|
|
}
|
|
|
|