drm/i915/guc: Submit GuC workitems containing coalesced requests
To create an upper bound on number of GuC workitems, we need to change the way that requests are being submitted. Rather than submitting each request as an individual workitem, we can do coalescing in a similar way we're handlig execlist submission ports. We also need to stop pretending that we're doing "lite-restore" in GuC submission (we would create a workitem each time we hit this condition). This allows us to completely remove the reservation, replacing it with a compile time check. v2: Also coalesce when replaying on reset (Daniele) v3: Consistent wq_resv - per-request (Daniele) v4: Squash removing wq_resv v5: Reflect i915_guc_submit argument changes in doc v6: Rebase on top of execlists reset/restart fix (Chris,Michał) References: https://bugs.freedesktop.org/show_bug.cgi?id=101873 Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Cc: Jeff McGee <jeff.mcgee@intel.com> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com> Cc: Oscar Mateo <oscar.mateo@intel.com> Signed-off-by: Michał Winiarski <michal.winiarski@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20170914083216.10192-2-michal.winiarski@intel.com Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:

committed by
Chris Wilson

parent
45ec5bc877
commit
85e2fe679e
@@ -988,27 +988,14 @@ static int execlists_request_alloc(struct drm_i915_gem_request *request)
|
||||
*/
|
||||
request->reserved_space += EXECLISTS_REQUEST_SIZE;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
cs = intel_ring_begin(request, 0);
|
||||
if (IS_ERR(cs)) {
|
||||
ret = PTR_ERR(cs);
|
||||
goto err_unreserve;
|
||||
}
|
||||
if (IS_ERR(cs))
|
||||
return PTR_ERR(cs);
|
||||
|
||||
if (!ce->initialised) {
|
||||
ret = engine->init_context(request);
|
||||
if (ret)
|
||||
goto err_unreserve;
|
||||
return ret;
|
||||
|
||||
ce->initialised = true;
|
||||
}
|
||||
@@ -1022,12 +1009,6 @@ static int execlists_request_alloc(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:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user