kernel-ark/drivers/pci
Rafael J. Wysocki d491f2b752 PCI: PM: Avoid possible suspend-to-idle issue
If a PCI driver leaves the device handled by it in D0 and calls
pci_save_state() on the device in its ->suspend() or ->suspend_late()
callback, it can expect the device to stay in D0 over the whole
s2idle cycle.  However, that may not be the case if there is a
spurious wakeup while the system is suspended, because in that case
pci_pm_suspend_noirq() will run again after pci_pm_resume_noirq()
which calls pci_restore_state(), via pci_pm_default_resume_early(),
so state_saved is cleared and the second iteration of
pci_pm_suspend_noirq() will invoke pci_prepare_to_sleep() which
may change the power state of the device.

To avoid that, add a new internal flag, skip_bus_pm, that will be set
by pci_pm_suspend_noirq() when it runs for the first time during the
given system suspend-resume cycle if the state of the device has
been saved already and the device is still in D0.  Setting that flag
will cause the next iterations of pci_pm_suspend_noirq() to set
state_saved for pci_pm_resume_noirq(), so that it always restores the
device state from the originally saved data, and avoid calling
pci_prepare_to_sleep() for the device.

Fixes: 33e4f80ee6 ("ACPI / PM: Ignore spurious SCI wakeups from suspend-to-idle")
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Keith Busch <keith.busch@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
2019-05-27 10:55:08 +02:00
..
controller pci-v5.2-changes 2019-05-14 10:30:10 -07:00
endpoint Merge branch 'remotes/lorenzo/pci/misc' 2019-05-13 18:34:44 -05:00
hotplug pci-v5.2-changes 2019-05-14 10:30:10 -07:00
pcie pci-v5.2-changes 2019-05-14 10:30:10 -07:00
switch pci-v5.2-changes 2019-05-14 10:30:10 -07:00
access.c
ats.c
bus.c PCI: Replace dev_printk(KERN_DEBUG) with dev_info(), etc 2019-05-09 07:49:58 -05:00
ecam.c
host-bridge.c
iov.c
irq.c
Kconfig
Makefile PCI: OF: Allow of_pci_get_max_link_speed() to be used by PCI Endpoint drivers 2019-04-15 13:24:02 +01:00
mmap.c
msi.c PCI: Add pci_dev_id() helper 2019-04-29 16:12:05 -05:00
of.c Merge branch 'remotes/lorenzo/pci/keystone' 2019-05-13 18:34:41 -05:00
p2pdma.c PCI/P2PDMA: Allow P2P DMA between any devices under AMD ZEN Root Complex 2019-05-01 16:53:39 -05:00
pci-acpi.c ACPI/PCI: PM: Add missing wakeup.flags.valid checks 2019-05-27 10:51:06 +02:00
pci-bridge-emul.c
pci-bridge-emul.h
pci-driver.c PCI: PM: Avoid possible suspend-to-idle issue 2019-05-27 10:55:08 +02:00
pci-label.c
pci-mid.c
pci-pf-stub.c
pci-stub.c PCI: Replace printk(KERN_INFO) with pr_info(), etc 2019-05-09 07:49:54 -05:00
pci-sysfs.c PCI: Use dev_printk() when possible 2019-05-09 07:49:49 -05:00
pci.c pci-v5.2-changes 2019-05-14 10:30:10 -07:00
pci.h pci-v5.2-changes 2019-05-14 10:30:10 -07:00
probe.c pci-v5.2-changes 2019-05-14 10:30:10 -07:00
proc.c PCI: Mark expected switch fall-throughs 2019-03-20 15:11:11 -05:00
quirks.c pci-v5.2-changes 2019-05-14 10:30:10 -07:00
remove.c
rom.c
search.c PCI: Add pci_dev_id() helper 2019-04-29 16:12:05 -05:00
setup-bus.c Merge branch 'pci/trivial' 2019-05-13 18:34:48 -05:00
setup-irq.c
setup-res.c
slot.c PCI: Replace printk(KERN_INFO) with pr_info(), etc 2019-05-09 07:49:54 -05:00
syscall.c
vc.c
vpd.c
xen-pcifront.c Merge branch 'pci/printk' 2019-05-13 18:34:46 -05:00