[Intel-gfx] [PATCH v3] drm/i915/execlists: Always clear preempt status on cancelling all
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Mon Jul 16 12:55:55 UTC 2018
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>
Regards,
Tvrtko
More information about the Intel-gfx
mailing list