Quoting Chris Wilson (2018-07-13 21:35:28)
> Inside intel_engine_is_idle(), we flush the tasklet to ensure that is
> being run in a timely fashion (ksoftirqd has taught us to expect the
> worst). However, if we are in the middle of reset, the HW may not yet be
> ready to execute the submission tasklet and so we must respect the
> disable flag.
> 
> Fixes: dd0cf235d81f ("drm/i915: Speed up idle detection by kicking the 
> tasklets")
> Testcase: igt/drv_selftest/live_hangcheck
> Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursu...@intel.com>
> Cc: Mika Kuoppala <mika.kuopp...@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_engine_cs.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c 
> b/drivers/gpu/drm/i915/intel_engine_cs.c
> index 220050107c48..fccb95ea1315 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -989,16 +989,17 @@ bool intel_engine_is_idle(struct intel_engine_cs 
> *engine)
>  
>         /* Waiting to drain ELSP? */
>         if (READ_ONCE(engine->execlists.active)) {
> -               struct intel_engine_execlists *execlists = &engine->execlists;
> +               struct tasklet_struct *t = &engine->execlists.tasklet;
>  
>                 local_bh_disable();
> -               if (tasklet_trylock(&execlists->tasklet)) {
> -                       execlists->tasklet.func(execlists->tasklet.data);
> -                       tasklet_unlock(&execlists->tasklet);
> +               if (tasklet_trylock(t)) {
> +                       if (__tasklet_is_enabled(t))

I should leave a clue here. I don't think calling it reset_in_progress()
ties in well with the pure tasklet nature here, so

/* must wait if a GPU reset is in progress */
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to