PCI/PM: Add needs_resume flag to avoid suspend complete optimization
authorImre Deak <imre.deak@intel.com>
Tue, 23 May 2017 19:18:17 +0000 (14:18 -0500)
committerSasha Levin <alexander.levin@verizon.com>
Mon, 26 Jun 2017 02:02:20 +0000 (22:02 -0400)
[ Upstream commit 4d071c3238987325b9e50e33051a40d1cce311cc ]

Some drivers - like i915 - may not support the system suspend direct
complete optimization due to differences in their runtime and system
suspend sequence.  Add a flag that when set resumes the device before
calling the driver's system suspend handlers which effectively disables
the optimization.

Needed by a future patch fixing suspend/resume on i915.

Suggested by Rafael.

Signed-off-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: stable@vger.kernel.org
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
drivers/pci/pci.c
include/linux/pci.h

index 358d01e52d8f7dcd4d232b79d0b082d22110a19f..b5b80a5560eda30f137aff2c2b2ab51899171dc2 100644 (file)
@@ -2038,7 +2038,8 @@ bool pci_dev_keep_suspended(struct pci_dev *pci_dev)
 
        if (!pm_runtime_suspended(dev)
            || pci_target_state(pci_dev) != pci_dev->current_state
-           || platform_pci_need_resume(pci_dev))
+           || platform_pci_need_resume(pci_dev)
+           || (pci_dev->dev_flags & PCI_DEV_FLAGS_NEEDS_RESUME))
                return false;
 
        /*
index 109ccee9e3e6eb6d2a8888b3210f22b8024c2666..fee06c4c8e4db269aa57e75f082fc23c04caa2a2 100644 (file)
@@ -182,6 +182,11 @@ enum pci_dev_flags {
        PCI_DEV_FLAGS_NO_PM_RESET = (__force pci_dev_flags_t) (1 << 7),
        /* Get VPD from function 0 VPD */
        PCI_DEV_FLAGS_VPD_REF_F0 = (__force pci_dev_flags_t) (1 << 8),
+       /*
+        * Resume before calling the driver's system suspend hooks, disabling
+        * the direct_complete optimization.
+        */
+       PCI_DEV_FLAGS_NEEDS_RESUME = (__force pci_dev_flags_t) (1 << 11),
 };
 
 enum pci_irq_reroute_variant {