PCI/ACPI: Fix _OSC ordering to allow PCIe hotplug use when available
commit3dc48af310709b85d07c8b0d3aa8f1ead02829d3
authorNeil Horman <nhorman@tuxdriver.com>
Thu, 29 Aug 2013 20:17:05 +0000 (29 16:17 -0400)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 29 Aug 2013 21:34:53 +0000 (29 15:34 -0600)
tree4c5042c3c98f935edf06e6e1118102627c1008bc
parent058dd016a1ed43d0d8e0c6c10a472d560a3299b4
PCI/ACPI: Fix _OSC ordering to allow PCIe hotplug use when available

This fixes the problem of acpiphp claiming slots that should be managed
by pciehp, which may keep ExpressCard slots from working.

The acpiphp driver claims PCIe slots unless the BIOS has granted us
control of PCIe native hotplug via _OSC.  Prior to v3.10, the acpiphp
.add method (add_bridge()) was always called *after* we had requested
native hotplug control with _OSC.

But after 3b63aaa70e ("PCI: acpiphp: Do not use ACPI PCI subdriver
mechanism"), which appeared in v3.10, acpiphp initialization is done
during the bus scan via the pcibios_add_bus() hook, and this happens
*before* we request native hotplug control.

Therefore, acpiphp doesn't know yet whether the BIOS will grant control,
and it claims slots that we should be handling with native hotplug.

This patch requests native hotplug control earlier, so we know whether
the BIOS granted it to us before we initialize acpiphp.

To avoid reintroducing the ASPM issue fixed by b8178f130e ('Revert
"PCI/ACPI: Request _OSC control before scanning PCI root bus"'), we run
_OSC earlier but defer the actual ASPM calls until after the bus scan is
complete.

Tested successfully by myself.

[bhelgaas: changelog, mark for stable]
Reference: https://bugzilla.kernel.org/show_bug.cgi?id=60736
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Yinghai Lu <yinghai@kernel.org>
CC: stable@vger.kernel.org # v3.10+
CC: Len Brown <lenb@kernel.org>
CC: "Rafael J. Wysocki" <rjw@sisk.pl>
drivers/acpi/pci_root.c