[Intel-gfx] [PATCH] drm/i915: Flush the irq and tasklets before asserting engine is idle

Mika Kuoppala mika.kuoppala at linux.intel.com
Thu Nov 2 09:57:30 UTC 2017


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

> Before we assert that the engine is idle, make sure we flush any
> residual tasklet. After that point, if the engine is not idle, more work
> may be queued despite us trying to park the engine and go to sleep.
>
> References: https://bugs.freedesktop.org/show_bug.cgi?id=103479
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala at linux.intel.com>

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

> ---
>  drivers/gpu/drm/i915/intel_engine_cs.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index 0f8c542f0af2..70eeafe8a6ec 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -1542,6 +1542,10 @@ void intel_engines_park(struct drm_i915_private *i915)
>  	enum intel_engine_id id;
>  
>  	for_each_engine(engine, i915, id) {
> +		/* Flush the residual irq tasklets first. */
> +		intel_engine_disarm_breadcrumbs(engine);
> +		tasklet_kill(&engine->execlists.irq_tasklet);
> +
>  		/*
>  		 * We are committed now to parking the engines, make sure there
>  		 * will be no more interrupts arriving later and the engines
> @@ -1558,9 +1562,6 @@ void intel_engines_park(struct drm_i915_private *i915)
>  		if (engine->park)
>  			engine->park(engine);
>  
> -		intel_engine_disarm_breadcrumbs(engine);
> -		tasklet_kill(&engine->execlists.irq_tasklet);
> -
>  		i915_gem_batch_pool_fini(&engine->batch_pool);
>  		engine->execlists.no_priolist = false;
>  	}
> -- 
> 2.15.0.rc2


More information about the Intel-gfx mailing list