diff options
Diffstat (limited to 'drivers/pci/probe.c')
-rw-r--r-- | drivers/pci/probe.c | 22 |
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) | |||
1788 | struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus, | 1788 | struct 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 | } |