Re: [PATCH] drm/i915: Keep rings pinned while the context is active

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 19/06/2019 14:44, Chris Wilson wrote:
Remember to keep the rings pinned as well as the context image until the
GPU is no longer active.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110946
Fixes: ce476c80b8bf ("drm/i915: Keep contexts pinned until after the next kernel context switch")
Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
Cc: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx>
Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>
---
  drivers/gpu/drm/i915/gt/intel_context.c | 17 ++++++++++++-----
  drivers/gpu/drm/i915/gt/intel_lrc.c     |  9 +--------
  2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_context.c b/drivers/gpu/drm/i915/gt/intel_context.c
index 2c454f227c2e..b84f11a52d88 100644
--- a/drivers/gpu/drm/i915/gt/intel_context.c
+++ b/drivers/gpu/drm/i915/gt/intel_context.c
@@ -126,6 +126,7 @@ static void intel_context_retire(struct i915_active *active)
  	if (ce->state)
  		__context_unpin_state(ce->state);
+ intel_ring_unpin(ce->ring);
  	intel_context_put(ce);
  }
@@ -160,15 +161,16 @@ int intel_context_active_acquire(struct intel_context *ce, unsigned long flags) intel_context_get(ce); + err = intel_ring_pin(ce->ring);
+	if (err)
+		goto err_put;
+
  	if (!ce->state)
  		return 0;
err = __context_pin_state(ce->state, flags);
-	if (err) {
-		i915_active_cancel(&ce->active);
-		intel_context_put(ce);
-		return err;
-	}
+	if (err)
+		goto err_put;

intel_ring_unpin?

Regards,

Tvrtko

/* Preallocate tracking nodes */
  	if (!i915_gem_context_is_kernel(ce->gem_context)) {
@@ -181,6 +183,11 @@ int intel_context_active_acquire(struct intel_context *ce, unsigned long flags)
  	}
return 0;
+
+err_put:
+	intel_context_put(ce);
+	i915_active_cancel(&ce->active);
+	return err;
  }
void intel_context_active_release(struct intel_context *ce)
diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
index b42b5f158295..4bfb819386ea 100644
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@ -1426,7 +1426,6 @@ static void execlists_context_unpin(struct intel_context *ce)
  {
  	i915_gem_context_unpin_hw_id(ce->gem_context);
  	i915_gem_object_unpin_map(ce->state->obj);
-	intel_ring_unpin(ce->ring);
  }
static void
@@ -1478,13 +1477,9 @@ __execlists_context_pin(struct intel_context *ce,
  		goto unpin_active;
  	}
- ret = intel_ring_pin(ce->ring);
-	if (ret)
-		goto unpin_map;
-
  	ret = i915_gem_context_pin_hw_id(ce->gem_context);
  	if (ret)
-		goto unpin_ring;
+		goto unpin_map;
ce->lrc_desc = lrc_descriptor(ce, engine);
  	ce->lrc_reg_state = vaddr + LRC_STATE_PN * PAGE_SIZE;
@@ -1492,8 +1487,6 @@ __execlists_context_pin(struct intel_context *ce,
return 0; -unpin_ring:
-	intel_ring_unpin(ce->ring);
  unpin_map:
  	i915_gem_object_unpin_map(ce->state->obj);
  unpin_active:

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux