Re: [PATCH 4.4 39/53] PCI/PM: Add needs_resume flag to avoid suspend complete optimization
From: Ben Hutchings
Date: Tue Jun 06 2017 - 12:19:53 EST
On Mon, 2017-06-05 at 18:17 +0200, Greg Kroah-Hartman wrote:
> 4.4-stable review patch. If anyone has any objections, please let me know.
>
> ------------------
>
> From: Imre Deak <imre.deak@xxxxxxxxx>
>
> commit 4d071c3238987325b9e50e33051a40d1cce311cc upstream.
>
> 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.
The patch for i915 isn't in this series, or even in mainline yet, so I
don't think this belongs in stable yet. Also, based on the commit
message (commit adfdf85d795f "drm/i915: Prevent the system suspend
complete optimization") it appears that only 4.8 and later are affected
by the bug.
Ben.
> Suggested by Rafael.
>
> Signed-off-by: Imre Deak <imre.deak@xxxxxxxxx>
> Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
>
> ---
> drivers/pci/pci.c | 3 ++-
> include/linux/pci.h | 5 +++++
> 2 files changed, 7 insertions(+), 1 deletion(-)
>
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -2079,7 +2079,8 @@ bool pci_dev_keep_suspended(struct pci_d
>
> 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;
>
> /*
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -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 {
>
>
>
--
Ben Hutchings
Software Developer, Codethink Ltd.