[Intel-gfx] [PATCH 07/15] drm/i915: Move idle checks before intel_engine_init_global_seqno()

Mika Kuoppala mika.kuoppala at linux.intel.com
Thu Jul 20 13:16:05 UTC 2017


Chris Wilson <chris at chris-wilson.co.uk> writes:

> intel_engine_init_globa_seqno() may be called from an uncontrolled
> set-wedged path where we have given up waiting for broken hw and declare
> it defunct. Along that path, any sanity checks that the hw is idle
> before we adjust its state will expectedly fail, so we simply cannot.
> Instead of asserting inside init_global_seqno, we move them to the
> normal caller reset_all_global_seqno() as it handles runtime seqno
> wraparound.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

Reviewed-by: Mika Kuoppala <mika.kuoppala at intel.com>

> ---
>  drivers/gpu/drm/i915/i915_gem_request.c | 4 ++++
>  drivers/gpu/drm/i915/intel_engine_cs.c  | 3 ---
>  2 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c
> index 483af8921060..d93a185c0f0a 100644
> --- a/drivers/gpu/drm/i915/i915_gem_request.c
> +++ b/drivers/gpu/drm/i915/i915_gem_request.c
> @@ -213,6 +213,10 @@ static int reset_all_global_seqno(struct drm_i915_private *i915, u32 seqno)
>  				cond_resched();
>  		}
>  
> +		/* Check we are idle before we fiddle with hw state! */
> +		GEM_BUG_ON(!intel_engine_is_idle(engine));
> +		GEM_BUG_ON(i915_gem_active_isset(&engine->timeline->last_request));
> +
>  		/* Finally reset hw state */
>  		intel_engine_init_global_seqno(engine, seqno);
>  		tl->seqno = seqno;
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index fbac94557ffa..19297e6aab41 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -337,9 +337,6 @@ void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno)
>  {
>  	struct drm_i915_private *dev_priv = engine->i915;
>  
> -	GEM_BUG_ON(!intel_engine_is_idle(engine));
> -	GEM_BUG_ON(i915_gem_active_isset(&engine->timeline->last_request));
> -
>  	/* Our semaphore implementation is strictly monotonic (i.e. we proceed
>  	 * so long as the semaphore value in the register/page is greater
>  	 * than the sync value), so whenever we reset the seqno,
> -- 
> 2.13.2


More information about the Intel-gfx mailing list