|
@@ -626,6 +626,10 @@ int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request
|
|
|
|
|
|
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
|
|
@@ -634,21 +638,17 @@ int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request
|
|
|
*/
|
|
|
ret = i915_guc_wq_reserve(request);
|
|
|
if (ret)
|
|
|
- return ret;
|
|
|
+ goto err_unpin;
|
|
|
}
|
|
|
|
|
|
- ret = intel_lr_context_pin(request->ctx, engine);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
-
|
|
|
ret = intel_ring_begin(request, 0);
|
|
|
if (ret)
|
|
|
- goto err_unpin;
|
|
|
+ goto err_unreserve;
|
|
|
|
|
|
if (!ce->initialised) {
|
|
|
ret = engine->init_context(request);
|
|
|
if (ret)
|
|
|
- goto err_unpin;
|
|
|
+ goto err_unreserve;
|
|
|
|
|
|
ce->initialised = true;
|
|
|
}
|
|
@@ -663,6 +663,9 @@ int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request
|
|
|
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;
|