[PATCH 55/60] hwsp-mirror

Chris Wilson chris at chris-wilson.co.uk
Fri Dec 21 10:18:43 UTC 2018


---
 drivers/gpu/drm/i915/i915_request.c | 12 ++++++++----
 drivers/gpu/drm/i915/i915_request.h | 11 ++++++++---
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
index cdda624dba19..f523486d225d 100644
--- a/drivers/gpu/drm/i915/i915_request.c
+++ b/drivers/gpu/drm/i915/i915_request.c
@@ -186,7 +186,7 @@ static void __retire_engine_request(struct intel_engine_cs *engine,
 		  __func__, engine->name,
 		  rq->fence.context, rq->fence.seqno,
 		  lower_32_bits(rq->global_seqno),
-		  intel_engine_get_seqno(engine));
+		  i915_request_hwsp(rq));
 
 	GEM_BUG_ON(!i915_request_completed(rq));
 
@@ -248,7 +248,7 @@ static void i915_request_retire(struct i915_request *request)
 		  request->engine->name,
 		  request->fence.context, request->fence.seqno,
 		  lower_32_bits(request->global_seqno),
-		  intel_engine_get_seqno(request->engine));
+		  i915_request_hwsp(request));
 
 	lockdep_assert_held(&request->i915->drm.struct_mutex);
 	GEM_BUG_ON(!i915_sw_fence_signaled(&request->submit));
@@ -311,7 +311,7 @@ void i915_request_retire_upto(struct i915_request *rq)
 		  rq->engine->name,
 		  rq->fence.context, rq->fence.seqno,
 		  lower_32_bits(rq->global_seqno),
-		  intel_engine_get_seqno(rq->engine));
+		  i915_request_hwsp(rq));
 
 	lockdep_assert_held(&rq->i915->drm.struct_mutex);
 	GEM_BUG_ON(!i915_request_completed(rq));
@@ -365,6 +365,8 @@ void __i915_request_submit(struct i915_request *request)
 
 	/* We may be recursing from the signal callback of another i915 fence */
 	spin_lock_nested(&request->lock, SINGLE_DEPTH_NESTING);
+	request->hwsp_seqno =
+	       	&engine->status_page.page_addr[I915_GEM_HWS_INDEX];
 	request->global_seqno = (u64)engine->id << 32 | seqno;
 	if (test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &request->fence.flags))
 		intel_engine_enable_signaling(request, false);
@@ -402,7 +404,7 @@ void __i915_request_unsubmit(struct i915_request *request)
 		  engine->name,
 		  request->fence.context, request->fence.seqno,
 		  lower_32_bits(request->global_seqno),
-		  intel_engine_get_seqno(engine));
+		  i915_request_hwsp(request));
 
 	GEM_BUG_ON(!irqs_disabled());
 	lockdep_assert_held(&engine->timeline.lock);
@@ -419,6 +421,7 @@ void __i915_request_unsubmit(struct i915_request *request)
 	/* We may be recursing from the signal callback of another i915 fence */
 	spin_lock_nested(&request->lock, SINGLE_DEPTH_NESTING);
 	request->global_seqno = 0;
+	GEM_DEBUG_EXEC(request->hwsp_seqno = POISON_INUSE);
 	if (test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &request->fence.flags))
 		intel_engine_cancel_signaling(request);
 	spin_unlock(&request->lock);
@@ -601,6 +604,7 @@ i915_request_alloc(struct intel_engine_cs *engine, struct i915_gem_context *ctx)
 
 	/* No zalloc, must clear what we need by hand */
 	rq->global_seqno = 0;
+	GEM_DEBUG_EXEC(rq->hwsp_seqno = POISON_INUSE);
 	rq->signaling.wait.global_seqno = 0;
 	rq->file_priv = NULL;
 	rq->batch = NULL;
diff --git a/drivers/gpu/drm/i915/i915_request.h b/drivers/gpu/drm/i915/i915_request.h
index 1ede2ffd30ad..087ea53cd674 100644
--- a/drivers/gpu/drm/i915/i915_request.h
+++ b/drivers/gpu/drm/i915/i915_request.h
@@ -135,7 +135,7 @@ struct i915_request {
 	struct i915_sched_node sched;
 	struct i915_dependency dep;
 
-	u32 *hwsp_seqno;
+	const u32 *hwsp_seqno;
 
 	/**
 	 * GEM sequence number associated with this request on the
@@ -297,6 +297,11 @@ static inline bool i915_seqno_passed(u32 seq1, u32 seq2)
 	return (s32)(seq1 - seq2) >= 0;
 }
 
+static inline u32 i915_request_hwsp(const struct i915_request *rq)
+{
+	return READ_ONCE(*rq->hwsp_seqno);
+}
+
 /**
  * i915_request_started - check if the request has begun being executed
  * @rq: the request
@@ -314,14 +319,14 @@ static inline bool i915_request_started(const struct i915_request *rq)
 	if (!seqno) /* not yet submitted to HW */
 		return false;
 
-	return i915_seqno_passed(READ_ONCE(*rq->hwsp_seqno), seqno);
+	return i915_seqno_passed(i915_request_hwsp(rq), seqno - 1);
 }
 
 static inline bool
 __i915_request_completed(const struct i915_request *rq, u64 seqno)
 {
 	GEM_BUG_ON(!seqno);
-	return i915_seqno_passed(READ_ONCE(*rq->hwsp_seqno), seqno) &&
+	return i915_seqno_passed(i915_request_hwsp(rq), seqno) &&
 		seqno == i915_request_global_seqno(rq);
 }
 
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list