diff options
author | Yinghai Lu <yinghai.lu@oracle.com> | 2012-01-30 06:25:24 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-02-29 19:33:39 -0500 |
commit | e4907ec10117f491d4a5630994a04bc0d3a7d0f1 (patch) | |
tree | 92612d9394c1b5e0acaac50db26ff70a6e868321 /drivers/pci/probe.c | |
parent | fe12043438bcd8c739e286977c8f44ff87483c62 (diff) |
PCI: workaround hard-wired bus number V2
commit 71f6bd4a23130cd2f4b036010c5790b1295290b9 upstream.
Fixes PCI device detection on IBM xSeries IBM 3850 M2 / x3950 M2
when using ACPI resources (_CRS).
This is default, a manual workaround (without this patch)
would be pci=nocrs boot param.
V2: Add dev_warn if the workaround is hit. This should reveal
how common such setups are (via google) and point to possible
problems if things are still not working as expected.
-> Suggested by Jan Beulich.
Tested-by: garyhade@us.ibm.com
Signed-off-by: Yinghai Lu <yinghai.lu@oracle.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/pci/probe.c')
-rw-r--r-- | drivers/pci/probe.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index bafb3c3d4a8..5b3771a7a41 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -657,6 +657,11 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, | |||
657 | dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n", | 657 | dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n", |
658 | secondary, subordinate, pass); | 658 | secondary, subordinate, pass); |
659 | 659 | ||
660 | if (!primary && (primary != bus->number) && secondary && subordinate) { | ||
661 | dev_warn(&dev->dev, "Primary bus is hard wired to 0\n"); | ||
662 | primary = bus->number; | ||
663 | } | ||
664 | |||
660 | /* Check if setup is sensible at all */ | 665 | /* Check if setup is sensible at all */ |
661 | if (!pass && | 666 | if (!pass && |
662 | (primary != bus->number || secondary <= bus->number)) { | 667 | (primary != bus->number || secondary <= bus->number)) { |