linux/drivers/pci
Rafael J. Wysocki 15295d7dc3 PCI/PM: Clean up PME state when removing a device
commit 249bfb83cf upstream.

Devices are added to pci_pme_list when drivers use pci_enable_wake()
or pci_wake_from_d3(), but they aren't removed from the list unless
the driver explicitly disables wakeup.  Many drivers never disable
wakeup, so their devices remain on the list even after they are
removed, e.g., via hotplug.  A subsequent PME poll will oops when
it tries to touch the device.

This patch disables PME# on a device before removing it, which removes
the device from pci_pme_list.  This is safe even if the device never
had PME# enabled.

This oops can be triggered by unplugging a Thunderbolt ethernet adapter
on a Macbook Pro, as reported by Daniel below.

[bhelgaas: changelog]
Reference: http://lkml.kernel.org/r/CAMVG2svG21yiM1wkH4_2pen2n+cr2-Zv7TbH3Gj+8MwevZjDbw@mail.gmail.com
Reported-and-tested-by: Daniel J Blueman <daniel@quora.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-02-17 10:49:26 -08:00
..
hotplug PCI: shpchp: Handle push button event asynchronously 2013-01-27 20:47:43 -08:00
pcie PCI: Allow pcie_aspm=force even when FADT indicates it is unsupported 2013-01-27 20:47:43 -08:00
.gitignore
access.c PCI: Introduce INTx check & mask API 2012-01-06 12:10:34 -08:00
ats.c Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
bus.c PCI: add struct pci_host_bridge_window with CPU/bus address offset 2012-02-23 20:19:00 -07:00
hotplug-pci.c pci: Fix files needing export.h for EXPORT_SYMBOL/THIS_MODULE 2011-10-31 19:31:22 -04:00
hotplug.c
htirq.c pci: Fix files needing export.h for EXPORT_SYMBOL/THIS_MODULE 2011-10-31 19:31:22 -04:00
ioapic.c pci, x86/io-apic: Allow PCI_IOAPIC to be user configurable on x86 2011-12-06 09:21:05 +01:00
iov.c PCI: Rename pci_remove_bus_device to pci_stop_and_remove_bus_device 2012-02-27 12:12:18 -08:00
irq.c pci: Fix files needing export.h for EXPORT_SYMBOL/THIS_MODULE 2011-10-31 19:31:22 -04:00
Kconfig PCI: add a PCI resource reallocation config option 2012-02-24 09:38:59 -08:00
Makefile pci: frv architecture needs generic setup-bus infrastructure 2012-04-26 14:46:17 -04:00
msi.c x86/PCI: Expand the x86_msi_ops to have a restore MSIs. 2012-01-06 14:02:26 -08:00
msi.h PCI: MSI: Move MSI-X entry definition to pci_regs.h 2010-12-23 12:53:07 -08:00
of.c PCI: OF: Don't crash when bridge parent is NULL. 2011-08-19 08:51:37 -07:00
pci-acpi.c ACPI / PCI / PM: Fix device PM regression related to D3hot/D3cold 2012-05-17 16:16:16 -07:00
pci-driver.c PCI: EHCI: Fix crash during hibernation on ASUS computers 2012-09-14 10:00:20 -07:00
pci-label.c switch ->is_visible() to returning umode_t 2012-01-03 22:54:55 -05:00
pci-stub.c PCI: pci-stub: ignore zero-length id parameters 2010-12-23 12:53:52 -08:00
pci-sysfs.c PCI: Rename pci_remove_bus_device to pci_stop_and_remove_bus_device 2012-02-27 12:12:18 -08:00
pci.c PCI: EHCI: fix crash during suspend on ASUS computers 2012-07-16 09:04:39 -07:00
pci.h PCI: Move "pci reassigndev resource alignment" out of quirks.c 2012-02-24 14:37:26 -08:00
probe.c PCI: Check P2P bridge for invalid secondary/subordinate range 2012-10-13 05:38:48 +09:00
proc.c BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
quirks.c PCI: Reduce Ricoh 0xe822 SD card reader base clock frequency to 50MHz 2013-01-11 09:07:16 -08:00
remove.c PCI/PM: Clean up PME state when removing a device 2013-02-17 10:49:26 -08:00
rom.c pci: Fix files needing export.h for EXPORT_SYMBOL/THIS_MODULE 2011-10-31 19:31:22 -04:00
search.c PCI: use for_each_pci_dev() 2010-07-30 09:47:22 -07:00
setup-bus.c Merge branch 'pci-next+probe_only+bus2res-fb127cb' of git://github.com/bjorn-helgaas/linux into linux-next 2012-02-24 14:25:33 -08:00
setup-irq.c PCI: Make the struct pci_dev * argument of pci_fixup_irqs const. 2011-07-22 08:26:06 -07:00
setup-res.c PCI: Move "pci reassigndev resource alignment" out of quirks.c 2012-02-24 14:37:26 -08:00
slot.c pci: add module.h to files implicitly relying on its presence. 2011-10-31 19:31:23 -04:00
syscall.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
vpd.c pci: Fix files needing export.h for EXPORT_SYMBOL/THIS_MODULE 2011-10-31 19:31:22 -04:00
xen-pcifront.c Two fixes for regressions: 2012-04-06 17:54:53 -07:00