[PATCH 5/5] haxup

Maarten Lankhorst maarten.lankhorst at linux.intel.com
Mon Jul 5 09:38:40 UTC 2021


Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
---
 drivers/gpu/drm/i915/gt/intel_context.c | 15 +--------------
 drivers/gpu/drm/i915/gt/intel_context.h |  7 ++++++-
 drivers/gpu/drm/i915/i915_request.c     |  1 +
 3 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_context.c b/drivers/gpu/drm/i915/gt/intel_context.c
index b5f7c4a80c3e..7842f97bddb9 100644
--- a/drivers/gpu/drm/i915/gt/intel_context.c
+++ b/drivers/gpu/drm/i915/gt/intel_context.c
@@ -92,13 +92,6 @@ static int intel_context_active_acquire(struct intel_context *ce)
 	return err;
 }
 
-static void intel_context_active_release(struct intel_context *ce)
-{
-	/* Nodes preallocated in intel_context_active() */
-	i915_active_acquire_barrier(&ce->active);
-	i915_active_release(&ce->active);
-}
-
 static int __context_pin_state(struct i915_vma *vma, struct i915_gem_ww_ctx *ww)
 {
 	unsigned int bias = i915_ggtt_pin_bias(vma) | PIN_OFFSET_BIAS;
@@ -285,13 +278,7 @@ void intel_context_unpin(struct intel_context *ce)
 {
 	CE_TRACE(ce, "unpin\n");
 
-	/*
-	 * Once released, we may asynchronously drop the active reference.
-	 * As that may be the only reference keeping the context alive,
-	 * take an extra now so that it is not freed before we finish
-	 * dereferencing it.
-	 */
-	intel_context_active_release(ce);
+	i915_active_release(&ce->active);
 }
 
 static void __intel_context_retire(struct i915_active *active)
diff --git a/drivers/gpu/drm/i915/gt/intel_context.h b/drivers/gpu/drm/i915/gt/intel_context.h
index 9bed8cd387d5..2eb710178f47 100644
--- a/drivers/gpu/drm/i915/gt/intel_context.h
+++ b/drivers/gpu/drm/i915/gt/intel_context.h
@@ -93,7 +93,12 @@ static inline bool intel_context_pin_if_active(struct intel_context *ce)
 static inline int intel_context_pin(struct intel_context *ce)
 {
 	if (likely(intel_context_pin_if_active(ce))) {
-		int err = i915_active_acquire_preallocate_barrier(&ce->active,
+		int err;
+
+		if (intel_context_is_barrier(ce))
+			return 0;
+
+		err = i915_active_acquire_preallocate_barrier(&ce->active,
 								  ce->engine);
 
 		if (err)
diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
index c5989c0b83d3..cdeab52db094 100644
--- a/drivers/gpu/drm/i915/i915_request.c
+++ b/drivers/gpu/drm/i915/i915_request.c
@@ -424,6 +424,7 @@ bool i915_request_retire(struct i915_request *rq)
 	__list_del_entry(&rq->link); /* poison neither prev/next (RCU walks) */
 
 	intel_context_exit(rq->context);
+	i915_active_acquire_barrier(&rq->context->active);
 	intel_context_unpin(rq->context);
 
 	free_capture_list(rq);
-- 
2.31.0



More information about the Intel-gfx-trybot mailing list