[Intel-gfx] [PATCH 02/43] drm/i915: Force GPU idle on suspend
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Thu Mar 7 09:38:37 UTC 2019
On 06/03/2019 14:24, Chris Wilson wrote:
> To facilitate the next patch to allow preemptible kernels not to incur
> the wrath of hangcheck, we need to ensure that we can still suspend and
> shutdown. That is we will not be able to rely on hangcheck to terminate
> a blocking kernel and instead must manually do so ourselves. The
> advantage is that we can apply more pressure!
>
> As we now perform a GPU reset to clean up any residual kernels, we leave
> the GPU in an unknown state and in particular can not talk to the GuC
> before we reinitialise it following resume. For example, we no longer
> need to tell the GuC to suspend itself, as it is already reset.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/i915_gem.c | 20 +++++---------------
> 1 file changed, 5 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 0b23cf3be718..c10be23d959e 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -3123,13 +3123,6 @@ int i915_gem_wait_for_idle(struct drm_i915_private *i915,
>
> lockdep_assert_held(&i915->drm.struct_mutex);
>
> - if (GEM_SHOW_DEBUG() && !timeout) {
> - /* Presume that timeout was non-zero to begin with! */
> - dev_warn(&i915->drm.pdev->dev,
> - "Missed idle-completion interrupt!\n");
> - GEM_TRACE_DUMP();
> - }
> -
> err = wait_for_engines(i915);
> if (err)
> return err;
> @@ -4379,11 +4372,12 @@ int i915_gem_suspend(struct drm_i915_private *i915)
> I915_WAIT_INTERRUPTIBLE |
> I915_WAIT_LOCKED |
> I915_WAIT_FOR_IDLE_BOOST,
> - MAX_SCHEDULE_TIMEOUT);
> - if (ret && ret != -EIO)
> + HZ / 5);
> + if (ret == -EINTR)
> goto err_unlock;
>
> - assert_kernel_context_is_current(i915);
> + /* Forcibly cancel outstanding work and leave the gpu quiet. */
> + i915_gem_set_wedged(i915);
> }
> i915_retire_requests(i915); /* ensure we flush after wedging */
>
> @@ -4398,15 +4392,11 @@ int i915_gem_suspend(struct drm_i915_private *i915)
> */
> drain_delayed_work(&i915->gt.idle_work);
>
> - intel_uc_suspend(i915);
> -
> /*
> * Assert that we successfully flushed all the work and
> * reset the GPU back to its idle, low power state.
> */
> - WARN_ON(i915->gt.awake);
> - if (WARN_ON(!intel_engines_are_idle(i915)))
> - i915_gem_set_wedged(i915); /* no hope, discard everything */
> + GEM_BUG_ON(i915->gt.awake);
>
> intel_runtime_pm_put(i915, wakeref);
> return 0;
>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Regards,
Tvrtko
More information about the Intel-gfx
mailing list