aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/probe.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/probe.c')
-rw-r--r--drivers/pci/probe.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 59011ce9840f..6258f6f24983 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1788,13 +1788,33 @@ void pci_bus_release_busn_res(struct pci_bus *b)
1788struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus, 1788struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
1789 struct pci_ops *ops, void *sysdata, struct list_head *resources) 1789 struct pci_ops *ops, void *sysdata, struct list_head *resources)
1790{ 1790{
1791 struct pci_host_bridge_window *window;
1792 bool found = false;
1791 struct pci_bus *b; 1793 struct pci_bus *b;
1794 int max;
1795
1796 list_for_each_entry(window, resources, list)
1797 if (window->res->flags & IORESOURCE_BUS) {
1798 found = true;
1799 break;
1800 }
1792 1801
1793 b = pci_create_root_bus(parent, bus, ops, sysdata, resources); 1802 b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
1794 if (!b) 1803 if (!b)
1795 return NULL; 1804 return NULL;
1796 1805
1797 b->busn_res.end = pci_scan_child_bus(b); 1806 if (!found) {
1807 dev_info(&b->dev,
1808 "No busn resource found for root bus, will use [bus %02x-ff]\n",
1809 bus);
1810 pci_bus_insert_busn_res(b, bus, 255);
1811 }
1812
1813 max = pci_scan_child_bus(b);
1814
1815 if (!found)
1816 pci_bus_update_busn_res_end(b, max);
1817
1798 pci_bus_add_devices(b); 1818 pci_bus_add_devices(b);
1799 return b; 1819 return b;
1800} 1820}