summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMichel Thierry <michel.thierry@intel.com>2015-04-14 16:42:58 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-05-04 09:35:49 +0200
commit3be592001b6944433490d491596694ca66bd134f (patch)
treeb6525b7698317e06deffe9585eccfd4add27d20a /tests
parentc4ec47b46d7e716f153a904c5a5b5b01a5afc7de (diff)
igt/gem_ctx_exec: Add lrc lite restore subtest
Exercise lite-restore (re-submit a context that is currently running), by queueing several small batchbuffers. This test helps to validate WaIdleLiteRestore. Signed-off-by: Michel Thierry <michel.thierry@intel.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/gem_ctx_exec.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/tests/gem_ctx_exec.c b/tests/gem_ctx_exec.c
index 43b38a2f..3df939cc 100644
--- a/tests/gem_ctx_exec.c
+++ b/tests/gem_ctx_exec.c
@@ -155,7 +155,7 @@ static void big_exec(int fd, uint32_t handle, int ring)
uint32_t handle;
uint32_t batch[2] = {0, MI_BATCH_BUFFER_END};
-uint32_t ctx_id;
+uint32_t ctx_id, ctx_id2;
int fd;
igt_main
@@ -215,4 +215,32 @@ igt_main
gem_context_destroy(fd, ctx_id);
}
+
+ igt_subtest("lrc-lite-restore") {
+ int i, j;
+
+ /*
+ * Need 2 contexts to be able to replicate a lite restore,
+ * i.e. a running context is resubmitted.
+ */
+ ctx_id = gem_context_create(fd);
+ ctx_id2 = gem_context_create(fd);
+
+ /*
+ * Queue several small batchbuffers to be sure we'll send execlists
+ * with 2 valid context, and likely cause a lite restore when ctxB
+ * is resubmitted at the top of the new execlist.
+ */
+ for (i = 0; i < 20; i++) {
+ for (j = 0; j < 200; j++) {
+ igt_assert(exec(fd, handle, I915_EXEC_RENDER, ctx_id) == 0);
+ igt_assert(exec(fd, handle, I915_EXEC_RENDER, ctx_id2) == 0);
+ }
+
+ gem_sync(fd, handle);
+ }
+
+ gem_context_destroy(fd, ctx_id);
+ gem_context_destroy(fd, ctx_id2);
+ }
}