Submitting to a subset of hardware contexts is not allowed, so use the
copy engine for GPU relocations when using a parallel context.

Signed-off-by: Matthew Brost <matthew.br...@intel.com>
---
 drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c 
b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
index b224b28530d1..b6143973ac67 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
@@ -1386,7 +1386,8 @@ static int __reloc_gpu_alloc(struct i915_execbuffer *eb,
        if (err)
                goto err_unmap;
 
-       if (engine == eb->context->engine) {
+       if (engine == eb->context->engine &&
+           !intel_context_is_parallel(eb->context)) {
                rq = i915_request_create(eb->context);
        } else {
                struct intel_context *ce = eb->reloc_context;
@@ -1483,7 +1484,8 @@ static u32 *reloc_gpu(struct i915_execbuffer *eb,
                if (eb_use_cmdparser(eb))
                        return ERR_PTR(-EWOULDBLOCK);
 
-               if (!reloc_can_use_engine(engine)) {
+               if (!reloc_can_use_engine(engine) ||
+                   intel_context_is_parallel(eb->context)) {
                        engine = engine->gt->engine_class[COPY_ENGINE_CLASS][0];
                        if (!engine)
                                return ERR_PTR(-ENODEV);
-- 
2.28.0

Reply via email to