[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