[Intel-gfx] [PATCH v2 02/11] drm/i915/execlists: Cache the last priolist lookup

Chris Wilson chris at chris-wilson.co.uk
Thu Sep 28 12:05:14 UTC 2017


Quoting Joonas Lahtinen (2017-09-28 12:59:01)
> On Wed, 2017-09-27 at 17:44 +0100, Chris Wilson wrote:
> > From: Michał Winiarski <michal.winiarski at intel.com>
> > 
> > Avoid the repeated rbtree lookup for each request as we unwind them by
> > tracking the last priolist.
> > 
> > v2: Fix up my unhelpful suggestion of using default_priolist.
> > 
> > Signed-off-by: Michał Winiarski <michal.winiarski at intel.com>
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> 
> <SNIP>
> 
> > +++ b/drivers/gpu/drm/i915/intel_lrc.c
> > @@ -358,25 +358,31 @@ static void unwind_wa_tail(struct drm_i915_gem_request *rq)
> >  static void unwind_incomplete_requests(struct intel_engine_cs *engine)
> >  {
> >       struct drm_i915_gem_request *rq, *rn;
> > +     struct i915_priolist *uninitialized_var(p);
> > +     int last_prio = INT_MAX;
> >  
> >       lockdep_assert_held(&engine->timeline->lock);
> >  
> >       list_for_each_entry_safe_reverse(rq, rn,
> >                                        &engine->timeline->requests,
> >                                        link) {
> > -             struct i915_priolist *p;
> > -
> >               if (i915_gem_request_completed(rq))
> >                       return;
> >  
> >               __i915_gem_request_unsubmit(rq);
> >               unwind_wa_tail(rq);
> >  
> > -             p = lookup_priolist(engine,
> > -                                 &rq->priotree,
> > -                                 rq->priotree.priority);
> > -             list_add(&rq->priotree.link,
> > -                      &ptr_mask_bits(p, 1)->requests);
> > +             GEM_BUG_ON(rq->priotree.priority == INT_MAX);
> 
> This doesn't read aloud too logically when coming from the ring reset
> codepath, at first like would seem like we're not allowing maximum
> priority tasks to be unwinded (which only makes sense on the pre-empt
> odepath). #define INVALID_PRIORITY INT_MAX might help

And adding the GEM_BUG_ON() to execlists_schedule() to make sure we
never try to set it as well.
-Chris


More information about the Intel-gfx mailing list