summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2016-03-04 09:40:51 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2016-03-08 09:57:33 +0000
commit60eafc548911d8625d20443a203c5aff3662c39a (patch)
treefca563b1d9d11576097e4d0920a64d867693c67c /tests
parent9ba9af2ea4306796cbb72c76bc0de05a0fb14c6b (diff)
igt/gem_exec_suspend: Do pre/post suspend double checks
Check that the system operates normally before and after the suspend (as well as across the suspend). The goal is to isolate the breakage to the subtest. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests')
-rw-r--r--tests/gem_exec_suspend.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/gem_exec_suspend.c b/tests/gem_exec_suspend.c
index 22e18f57..f468ff4a 100644
--- a/tests/gem_exec_suspend.c
+++ b/tests/gem_exec_suspend.c
@@ -36,6 +36,8 @@ enum mode {
HIBERNATE,
};
+static void run_test(int fd, unsigned ring, enum mode mode);
+
static void check_bo(int fd, uint32_t handle)
{
uint32_t *map;
@@ -49,6 +51,14 @@ static void check_bo(int fd, uint32_t handle)
munmap(map, 4096);
}
+static void test_all(int fd)
+{
+ const struct intel_execution_engine *e;
+ for (e = intel_execution_engines; e->name; e++)
+ if (gem_has_ring(fd, e->exec_id | e->flags))
+ run_test(fd, e->exec_id | e->flags, NOSLEEP);
+}
+
static void run_test(int fd, unsigned ring, enum mode mode)
{
const int gen = intel_gen(intel_get_drm_devid(fd));
@@ -61,6 +71,10 @@ static void run_test(int fd, unsigned ring, enum mode mode)
igt_skip_on_f(gen == 6 && (ring & ~(3<<13)) == I915_EXEC_BSD,
"MI_STORE_DATA broken on gen6 bsd\n");
+ /* Before suspending, check normal operation */
+ if (mode != NOSLEEP)
+ test_all(fd);
+
gem_quiescent_gpu(fd);
memset(&execbuf, 0, sizeof(execbuf));
@@ -135,6 +149,12 @@ static void run_test(int fd, unsigned ring, enum mode mode)
check_bo(fd, obj[0].handle);
gem_close(fd, obj[0].handle);
+
+ gem_quiescent_gpu(fd);
+
+ /* After resume, make sure it still works */
+ if (mode != NOSLEEP)
+ test_all(fd);
}
igt_main