linux/drivers/pci/hotplug
Bjorn Helgaas 2cc56f3028 PCI: pciehp: Remove assumptions about which commands cause completion events
We use incorrect logic to decide whether a PCIe hotplug controller
generates command completion events.

5808639bfa ("pciehp: fix slow probing") assumed that the Slot Status
"Command Completed" bit was set only for commands affecting slot power,
indicators, or electromechanical interlock.  That assumption is false: per
sec. 6.7.3.2 of PCIe spec r3.0, a write targeting any portion of the Slot
Control register is a command, and (if command completed events are
supported) software must wait for a command to complete before issuing the
next command.

5808639bfa was to fix boot-time timeouts (see bugzilla below) on a Lenovo
Thinkpad R61 with an Intel hotplug controller.  The controller probably has
the Intel CF118 erratum, which means it doesn't report Command Completed
unless the Slot Control power, indicator, or interlock bits are changed.
This causes a timeout because pciehp always waits for Command Complete (if
supported), regardless of which bits are changed.

Remove the incorrect logic because the timeouts have been addressed
differently by these changes:

  PCI: pciehp: Wait for hotplug command completion lazily
  PCI: pciehp: Compute timeout from hotplug command start time

Link: https://bugzilla.kernel.org/show_bug.cgi?id=10751
Tested-by: Rajat Jain <rajatxjain@gmail.com>	(IDT 807a controller)
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Yinghai Lu <yinghai@kernel.org>
2014-06-17 15:26:20 -06:00
..
acpi_pcihp.c ACPI: Eliminate the DEVICE_ACPI_HANDLE() macro 2013-11-14 23:17:21 +01:00
acpiphp_core.c PCI: Move EXPORT_SYMBOL so it immediately follows function/variable 2014-06-10 13:36:10 -06:00
acpiphp_glue.c PCI changes for the v3.16 merge window (part 2): 2014-06-12 13:20:24 -07:00
acpiphp_ibm.c ACPI: Clean up inclusions of ACPI header files 2013-12-07 01:03:14 +01:00
acpiphp.h ACPI / hotplug / PCI: Add hotplug contexts to PCI host bridges 2014-06-11 21:08:49 +02:00
cpci_hotplug_core.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
cpci_hotplug_pci.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
cpci_hotplug.h PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
cpcihp_generic.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
cpcihp_zt5550.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
cpcihp_zt5550.h PCI: Fix whitespace, capitalization, and spelling errors 2013-11-14 11:28:18 -07:00
cpqphp_core.c PCI: Merge multi-line quoted strings 2014-06-10 20:20:42 -06:00
cpqphp_ctrl.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
cpqphp_nvram.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
cpqphp_nvram.h PCI: Remove "extern" from function declarations 2013-04-17 10:21:17 -06:00
cpqphp_pci.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
cpqphp_sysfs.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
cpqphp.h PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
ibmphp_core.c PCI: Merge multi-line quoted strings 2014-06-10 20:20:42 -06:00
ibmphp_ebda.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
ibmphp_hpc.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
ibmphp_pci.c PCI: Merge multi-line quoted strings 2014-06-10 20:20:42 -06:00
ibmphp_res.c PCI: Merge multi-line quoted strings 2014-06-10 20:20:42 -06:00
ibmphp.h PCI: Fix whitespace, capitalization, and spelling errors 2013-11-14 11:28:18 -07:00
Kconfig PCI: Fix whitespace, capitalization, and spelling errors 2013-11-14 11:28:18 -07:00
Makefile PCI: Fix whitespace, capitalization, and spelling errors 2013-11-14 11:28:18 -07:00
pci_hotplug_core.c PCI: Merge multi-line quoted strings 2014-06-10 20:20:42 -06:00
pciehp_acpi.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
pciehp_core.c PCI: Prevent NULL dereference during pciehp probe 2014-06-16 11:47:37 -06:00
pciehp_ctrl.c PCI: Merge multi-line quoted strings 2014-06-10 20:20:42 -06:00
pciehp_hpc.c PCI: pciehp: Remove assumptions about which commands cause completion events 2014-06-17 15:26:20 -06:00
pciehp_pci.c PCI: Merge multi-line quoted strings 2014-06-10 20:20:42 -06:00
pciehp.h PCI: pciehp: Compute timeout from hotplug command start time 2014-06-17 15:26:11 -06:00
pcihp_skeleton.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
pcihp_slot.c PCI: hotplug: Remove unnecessary "dev->bus" test 2014-04-14 16:06:30 -06:00
rpadlpar_core.c PCI: rpaphp: Use pci_is_bridge() to simplify code 2014-05-27 14:57:55 -06:00
rpadlpar_sysfs.c PCI: introduce pci_slot 2008-06-10 14:37:03 -07:00
rpadlpar.h PCI: Remove "extern" from function declarations 2013-04-17 10:21:17 -06:00
rpaphp_core.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
rpaphp_pci.c PCI: Fix whitespace, capitalization, and spelling errors 2013-11-14 11:28:18 -07:00
rpaphp_slot.c PCI: Fix whitespace, capitalization, and spelling errors 2013-11-14 11:28:18 -07:00
rpaphp.h PCI: Fix whitespace, capitalization, and spelling errors 2013-11-14 11:28:18 -07:00
s390_pci_hpc.c PCI: Remove unnecessary includes of <linux/init.h> 2014-04-14 16:12:37 -06:00
sgi_hotplug.c PCI: Merge multi-line quoted strings 2014-06-10 20:20:42 -06:00
shpchp_core.c PCI: Merge multi-line quoted strings 2014-06-10 20:20:42 -06:00
shpchp_ctrl.c PCI changes for the v3.16 merge window (part 2): 2014-06-12 13:20:24 -07:00
shpchp_hpc.c PCI: Merge multi-line quoted strings 2014-06-10 20:20:42 -06:00
shpchp_pci.c PCI: Merge multi-line quoted strings 2014-06-10 20:20:42 -06:00
shpchp_sysfs.c PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00
shpchp.h PCI: Whitespace cleanup 2014-06-10 20:20:19 -06:00