On 2/28/2022 9:42 AM, Matt Roper wrote:
From: Matthew Brost <[email protected]>

A different emit breadcrumbs ring programming is required for compute /
render and we don't have UMD user so just reject parallel submission for
these engine classes.

Signed-off-by: Matthew Brost <[email protected]>
Signed-off-by: Matt Roper <[email protected]>

Excluding the RCS is not really required given that there is only 1 instance and therefore can't be used for parallel submission (which is why we didn't need this check before the compute engines were added), but I agree that for coherency and future-proofing it makes sense to explicitly exclude all the unsupported classes.

Reviewed-by: Daniele Ceraolo Spurio <[email protected]>

---
  drivers/gpu/drm/i915/gem/i915_gem_context.c         | 10 ++++++++++
  drivers/gpu/drm/i915/gt/uc/selftest_guc_multi_lrc.c |  4 ++++
  2 files changed, 14 insertions(+)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c 
b/drivers/gpu/drm/i915/gem/i915_gem_context.c
index bc6d59df064d..9ae294eb7fb4 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
@@ -670,6 +670,16 @@ set_proto_ctx_engines_parallel_submit(struct 
i915_user_extension __user *base,
                                goto out_err;
                        }
+ /*
+                        * We don't support breadcrumb handshake on these
+                        * classes
+                        */
+                       if (siblings[n]->class == RENDER_CLASS ||
+                           siblings[n]->class == COMPUTE_CLASS) {
+                               err = -EINVAL;
+                               goto out_err;
+                       }
+
                        if (n) {
                                if (prev_engine.engine_class !=
                                    ci.engine_class) {
diff --git a/drivers/gpu/drm/i915/gt/uc/selftest_guc_multi_lrc.c 
b/drivers/gpu/drm/i915/gt/uc/selftest_guc_multi_lrc.c
index 1297ddbf7f88..f9218a37d170 100644
--- a/drivers/gpu/drm/i915/gt/uc/selftest_guc_multi_lrc.c
+++ b/drivers/gpu/drm/i915/gt/uc/selftest_guc_multi_lrc.c
@@ -154,6 +154,10 @@ static int intel_guc_multi_lrc_basic(void *arg)
        int ret;
for (class = 0; class < MAX_ENGINE_CLASS + 1; ++class) {
+               /* We don't support breadcrumb handshake on these classes */
+               if (class == COMPUTE_CLASS || class == RENDER_CLASS)
+                      continue;
+
                ret = __intel_guc_multi_lrc_basic(gt, class);
                if (ret)
                        return ret;

Reply via email to