Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b7744e7 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Use HWS for seqno tracking everywhere



By using the same address for storing the HWS on every platform, we can
remove the platform specific vfuncs and reduce the get-seqno routine to
a single read of a cached memory location.

v2: Fix semaphore_passed() to look at the signaling engine (not the
waiter's)

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1467390209-3576-8-git-send-email-chris@chris-wilson.co.uk
parent f69a02c9
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -662,7 +662,7 @@ static int i915_gem_pageflip_info(struct seq_file *m, void *data)
					   engine->name,
					   i915_gem_request_get_seqno(work->flip_queued_req),
					   dev_priv->next_seqno,
					   engine->get_seqno(engine),
					   intel_engine_get_seqno(engine),
					   i915_gem_request_completed(work->flip_queued_req));
			} else
				seq_printf(m, "Flip not associated with any ring\n");
@@ -792,7 +792,7 @@ static void i915_ring_seqno_info(struct seq_file *m,
	struct rb_node *rb;

	seq_printf(m, "Current sequence (%s): %x\n",
		   engine->name, engine->get_seqno(engine));
		   engine->name, intel_engine_get_seqno(engine));
	seq_printf(m, "Current user interrupts (%s): %x\n",
		   engine->name, READ_ONCE(engine->user_interrupts));

@@ -1420,7 +1420,7 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)

	for_each_engine_id(engine, dev_priv, id) {
		acthd[id] = intel_ring_get_active_head(engine);
		seqno[id] = engine->get_seqno(engine);
		seqno[id] = intel_engine_get_seqno(engine);
	}

	i915_get_extra_instdone(dev_priv, instdone);
+2 −2
Original line number Diff line number Diff line
@@ -3289,13 +3289,13 @@ i915_seqno_passed(uint32_t seq1, uint32_t seq2)

static inline bool i915_gem_request_started(const struct drm_i915_gem_request *req)
{
	return i915_seqno_passed(req->engine->get_seqno(req->engine),
	return i915_seqno_passed(intel_engine_get_seqno(req->engine),
				 req->previous_seqno);
}

static inline bool i915_gem_request_completed(const struct drm_i915_gem_request *req)
{
	return i915_seqno_passed(req->engine->get_seqno(req->engine),
	return i915_seqno_passed(intel_engine_get_seqno(req->engine),
				 req->seqno);
}

+1 −1
Original line number Diff line number Diff line
@@ -984,7 +984,7 @@ static void i915_record_ring_state(struct drm_i915_private *dev_priv,
	ering->waiting = intel_engine_has_waiter(engine);
	ering->instpm = I915_READ(RING_INSTPM(engine->mmio_base));
	ering->acthd = intel_ring_get_active_head(engine);
	ering->seqno = engine->get_seqno(engine);
	ering->seqno = intel_engine_get_seqno(engine);
	ering->last_seqno = engine->last_submitted_seqno;
	ering->start = I915_READ_START(engine);
	ering->head = I915_READ_HEAD(engine);
+2 −2
Original line number Diff line number Diff line
@@ -2952,7 +2952,7 @@ static int semaphore_passed(struct intel_engine_cs *engine)
	if (signaller->hangcheck.deadlock >= I915_NUM_ENGINES)
		return -1;

	if (i915_seqno_passed(signaller->get_seqno(signaller), seqno))
	if (i915_seqno_passed(intel_engine_get_seqno(signaller), seqno))
		return 1;

	/* cursory check for an unkickable deadlock */
@@ -3140,7 +3140,7 @@ static void i915_hangcheck_elapsed(struct work_struct *work)
			engine->irq_seqno_barrier(engine);

		acthd = intel_ring_get_active_head(engine);
		seqno = engine->get_seqno(engine);
		seqno = intel_engine_get_seqno(engine);

		/* Reset stuck interrupts between batch advances */
		user_interrupts = 0;
+1 −1
Original line number Diff line number Diff line
@@ -558,7 +558,7 @@ TRACE_EVENT(i915_gem_request_notify,
	    TP_fast_assign(
			   __entry->dev = engine->i915->dev->primary->index;
			   __entry->ring = engine->id;
			   __entry->seqno = engine->get_seqno(engine);
			   __entry->seqno = intel_engine_get_seqno(engine);
			   ),

	    TP_printk("dev=%u, ring=%u, seqno=%u",
Loading