drm/i915/selftests: Check all blitter engines for client blt
authorChris Wilson <chris@chris-wilson.co.uk>
Sun, 27 Oct 2019 22:58:06 +0000 (22:58 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 28 Oct 2019 11:24:50 +0000 (11:24 +0000)
Check all user accessible engines that can blit work with our blitter
client.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191027225808.19437-3-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.c

index d8804a84794522e2c644fb6dd3889dff38fe48e7..da8edee4fe0a38ff50ef010d4260aaad26f8f065 100644 (file)
@@ -5,6 +5,7 @@
 
 #include "i915_selftest.h"
 
+#include "gt/intel_engine_user.h"
 #include "gt/intel_gt.h"
 
 #include "selftests/igt_flush_test.h"
 #include "huge_gem_object.h"
 #include "mock_context.h"
 
-static int igt_client_fill(void *arg)
+static int __igt_client_fill(struct intel_engine_cs *engine)
 {
-       struct drm_i915_private *i915 = arg;
-       struct intel_context *ce = i915->engine[BCS0]->kernel_context;
+       struct intel_context *ce = engine->kernel_context;
        struct drm_i915_gem_object *obj;
        struct rnd_state prng;
        IGT_TIMEOUT(end);
@@ -37,7 +37,7 @@ static int igt_client_fill(void *arg)
                pr_debug("%s with phys_sz= %x, sz=%x, val=%x\n", __func__,
                         phys_sz, sz, val);
 
-               obj = huge_gem_object(i915, phys_sz, sz);
+               obj = huge_gem_object(engine->i915, phys_sz, sz);
                if (IS_ERR(obj)) {
                        err = PTR_ERR(obj);
                        goto err_flush;
@@ -103,6 +103,28 @@ err_flush:
        return err;
 }
 
+static int igt_client_fill(void *arg)
+{
+       int inst = 0;
+
+       do {
+               struct intel_engine_cs *engine;
+               int err;
+
+               engine = intel_engine_lookup_user(arg,
+                                                 I915_ENGINE_CLASS_COPY,
+                                                 inst++);
+               if (!engine)
+                       return 0;
+
+               err = __igt_client_fill(engine);
+               if (err == -ENOMEM)
+                       err = 0;
+               if (err)
+                       return err;
+       } while (1);
+}
+
 int i915_gem_client_blt_live_selftests(struct drm_i915_private *i915)
 {
        static const struct i915_subtest tests[] = {