[Intel-gfx] [PATCH] drm/i915: Always kick the execlists tasklet after reset

Mika Kuoppala mika.kuoppala at linux.intel.com
Fri Mar 15 10:39:25 UTC 2019


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

> Quoting Mika Kuoppala (2019-03-15 10:10:20)
>> Chris Wilson <chris at chris-wilson.co.uk> writes:
>> > +static inline bool __tasklet_enable(struct tasklet_struct *t)
>> > +{
>> > +     return atomic_dec_and_test(&t->count);
>> > +}
>> > +
>> >  #endif /* __I915_GEM_H__ */
>> > diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
>> > index dc3de09c7586..b2d0e16645c7 100644
>> > --- a/drivers/gpu/drm/i915/intel_lrc.c
>> > +++ b/drivers/gpu/drm/i915/intel_lrc.c
>> > @@ -2030,7 +2030,8 @@ static void execlists_reset_finish(struct intel_engine_cs *engine)
>> >       if (!RB_EMPTY_ROOT(&execlists->queue.rb_root))
>> >               execlists->tasklet.func(execlists->tasklet.data);
>> >  
>> > -     tasklet_enable(&execlists->tasklet);
>> > +     if (__tasklet_enable(&execlists->tasklet))
>> > +             tasklet_hi_schedule(&execlists->tasklet);
>> 
>> Why not just go fully unconditional, enable and schedule?
>
> If we schedule before we finish the reset, the tasklet busyspins, get's
> kicked to ksoftirqd, which then busyspins for its timeslice and gets
> bumped around by the scheduler until finally ready.

Hmm stealing the whole timeslice is rude. Just wanted
to weight in the extra trickery. Random thought was
to advocate for execlists_tasklet_enable|disable,
but perhaps we are not there yet.

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


More information about the Intel-gfx mailing list