Commit 210e8ac4 authored by Chris Wilson's avatar Chris Wilson

drm/i915: Add mock tests for GTT/VMA handling

Use the live tests against the mock ppgtt for quick testing on all
platforms of the VMA layer.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170213171558.20942-44-chris@chris-wilson.co.uk
parent 5f32616e
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "../i915_selftest.h" #include "../i915_selftest.h"
#include "i915_random.h" #include "i915_random.h"
#include "mock_context.h"
#include "mock_drm.h" #include "mock_drm.h"
#include "mock_gem_device.h" #include "mock_gem_device.h"
...@@ -913,6 +914,45 @@ static void track_vma_bind(struct i915_vma *vma) ...@@ -913,6 +914,45 @@ static void track_vma_bind(struct i915_vma *vma)
list_move_tail(&vma->vm_link, &vma->vm->inactive_list); 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) static int igt_gtt_reserve(void *arg)
{ {
struct drm_i915_private *i915 = arg; struct drm_i915_private *i915 = arg;
...@@ -1286,6 +1326,9 @@ static int igt_gtt_insert(void *arg) ...@@ -1286,6 +1326,9 @@ static int igt_gtt_insert(void *arg)
int i915_gem_gtt_mock_selftests(void) int i915_gem_gtt_mock_selftests(void)
{ {
static const struct i915_subtest tests[] = { 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_reserve),
SUBTEST(igt_gtt_insert), SUBTEST(igt_gtt_insert),
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment