Commit 8892f477 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Remove access to global seqno in the HWSP



Stop accessing the HWSP to read the global seqno, and stop tracking the
mirror in the engine's execution timeline -- it is unused.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190226094922.31617-2-chris@chris-wilson.co.uk
parent 89531e7d
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -526,8 +526,6 @@ static void error_print_engine(struct drm_i915_error_state_buf *m,
				   ee->vm_info.pp_dir_base);
		}
	}
	err_printf(m, "  seqno: 0x%08x\n", ee->seqno);
	err_printf(m, "  last_seqno: 0x%08x\n", ee->last_seqno);
	err_printf(m, "  ring->head: 0x%08x\n", ee->cpu_ring_head);
	err_printf(m, "  ring->tail: 0x%08x\n", ee->cpu_ring_tail);
	err_printf(m, "  hangcheck timestamp: %dms (%lu%s)\n",
@@ -1216,8 +1214,6 @@ static void error_record_engine_registers(struct i915_gpu_state *error,

	ee->instpm = I915_READ(RING_INSTPM(engine->mmio_base));
	ee->acthd = intel_engine_get_active_head(engine);
	ee->seqno = intel_engine_get_seqno(engine);
	ee->last_seqno = intel_engine_last_submit(engine);
	ee->start = I915_READ_START(engine);
	ee->head = I915_READ_HEAD(engine);
	ee->tail = I915_READ_TAIL(engine);
+0 −3
Original line number Diff line number Diff line
@@ -94,8 +94,6 @@ struct i915_gpu_state {
		u32 cpu_ring_head;
		u32 cpu_ring_tail;

		u32 last_seqno;

		/* Register state */
		u32 start;
		u32 tail;
@@ -108,7 +106,6 @@ struct i915_gpu_state {
		u32 bbstate;
		u32 instpm;
		u32 instps;
		u32 seqno;
		u64 bbaddr;
		u64 acthd;
		u32 fault_reg;
+10 −17
Original line number Diff line number Diff line
@@ -179,12 +179,11 @@ static void free_capture_list(struct i915_request *request)
static void __retire_engine_request(struct intel_engine_cs *engine,
				    struct i915_request *rq)
{
	GEM_TRACE("%s(%s) fence %llx:%lld, global=%d, current %d:%d\n",
	GEM_TRACE("%s(%s) fence %llx:%lld, global=%d, current %d\n",
		  __func__, engine->name,
		  rq->fence.context, rq->fence.seqno,
		  rq->global_seqno,
		  hwsp_seqno(rq),
		  intel_engine_get_seqno(engine));
		  hwsp_seqno(rq));

	GEM_BUG_ON(!i915_request_completed(rq));

@@ -243,12 +242,11 @@ static void i915_request_retire(struct i915_request *request)
{
	struct i915_active_request *active, *next;

	GEM_TRACE("%s fence %llx:%lld, global=%d, current %d:%d\n",
	GEM_TRACE("%s fence %llx:%lld, global=%d, current %d\n",
		  request->engine->name,
		  request->fence.context, request->fence.seqno,
		  request->global_seqno,
		  hwsp_seqno(request),
		  intel_engine_get_seqno(request->engine));
		  hwsp_seqno(request));

	lockdep_assert_held(&request->i915->drm.struct_mutex);
	GEM_BUG_ON(!i915_sw_fence_signaled(&request->submit));
@@ -305,12 +303,11 @@ void i915_request_retire_upto(struct i915_request *rq)
	struct intel_ring *ring = rq->ring;
	struct i915_request *tmp;

	GEM_TRACE("%s fence %llx:%lld, global=%d, current %d:%d\n",
	GEM_TRACE("%s fence %llx:%lld, global=%d, current %d\n",
		  rq->engine->name,
		  rq->fence.context, rq->fence.seqno,
		  rq->global_seqno,
		  hwsp_seqno(rq),
		  intel_engine_get_seqno(rq->engine));
		  hwsp_seqno(rq));

	lockdep_assert_held(&rq->i915->drm.struct_mutex);
	GEM_BUG_ON(!i915_request_completed(rq));
@@ -354,12 +351,11 @@ void __i915_request_submit(struct i915_request *request)
	struct intel_engine_cs *engine = request->engine;
	u32 seqno;

	GEM_TRACE("%s fence %llx:%lld -> global=%d, current %d:%d\n",
	GEM_TRACE("%s fence %llx:%lld -> global=%d, current %d\n",
		  engine->name,
		  request->fence.context, request->fence.seqno,
		  engine->timeline.seqno + 1,
		  hwsp_seqno(request),
		  intel_engine_get_seqno(engine));
		  hwsp_seqno(request));

	GEM_BUG_ON(!irqs_disabled());
	lockdep_assert_held(&engine->timeline.lock);
@@ -371,7 +367,6 @@ void __i915_request_submit(struct i915_request *request)

	seqno = next_global_seqno(&engine->timeline);
	GEM_BUG_ON(!seqno);
	GEM_BUG_ON(intel_engine_signaled(engine, seqno));

	/* We may be recursing from the signal callback of another i915 fence */
	spin_lock_nested(&request->lock, SINGLE_DEPTH_NESTING);
@@ -409,12 +404,11 @@ void __i915_request_unsubmit(struct i915_request *request)
{
	struct intel_engine_cs *engine = request->engine;

	GEM_TRACE("%s fence %llx:%lld <- global=%d, current %d:%d\n",
	GEM_TRACE("%s fence %llx:%lld <- global=%d, current %d\n",
		  engine->name,
		  request->fence.context, request->fence.seqno,
		  request->global_seqno,
		  hwsp_seqno(request),
		  intel_engine_get_seqno(engine));
		  hwsp_seqno(request));

	GEM_BUG_ON(!irqs_disabled());
	lockdep_assert_held(&engine->timeline.lock);
@@ -425,7 +419,6 @@ void __i915_request_unsubmit(struct i915_request *request)
	 */
	GEM_BUG_ON(!request->global_seqno);
	GEM_BUG_ON(request->global_seqno != engine->timeline.seqno);
	GEM_BUG_ON(intel_engine_has_completed(engine, request->global_seqno));
	engine->timeline.seqno--;

	/* We may be recursing from the signal callback of another i915 fence */
+0 −1
Original line number Diff line number Diff line
@@ -788,7 +788,6 @@ static void nop_submit_request(struct i915_request *request)
	spin_lock_irqsave(&engine->timeline.lock, flags);
	__i915_request_submit(request);
	i915_request_mark_complete(request);
	intel_engine_write_global_seqno(engine, request->global_seqno);
	spin_unlock_irqrestore(&engine->timeline.lock, flags);

	intel_engine_queue_breadcrumbs(engine);
+1 −13
Original line number Diff line number Diff line
@@ -455,12 +455,6 @@ cleanup:
	return err;
}

void intel_engine_write_global_seqno(struct intel_engine_cs *engine, u32 seqno)
{
	intel_write_status_page(engine, I915_GEM_HWS_INDEX, seqno);
	GEM_BUG_ON(intel_engine_get_seqno(engine) != seqno);
}

static void intel_engine_init_batch_pool(struct intel_engine_cs *engine)
{
	i915_gem_batch_pool_init(&engine->batch_pool, engine);
@@ -1011,10 +1005,6 @@ bool intel_engine_is_idle(struct intel_engine_cs *engine)
	if (i915_reset_failed(engine->i915))
		return true;

	/* Any inflight/incomplete requests? */
	if (!intel_engine_signaled(engine, intel_engine_last_submit(engine)))
		return false;

	/* Waiting to drain ELSP? */
	if (READ_ONCE(engine->execlists.active)) {
		struct tasklet_struct *t = &engine->execlists.tasklet;
@@ -1497,9 +1487,7 @@ void intel_engine_dump(struct intel_engine_cs *engine,
	if (i915_reset_failed(engine->i915))
		drm_printf(m, "*** WEDGED ***\n");

	drm_printf(m, "\tcurrent seqno %x, last %x, hangcheck %x/%x [%d ms]\n",
		   intel_engine_get_seqno(engine),
		   intel_engine_last_submit(engine),
	drm_printf(m, "\tHangcheck %x:%x [%d ms]\n",
		   engine->hangcheck.last_seqno,
		   engine->hangcheck.next_seqno,
		   jiffies_to_msecs(jiffies - engine->hangcheck.action_timestamp));
Loading