Skip to content

Commit

Permalink
drm/i915/execlists: Always clear preempt status on cancelling all
Browse files Browse the repository at this point in the history
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: 60a9432 ("drm/i915/execlists: Drop clear_gtiir() on GPU reset")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180716125424.5715-1-chris@chris-wilson.co.uk
  • Loading branch information
Chris Wilson committed Jul 16, 2018
1 parent f1a498f commit 0051163
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 6 deletions.
2 changes: 0 additions & 2 deletions drivers/gpu/drm/i915/intel_guc_submission.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

/**
Expand Down
6 changes: 2 additions & 4 deletions drivers/gpu/drm/i915/intel_lrc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -792,8 +790,7 @@ execlists_cancel_port_requests(struct intel_engine_execlists * const execlists)
port++;
}

execlists_clear_active(execlists, EXECLISTS_ACTIVE_USER);
execlists_user_end(execlists);
execlists_clear_all_active(execlists);
}

static void reset_csb_pointers(struct intel_engine_execlists *execlists)
Expand Down Expand Up @@ -844,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) {
Expand Down
6 changes: 6 additions & 0 deletions drivers/gpu/drm/i915/intel_ringbuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 0051163

Please sign in to comment.