drm/i915: Add mock tests for GTT/VMA handling
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 13 Feb 2017 17:15:55 +0000 (17:15 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 13 Feb 2017 20:46:50 +0000 (20:46 +0000)
Use the live tests against the mock ppgtt for quick testing on all
platforms of the VMA layer.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170213171558.20942-44-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/selftests/i915_gem_gtt.c

index 349b0de1c47ee6756d77de9a0fbe558d45b3cc8e..5caa5153a394bb2706424d6e62fe97a14b04d0f5 100644 (file)
@@ -28,6 +28,7 @@
 #include "../i915_selftest.h"
 #include "i915_random.h"
 
+#include "mock_context.h"
 #include "mock_drm.h"
 #include "mock_gem_device.h"
 
@@ -913,6 +914,45 @@ static void track_vma_bind(struct i915_vma *vma)
        list_move_tail(&vma->vm_link, &vma->vm->inactive_list);
 }
 
+static int exercise_mock(struct drm_i915_private *i915,
+                        int (*func)(struct drm_i915_private *i915,
+                                    struct i915_address_space *vm,
+                                    u64 hole_start, u64 hole_end,
+                                    unsigned long end_time))
+{
+       struct i915_gem_context *ctx;
+       struct i915_hw_ppgtt *ppgtt;
+       IGT_TIMEOUT(end_time);
+       int err;
+
+       ctx = mock_context(i915, "mock");
+       if (!ctx)
+               return -ENOMEM;
+
+       ppgtt = ctx->ppgtt;
+       GEM_BUG_ON(!ppgtt);
+
+       err = func(i915, &ppgtt->base, 0, ppgtt->base.total, end_time);
+
+       mock_context_close(ctx);
+       return err;
+}
+
+static int igt_mock_fill(void *arg)
+{
+       return exercise_mock(arg, fill_hole);
+}
+
+static int igt_mock_walk(void *arg)
+{
+       return exercise_mock(arg, walk_hole);
+}
+
+static int igt_mock_drunk(void *arg)
+{
+       return exercise_mock(arg, drunk_hole);
+}
+
 static int igt_gtt_reserve(void *arg)
 {
        struct drm_i915_private *i915 = arg;
@@ -1286,6 +1326,9 @@ out:
 int i915_gem_gtt_mock_selftests(void)
 {
        static const struct i915_subtest tests[] = {
+               SUBTEST(igt_mock_drunk),
+               SUBTEST(igt_mock_walk),
+               SUBTEST(igt_mock_fill),
                SUBTEST(igt_gtt_reserve),
                SUBTEST(igt_gtt_insert),
        };