[Intel-gfx] [PATCH 07/16] drm/i915: Move intel_lrc_context_pin() to avoid the forward declaration

Chris Wilson chris at chris-wilson.co.uk
Thu Dec 8 20:55:18 UTC 2016


On Thu, Dec 08, 2016 at 05:45:23PM +0000, Tvrtko Ursulin wrote:
> 
> On 07/12/2016 13:58, Chris Wilson wrote:
> >Just a simple move to avoid a forward declaration.
> 
> Patch subject is wrong - you are moving
> intel_logical_ring_alloc_request_extras.

I moved what I said, what diff shows is the opposite motion!
 
> >Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> >---
> > drivers/gpu/drm/i915/intel_lrc.c | 132 +++++++++++++++++++--------------------
> > 1 file changed, 65 insertions(+), 67 deletions(-)
> >
> >diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> >index 8b412880e88c..5cabe4e9d22f 100644
> >--- a/drivers/gpu/drm/i915/intel_lrc.c
> >+++ b/drivers/gpu/drm/i915/intel_lrc.c
> >@@ -230,8 +230,6 @@ enum {
> >
> > static int execlists_context_deferred_alloc(struct i915_gem_context *ctx,
> > 					    struct intel_engine_cs *engine);
> >-static int intel_lr_context_pin(struct i915_gem_context *ctx,
> >-				struct intel_engine_cs *engine);
> > static void execlists_init_reg_state(u32 *reg_state,
> > 				     struct i915_gem_context *ctx,
> > 				     struct intel_engine_cs *engine,
> >@@ -774,71 +772,6 @@ static void execlists_schedule(struct drm_i915_gem_request *request, int prio)
> > 	/* XXX Do we need to preempt to make room for us and our deps? */
> > }
> >
> >-int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request)
> >-{
> >-	struct intel_engine_cs *engine = request->engine;
> >-	struct intel_context *ce = &request->ctx->engine[engine->id];
> >-	int ret;
> >-
> >-	/* Flush enough space to reduce the likelihood of waiting after
> >-	 * we start building the request - in which case we will just
> >-	 * have to repeat work.
> >-	 */
> >-	request->reserved_space += EXECLISTS_REQUEST_SIZE;
> >-
> >-	if (!ce->state) {
> >-		ret = execlists_context_deferred_alloc(request->ctx, engine);
> >-		if (ret)
> >-			return ret;
> >-	}
> >-
> >-	request->ring = ce->ring;
> >-
> >-	ret = intel_lr_context_pin(request->ctx, engine);
> >-	if (ret)
> >-		return ret;
> >-
> >-	if (i915.enable_guc_submission) {
> >-		/*
> >-		 * Check that the GuC has space for the request before
> >-		 * going any further, as the i915_add_request() call
> >-		 * later on mustn't fail ...
> >-		 */
> >-		ret = i915_guc_wq_reserve(request);
> >-		if (ret)
> >-			goto err_unpin;
> >-	}
> >-
> >-	ret = intel_ring_begin(request, 0);
> >-	if (ret)
> >-		goto err_unreserve;
> >-
> >-	if (!ce->initialised) {
> >-		ret = engine->init_context(request);
> >-		if (ret)
> >-			goto err_unreserve;
> >-
> >-		ce->initialised = true;
> >-	}
> >-
> >-	/* Note that after this point, we have committed to using
> >-	 * this request as it is being used to both track the
> >-	 * state of engine initialisation and liveness of the
> >-	 * golden renderstate above. Think twice before you try
> >-	 * to cancel/unwind this request now.
> >-	 */
> >-
> >-	request->reserved_space -= EXECLISTS_REQUEST_SIZE;
> >-	return 0;
> >-
> >-err_unreserve:
> >-	if (i915.enable_guc_submission)
> >-		i915_guc_wq_unreserve(request);
> >-err_unpin:
> >-	intel_lr_context_unpin(request->ctx, engine);
> >-	return ret;
> >-}
> >-
> > static int intel_lr_context_pin(struct i915_gem_context *ctx,
> > 				struct intel_engine_cs *engine)
> > {
> >@@ -911,6 +844,71 @@ void intel_lr_context_unpin(struct i915_gem_context *ctx,
> > 	i915_gem_context_put(ctx);
> > }
> >
> >+int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request)
> >+{
> >+	struct intel_engine_cs *engine = request->engine;
> >+	struct intel_context *ce = &request->ctx->engine[engine->id];
> >+	int ret;
> >+
> >+	/* Flush enough space to reduce the likelihood of waiting after
> >+	 * we start building the request - in which case we will just
> >+	 * have to repeat work.
> >+	 */
> >+	request->reserved_space += EXECLISTS_REQUEST_SIZE;
> >+
> >+	if (!ce->state) {
> >+		ret = execlists_context_deferred_alloc(request->ctx, engine);
> >+		if (ret)
> >+			return ret;
> >+	}
> >+
> >+	request->ring = ce->ring;
> >+
> >+	ret = intel_lr_context_pin(request->ctx, engine);
> >+	if (ret)
> >+		return ret;
> >+
> >+	if (i915.enable_guc_submission) {
> >+		/*
> >+		 * Check that the GuC has space for the request before
> >+		 * going any further, as the i915_add_request() call
> >+		 * later on mustn't fail ...
> >+		 */
> >+		ret = i915_guc_wq_reserve(request);
> >+		if (ret)
> >+			goto err_unpin;
> >+	}
> >+
> >+	ret = intel_ring_begin(request, 0);
> >+	if (ret)
> >+		goto err_unreserve;
> >+
> >+	if (!ce->initialised) {
> >+		ret = engine->init_context(request);
> >+		if (ret)
> >+			goto err_unreserve;
> >+
> >+		ce->initialised = true;
> >+	}
> >+
> >+	/* Note that after this point, we have committed to using
> >+	 * this request as it is being used to both track the
> >+	 * state of engine initialisation and liveness of the
> >+	 * golden renderstate above. Think twice before you try
> >+	 * to cancel/unwind this request now.
> >+	 */
> >+
> >+	request->reserved_space -= EXECLISTS_REQUEST_SIZE;
> >+	return 0;
> >+
> >+err_unreserve:
> >+	if (i915.enable_guc_submission)
> >+		i915_guc_wq_unreserve(request);
> >+err_unpin:
> >+	intel_lr_context_unpin(request->ctx, engine);
> >+	return ret;
> >+}
> >+
> > static int intel_logical_ring_workarounds_emit(struct drm_i915_gem_request *req)
> > {
> > 	int ret, i;
> >
> 
> Poor man's split view shows proper use of cut and paste. With the
> subject fixed:

Pfiffle! I standby the cut'n'paste as I performed it!

All motion is relative and whatnot.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list