Bug 84761

Summary: LSI controller not found when specifying pci=assign-busses
Product: Drivers Reporter: David Milburn (dmilburn)
Component: PCIAssignee: drivers_pci (drivers_pci)
Status: NEW ---    
Severity: normal CC: andreas.noever, bjorn, myron.stowe
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: linux-3.17.0-rc2 Subsystem:
Regression: No Bisected commit-id:
Attachments: Patch to change pcibios_assign_all_busses check in pci_scan_bridge()
output of lspci -vv
Successful boot without pci=assign-busses
Console output when using pci=assign-busses

Description David Milburn 2014-09-17 14:48:40 UTC
Created attachment 150651 [details]
Patch to change pcibios_assign_all_busses check in pci_scan_bridge()

When booting with kernel command line option "pci=assign-busses", LSI controller
is no longer found.

05:00.0 SCSI storage controller: LSI Logic / Symbios Logic SAS1068E PCI-Express Fusion-MPT SAS (rev 08)

It seems the problem is in pci_scan_bridge (drivers/pci/probe.c):

[    2.542563] PCI_READ_BRIDGE_BASES:
[    2.545953] PCI_SCAN_BRIDGE:
[    2.548823] scanning [bus 01-01] behind bridge, pass 0
[    2.553947] PCI_SCAN_BRIDGE:
[    2.556818] scanning [bus 05-05] behind bridge, pass 0 <=========PROBLEM
[    2.561942] PCI_SCAN_BRIDGE:
[    2.564812] scanning [bus 06-06] behind bridge, pass 0
[    2.569936] PCI_SCAN_BRIDGE:
[    2.572806] scanning [bus 03-03] behind bridge, pass 0
[    2.577930] PCI_SCAN_BRIDGE:
[    2.580800] scanning [bus 02-02] behind bridge, pass 0
[    2.585923] PCI_SCAN_BRIDGE:
[    2.588793] scanning [bus 04-04] behind bridge, pass 0

If I change the pass 0 check from !pcibios_assign_all_busses() to
pcibios_assign_all_busses() it finds the LSI controller; however, it looks
like pci_scan_bridge has checked !pcibios_assisng_all_bussses() for a
very long time.

(changed code in pci_scan_bridge, causes driver to head down that first path)
  if ((secondary || subordinate) && pcibios_assign_all_busses() &&
      !is_cardbus && !broken) {

[    2.560225] PCI_SCAN_BRIDGE: secondary 1 subordinate 1 is_cardbus 0 broken 0
[    2.567252] PCI_SCAN_BRIDGE: !pcibios_assign_all_busses() 0
 .
 .
[    2.849864] scanning [bus 05-05] behind bridge, pass 0   <=====SCANNING
[    2.854988] PCI_SCAN_BRIDGE: CHECKING FOR ASSIGN_ALL_BUSSES
[    2.860544] PCI_SCAN_BRIDGE: secondary 5 subordinate 5 is_cardbus 0 broken 0
[    2.867572] PCI_SCAN_BRIDGE: !pcibios_assign_all_busses() 0
[    2.873126] PCI_SCAN_BRIDGE: ASSIGN_ALL_BUSSES child           (null)
[    2.879546] PCI_ADD_NEW_BUS busnr 5:
[    2.883109] PCI_ALLOC_CHILD_BUS:
[    2.886327] PCI_SET_BUS_SPEED:
[    2.889407] PCI_BUS_INSERT_BUSN_RES:
[    2.892971] PCI_SCAN_CHILD_BUS:
[    2.896100] PCI_SCAN_CHILD_BUS: scanning bus
[    2.900357] PCI_SCAN_SLOT:
[    2.903053] PCI_SCAN_SINGLE_DEVICE:
[    2.906529] PCI_SCAN_DEVICE: devfn 0
[    2.910093] PCI_BUS_READ_DEV_VENDOR_ID: devfn 0
[    2.914608] PCI_ALLOC_DEV:
[    2.917305] PCI_SETUP_DEVICE:
[    2.920262] SET_PCIE_PORT_TYPE:       =====DEVICE FOUND BELOW=====
[    2.923399] pci 0000:05:00.0: [1000:0058] type 00 class 0x010000
[    2.923401] [1000:0058] type 00 class 0x010000
[    2.927841] pci 0000:05:00.0: reg 0x10: [io  0xec00-0xecff]
[    2.927852] pci 0000:05:00.0: reg 0x14: [mem 0xde2ec000-0xde2effff 64bit]
[    2.927863] pci 0000:05:00.0: reg 0x1c: [mem 0xde2f0000-0xde2fffff 64bit]
[    2.927877] pci 0000:05:00.0: reg 0x30: [mem 0xde100000-0xde1fffff pref]
[    2.927879] PCI_DEVICE_ADD:
Comment 1 David Milburn 2014-09-17 14:52:28 UTC
Created attachment 150661 [details]
output of lspci -vv
Comment 2 David Milburn 2014-09-17 17:49:23 UTC
Created attachment 150721 [details]
Successful boot without pci=assign-busses
Comment 3 David Milburn 2014-09-17 17:52:36 UTC
Created attachment 150731 [details]
Console output when using pci=assign-busses