[Intel-gfx] [PATCH 6/6] drm/i915/gt: Remove timeslice suppression

Chris Wilson chris at chris-wilson.co.uk
Wed Jan 6 00:27:06 UTC 2021


Quoting Andi Shyti (2021-01-06 00:07:40)
> Hi Chris,
> 
> On Mon, Jan 04, 2021 at 11:51:45AM +0000, Chris Wilson wrote:
> > In the next patch, we remove the strict priority system and continuously
> 
> next patch?

If you take a birds eye view, and can look back in time, that sentence
made more sense.

> 
> [...]
> 
> > -static bool
> > -timeslice_expired(const struct intel_engine_execlists *el,
> > -               const struct i915_request *rq)
> > +static bool needs_timeslice(const struct intel_engine_cs *engine,
> > +                         const struct i915_request *rq)
> >  {
> > -     return timer_expired(&el->timer) || timeslice_yield(el, rq);
> > -}
> > +     if (!intel_engine_has_timeslices(engine))
> > +             return false;
> >  
> > -static int
> > -switch_prio(struct intel_engine_cs *engine, const struct i915_request *rq)
> > -{
> > -     if (list_is_last(&rq->sched.link, &engine->active.requests))
> > -             return engine->execlists.queue_priority_hint;
> > +     /* If not currently active, or about to switch, wait for next event */
> > +     if (!rq || __i915_request_is_complete(rq))
> > +             return false;
> >  
> > -     return rq_prio(list_next_entry(rq, sched.link));
> > -}
> > +     /* We do not need to start the timeslice until after the ACK */
> > +     if (READ_ONCE(engine->execlists.pending[0]))
> > +             return false;
> >  
> > -static inline unsigned long
> > -timeslice(const struct intel_engine_cs *engine)
> > -{
> > -     return READ_ONCE(engine->props.timeslice_duration_ms);
> > +     /* If ELSP[1] is occupied, always check to see if worth slicing */
> > +     if (!list_is_last_rcu(&rq->sched.link, &engine->active.requests))
> > +             return true;
> > +
> > +     /* Otherwise, ELSP[0] is by itself, but may be waiting in the queue */
> > +     if (!RB_EMPTY_ROOT(&engine->execlists.queue.rb_root))
> > +             return true;
> > +
> > +     return !RB_EMPTY_ROOT(&engine->execlists.virtual.rb_root);
> >  }
> 
> the above diff is quite unreadable and besides the patch does not
> apply on the latest drm-tip.

The diff is quite meaningless since it removes one flow and replaces it
with a different system. I shall play with

--diff-algorithm={patience|minimal|histogram|myers}

and see what happens.


> In order to have a better review, I would suggest either one of
> the following:
> 
>  - use a different diff algorithm for generating the patch
>  - you rebase everything on top of the latest drm-tip so that I
>    can apply and check
>  - give me a branch so that I can checkout that branch and review
>    it from there.

fdo is quite full... But
https://cgit.freedesktop.org/~ickle/linux-2.6/log/?h=ringscheduler
made it intact.
-Chris


More information about the Intel-gfx mailing list