[Intel-gfx] [PATCH] drm/i915: flush delayed_resume_work when suspending

Jani Nikula jani.nikula at linux.intel.com
Tue Jul 1 16:49:05 CEST 2014


On Sat, 28 Jun 2014, Paulo Zanoni <przanoni at gmail.com> wrote:
> From: Paulo Zanoni <paulo.r.zanoni at intel.com>
>
> It is possible that, by the time we run i915_drm_freeze(),
> delayed_resume_work was already queued but did not run yet. If it
> still didn't run after intel_runtime_pm_disable_interrupts(), by the
> time it runs it will try to change the interrupt registers with the
> interrupts already disabled, which will trigger a WARN. We can
> reliably reproduce this with the pm_rpm system-suspend test case.
>
> In order to avoid the problem, we have to flush the work before
> disabling the interrupts. We could also cancel the work instead of
> flushing it, but that would require us to put a runtime PM reference -
> and any other resource we may need in the future - in case the work
> was already queued, so I believe flushing the work is more
> future-proof, although less efficient. But I can also change this part
> if someone requests.
>
> Another thing I tried was to move the intel_suspend_gt_powersave()
> call to before intel_runtime_pm_disable_interrupts(), but since that
> function needs to be called after the interrupts are already disabled,
> due to dev_priv->rps.work, this strategy didn't work.
>
> Testcase: igt/pm_rpm/system-suspend
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=80517
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni at intel.com>

Pushed to dinq, thanks for the patch and review.

BR,
Jani.


> ---
>  drivers/gpu/drm/i915/i915_drv.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index e64547e..672694b 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -524,6 +524,8 @@ static int i915_drm_freeze(struct drm_device *dev)
>  			return error;
>  		}
>  
> +		flush_delayed_work(&dev_priv->rps.delayed_resume_work);
> +
>  		intel_runtime_pm_disable_interrupts(dev);
>  		dev_priv->enable_hotplug_processing = false;
>  
> -- 
> 2.0.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Jani Nikula, Intel Open Source Technology Center



More information about the Intel-gfx mailing list