[Intel-gfx] [PATCH 2/3] drm/i915: Flush the tasklet when checking for idle

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Fri Sep 14 10:21:07 UTC 2018


On 14/09/2018 09:00, Chris Wilson wrote:
> In order to reduce latency when checking for idle we kick the tasklet
> directly. Sometimes this is not enough as it is queued on another cpu
> and so to improve the accuracy of this idle-check (and so to reduce
> latency overall by avoiding another pass, or worse declaring a timeout!)
> wait for the tasklet to complete.
> 
> References: https://bugs.freedesktop.org/show_bug.cgi?id=107916
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Cc: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> Cc: Michel Thierry <michel.thierry at intel.com>
> ---
>   drivers/gpu/drm/i915/intel_engine_cs.c | 3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index 10cd051ba29e..217ed3ee1cab 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -990,6 +990,9 @@ bool intel_engine_is_idle(struct intel_engine_cs *engine)
>   		}
>   		local_bh_enable();
>   
> +		/* Otherwise flush the tasklet if it was on another cpu */
> +		tasklet_unlock_wait(t);

That's one bizarre api! I was expecting it to mess up the state here but 
nope, apparently it is actually what one would expect to be named 
tasklet_sync.

> +
>   		if (READ_ONCE(engine->execlists.active))
>   			return false;
>   	}
> 

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko


More information about the Intel-gfx mailing list