[Intel-gfx] [PATCH v3 1/2] PCI / PM: Add needs_resume flag to avoid suspend complete optimization
Rafael J. Wysocki
rjw at rjwysocki.net
Fri Apr 28 21:33:02 UTC 2017
On Friday, April 28, 2017 05:16:02 PM Imre Deak wrote:
> 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 the next patch fixing suspend/resume on i915.
>
> Suggested by Rafael.
>
> Cc: Rafael J. Wysocki <rafael.j.wysocki at intel.com>
> Cc: Bjorn Helgaas <bhelgaas at google.com>
> Cc: linux-pci at vger.kernel.org
> Cc: stable at vger.kernel.org
> Signed-off-by: Imre Deak <imre.deak at intel.com>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki at intel.com>
The reason why the opt-out flag was not added on day one was because we were
not sure whether or not it would be necessary at all.
Quite evidently, it is needed.
> ---
>
> [ After discussing with Jani, I'm going to apply this and the next patch
> for now to the intel-gfx specific CI branch to unblock our testing. ]
>
> drivers/pci/pci.c | 3 ++-
> include/linux/pci.h | 7 +++++++
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index 7904d02..020f02d 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -2141,7 +2141,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->needs_resume)
> return false;
>
> /*
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 5948cfd..2f012f8 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -316,6 +316,9 @@ struct pci_dev {
> unsigned int hotplug_user_indicators:1; /* SlotCtl indicators
> controlled exclusively by
> user sysfs */
> + unsigned int needs_resume:1; /* Resume before calling the driver's
> + system suspend hooks, disabling the
> + direct_complete optimization. */
> unsigned int d3_delay; /* D3->D0 transition time in ms */
> unsigned int d3cold_delay; /* D3cold->D0 transition time in ms */
>
> @@ -1110,6 +1113,10 @@ bool pci_check_pme_status(struct pci_dev *dev);
> void pci_pme_wakeup_bus(struct pci_bus *bus);
> void pci_d3cold_enable(struct pci_dev *dev);
> void pci_d3cold_disable(struct pci_dev *dev);
> +static inline void pci_resume_before_suspend(struct pci_dev *dev, bool enable)
> +{
> + dev->needs_resume = enable;
> +}
>
> static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state,
> bool enable)
>
More information about the Intel-gfx
mailing list