[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