[PATCH 17/19] drm/i915: Extend global sync_seqno optimisation to cover all requests

Chris Wilson chris at chris-wilson.co.uk
Tue Sep 13 16:44:08 UTC 2016


We can use the last submitted seqno to improve our caching of the most
recent sync point between timelines.

Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_gem_request.c | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c
index 2dc231e58593..90d95bdda43a 100644
--- a/drivers/gpu/drm/i915/i915_gem_request.c
+++ b/drivers/gpu/drm/i915/i915_gem_request.c
@@ -476,6 +476,7 @@ static int
 i915_gem_request_await_request(struct drm_i915_gem_request *to,
 			       struct drm_i915_gem_request *from)
 {
+	u32 seqno;
 	int ret;
 
 	GEM_BUG_ON(to == from);
@@ -489,18 +490,21 @@ i915_gem_request_await_request(struct drm_i915_gem_request *to,
 		return ret < 0 ? ret : 0;
 	}
 
+	seqno = from->global_seqno;
+	if (seqno == 0)
+		seqno = from->engine->timeline->last_submitted_seqno;
+	if (seqno - 1 < to->timeline->sync_seqno[from->engine->id])
+		return 0;
+
+	trace_i915_gem_ring_sync_to(to, from);
+
 	if (from->global_seqno == 0) {
 		ret = i915_sw_fence_await_dma_fence(&to->submit,
 						    &from->fence, 0,
 						    GFP_KERNEL);
-		return ret < 0 ? ret : 0;
-	}
-
-	if (from->global_seqno <= to->timeline->sync_seqno[from->engine->id])
-		return 0;
-
-	trace_i915_gem_ring_sync_to(to, from);
-	if (!i915.semaphores) {
+		if (ret < 0)
+			return ret;
+	} else if (!i915.semaphores) {
 		if (!i915_spin_request(from, TASK_INTERRUPTIBLE, 2)) {
 			ret = i915_sw_fence_await_dma_fence(&to->submit,
 							    &from->fence, 0,
@@ -514,7 +518,7 @@ i915_gem_request_await_request(struct drm_i915_gem_request *to,
 			return ret;
 	}
 
-	to->timeline->sync_seqno[from->engine->id] = from->global_seqno;
+	to->timeline->sync_seqno[from->engine->id] = seqno;
 	return 0;
 }
 
-- 
2.9.3



More information about the Intel-gfx-trybot mailing list