[Intel-gfx] [PATCH v3] drm/i915/execlists: Always clear preempt status on cancelling all

Chris Wilson chris at chris-wilson.co.uk
Mon Jul 16 12:57:39 UTC 2018


Quoting Tvrtko Ursulin (2018-07-16 13:55:55)
> 
> On 16/07/2018 13:54, Chris Wilson wrote:
> > On reset/wedging, we cancel all pending replies from the HW and we also
> > want to cancel an outstanding preemption event. Since we use the same
> > function to cancel the pending replies for reset and for a preemption
> > event, we can simply clear the active tracking for all.
> > 
> > v2: Keep execlists_user_end() markup for wedging
> > v3: Move assignment to inline to hide the bare assignment.
> > 
> > Fixes: 60a943245413 ("drm/i915/execlists: Drop clear_gtiir() on GPU reset")
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> > ---
> >   drivers/gpu/drm/i915/intel_guc_submission.c | 2 --
> >   drivers/gpu/drm/i915/intel_lrc.c            | 5 ++---
> >   drivers/gpu/drm/i915/intel_ringbuffer.h     | 6 ++++++
> >   3 files changed, 8 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_guc_submission.c b/drivers/gpu/drm/i915/intel_guc_submission.c
> > index cc444dc5f3ad..94d0674ea3c6 100644
> > --- a/drivers/gpu/drm/i915/intel_guc_submission.c
> > +++ b/drivers/gpu/drm/i915/intel_guc_submission.c
> > @@ -633,8 +633,6 @@ static void complete_preempt_context(struct intel_engine_cs *engine)
> >   
> >       wait_for_guc_preempt_report(engine);
> >       intel_write_status_page(engine, I915_GEM_HWS_PREEMPT_INDEX, 0);
> > -
> > -     execlists_clear_active(execlists, EXECLISTS_ACTIVE_PREEMPT);
> >   }
> >   
> >   /**
> > diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> > index 6fef9d130d55..c0ee14f86754 100644
> > --- a/drivers/gpu/drm/i915/intel_lrc.c
> > +++ b/drivers/gpu/drm/i915/intel_lrc.c
> > @@ -563,8 +563,6 @@ static void complete_preempt_context(struct intel_engine_execlists *execlists)
> >       __unwind_incomplete_requests(container_of(execlists,
> >                                                 struct intel_engine_cs,
> >                                                 execlists));
> > -
> > -     execlists_clear_active(execlists, EXECLISTS_ACTIVE_PREEMPT);
> >   }
> >   
> >   static void execlists_dequeue(struct intel_engine_cs *engine)
> > @@ -792,7 +790,7 @@ execlists_cancel_port_requests(struct intel_engine_execlists * const execlists)
> >               port++;
> >       }
> >   
> > -     execlists_user_end(execlists);
> > +     execlists_clear_all_active(execlists);
> >   }
> >   
> >   static void reset_csb_pointers(struct intel_engine_execlists *execlists)
> > @@ -843,6 +841,7 @@ static void execlists_cancel_requests(struct intel_engine_cs *engine)
> >   
> >       /* Cancel the requests on the HW and clear the ELSP tracker. */
> >       execlists_cancel_port_requests(execlists);
> > +     execlists_user_end(execlists);
> >   
> >       /* Mark all executing requests as skipped. */
> >       list_for_each_entry(rq, &engine->timeline.requests, link) {
> > diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
> > index d1eee08e5f6b..665b59ba1f45 100644
> > --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> > +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> > @@ -683,6 +683,12 @@ execlists_clear_active(struct intel_engine_execlists *execlists,
> >       __clear_bit(bit, (unsigned long *)&execlists->active);
> >   }
> >   
> > +static inline void
> > +execlists_clear_all_active(struct intel_engine_execlists *execlists)
> > +{
> > +     execlists->active = 0;
> > +}
> > +
> >   static inline bool
> >   execlists_is_active(const struct intel_engine_execlists *execlists,
> >                   unsigned int bit)
> > 
> 
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

There's an alternate minimalistic v4, so take your pick.
-Chris


More information about the Intel-gfx mailing list