diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-03-04 20:28:28 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-03-08 09:57:33 +0000 |
commit | d8842d385cf4cc7928b478d45274320620bfdcc7 (patch) | |
tree | 6fd6d011182169e755fb88706508d2dc65150bb5 /tests/gem_exec_suspend.c | |
parent | 697c3f5550d8a58901c010635ecb7a76a524d296 (diff) |
igt/gem_exec_suspend: Check with both cached/uncached objects
Keep an eye on domain tracking for both cached/uncached objects across
suspend.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests/gem_exec_suspend.c')
-rw-r--r-- | tests/gem_exec_suspend.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/tests/gem_exec_suspend.c b/tests/gem_exec_suspend.c index 86cf644a..67b8d1c5 100644 --- a/tests/gem_exec_suspend.c +++ b/tests/gem_exec_suspend.c @@ -30,13 +30,15 @@ #include "igt.h" #include "igt_gt.h" -enum mode { - NOSLEEP = 0, - SUSPEND, - HIBERNATE, -}; +#define NOSLEEP 0 +#define SUSPEND 1 +#define HIBERNATE 2 +#define mode(x) ((x) & 0xff) -static void run_test(int fd, unsigned ring, enum mode mode); +#define UNCACHED (0<<8) +#define CACHED (1<<8) + +static void run_test(int fd, unsigned ring, unsigned flags); static void check_bo(int fd, uint32_t handle) { @@ -51,15 +53,15 @@ static void check_bo(int fd, uint32_t handle) munmap(map, 4096); } -static void test_all(int fd) +static void test_all(int fd, unsigned flags) { unsigned engine; for_each_engine(fd, engine) - run_test(fd, engine, NOSLEEP); + run_test(fd, engine, flags & ~0xff); } -static void run_test(int fd, unsigned ring, enum mode mode) +static void run_test(int fd, unsigned ring, unsigned flags) { const int gen = intel_gen(intel_get_drm_devid(fd)); const uint32_t bbe = MI_BATCH_BUFFER_END; @@ -72,8 +74,8 @@ static void run_test(int fd, unsigned ring, enum mode mode) "MI_STORE_DATA broken on gen6 bsd\n"); /* Before suspending, check normal operation */ - if (mode != NOSLEEP) - test_all(fd); + if (mode(flags) != NOSLEEP) + test_all(fd, flags); gem_quiescent_gpu(fd); @@ -86,6 +88,7 @@ static void run_test(int fd, unsigned ring, enum mode mode) memset(obj, 0, sizeof(obj)); obj[0].handle = gem_create(fd, 4096); + gem_set_caching(fd, obj[0].handle, !!(flags & CACHED)); obj[0].flags |= EXEC_OBJECT_WRITE; obj[1].handle = gem_create(fd, 4096); gem_write(fd, obj[1].handle, 0, &bbe, sizeof(bbe)); @@ -134,7 +137,7 @@ static void run_test(int fd, unsigned ring, enum mode mode) gem_close(fd, obj[1].handle); } - switch (mode) { + switch (mode(flags)) { case NOSLEEP: break; @@ -153,15 +156,15 @@ static void run_test(int fd, unsigned ring, enum mode mode) gem_quiescent_gpu(fd); /* After resume, make sure it still works */ - if (mode != NOSLEEP) - test_all(fd); + if (mode(flags) != NOSLEEP) + test_all(fd, flags); } igt_main { const struct { const char *suffix; - enum mode mode; + unsigned mode; } modes[] = { { "", NOSLEEP }, { "-S3", SUSPEND }, @@ -176,8 +179,12 @@ igt_main for (e = intel_execution_engines; e->name; e++) { for (m = modes; m->suffix; m++) { - igt_subtest_f("%s%s", e->name, m->suffix) - run_test(fd, e->exec_id | e->flags, m->mode); + igt_subtest_f("%s-uncached%s", e->name, m->suffix) + run_test(fd, e->exec_id | e->flags, + m->mode | UNCACHED); + igt_subtest_f("%s-cached%s", e->name, m->suffix) + run_test(fd, e->exec_id | e->flags, + m->mode | CACHED); } } |