[igt-dev] [PATH i-g-t 2/2] tests/gem_ctx_exec: Move lrc-lite-restore to gem_ctx_switch

Tvrtko Ursulin tursulin at ursulin.net
Fri Sep 7 09:30:08 UTC 2018


From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

New home is more appropriate for this test.

At the same time tidy code a tiny bit.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
---
 tests/gem_ctx_exec.c   | 75 +++++++-----------------------------------
 tests/gem_ctx_switch.c | 46 ++++++++++++++++++++++++++
 2 files changed, 58 insertions(+), 63 deletions(-)

diff --git a/tests/gem_ctx_exec.c b/tests/gem_ctx_exec.c
index b35ec9f64775..b9173e9e2b17 100644
--- a/tests/gem_ctx_exec.c
+++ b/tests/gem_ctx_exec.c
@@ -25,10 +25,6 @@
  *
  */
 
-/*
- * This test covers basic context switch functionality
- */
-
 #include "igt.h"
 #include <unistd.h>
 #include <stdlib.h>
@@ -45,34 +41,18 @@
 #include <drm.h>
 
 
-IGT_TEST_DESCRIPTION("Test basic context switch functionality.");
+IGT_TEST_DESCRIPTION("Test context batch execution.");
 
-/* Copied from gem_exec_nop.c */
 static int exec(int fd, uint32_t handle, int ring, int ctx_id)
 {
-	struct drm_i915_gem_execbuffer2 execbuf;
-	struct drm_i915_gem_exec_object2 gem_exec;
-
-	gem_exec.handle = handle;
-	gem_exec.relocation_count = 0;
-	gem_exec.relocs_ptr = 0;
-	gem_exec.alignment = 0;
-	gem_exec.offset = 0;
-	gem_exec.flags = 0;
-	gem_exec.rsvd1 = 0;
-	gem_exec.rsvd2 = 0;
-
-	execbuf.buffers_ptr = to_user_pointer(&gem_exec);
-	execbuf.buffer_count = 1;
-	execbuf.batch_start_offset = 0;
-	execbuf.batch_len = 8;
-	execbuf.cliprects_ptr = 0;
-	execbuf.num_cliprects = 0;
-	execbuf.DR1 = 0;
-	execbuf.DR4 = 0;
-	execbuf.flags = ring;
+	struct drm_i915_gem_exec_object2 obj = { .handle = handle };
+	struct drm_i915_gem_execbuffer2 execbuf = {
+		.buffers_ptr = to_user_pointer(&obj),
+		.buffer_count = 1,
+		.flags = ring,
+	};
+
 	i915_execbuffer2_set_context_id(execbuf, ctx_id);
-	execbuf.rsvd2 = 0;
 
 	return __gem_execbuf(fd, &execbuf);
 }
@@ -92,13 +72,11 @@ static void big_exec(int fd, uint32_t handle, int ring)
 	igt_assert(gem_exec);
 	memset(gem_exec, 0, (num_buffers + 1) * sizeof(*gem_exec));
 
-
 	ctx_id1 = gem_context_create(fd);
 	ctx_id2 = gem_context_create(fd);
 
 	gem_exec[0].handle = handle;
 
-
 	execbuf.buffers_ptr = to_user_pointer(gem_exec);
 	execbuf.buffer_count = num_buffers + 1;
 	execbuf.batch_start_offset = 0;
@@ -155,14 +133,13 @@ static void invalid_context(int fd, unsigned ring)
 	igt_assert_eq(__gem_execbuf(fd, &execbuf), -ENOENT);
 }
 
-uint32_t handle;
-uint32_t batch[2] = {0, MI_BATCH_BUFFER_END};
-uint32_t ctx_id, ctx_id2;
-int fd;
-
 igt_main
 {
+	const uint32_t batch[2] = { 0, MI_BATCH_BUFFER_END };
 	const struct intel_execution_engine *e;
+	uint32_t handle;
+	uint32_t ctx_id;
+	int fd;
 
 	igt_fixture {
 		fd = drm_open_driver_render(DRIVER_INTEL);
@@ -225,32 +202,4 @@ 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);
-	}
 }
diff --git a/tests/gem_ctx_switch.c b/tests/gem_ctx_switch.c
index 1208cb8d7fe2..7ad7b31ea183 100644
--- a/tests/gem_ctx_switch.c
+++ b/tests/gem_ctx_switch.c
@@ -83,6 +83,20 @@ static int measure_qlen(int fd,
 	return qlen;
 }
 
+static int exec(int fd, uint32_t handle, int ring, int ctx_id)
+{
+	struct drm_i915_gem_exec_object2 obj = { .handle = handle };
+	struct drm_i915_gem_execbuffer2 execbuf = {
+		.buffers_ptr = to_user_pointer(&obj),
+		.buffer_count = 1,
+		.flags = ring,
+	};
+
+	i915_execbuffer2_set_context_id(execbuf, ctx_id);
+
+	return __gem_execbuf(fd, &execbuf);
+}
+
 static void single(int fd, uint32_t handle,
 		   const struct intel_execution_engine *e,
 		   unsigned flags,
@@ -318,6 +332,38 @@ igt_main
 	igt_subtest("basic-all-heavy")
 		all(fd, heavy, 0, 5);
 
+	igt_subtest("lrc-lite-restore") {
+		uint32_t ctx[2];
+		int i, j;
+
+		/*
+		 * Need 2 contexts to be able to replicate a lite restore,
+		 * i.e. a running context is resubmitted.
+		 */
+		ctx[0] = gem_context_create(fd);
+		ctx[1] = 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_eq(exec(fd, light, I915_EXEC_RENDER,
+						   ctx[0]), 0);
+				igt_assert_eq(exec(fd, light, I915_EXEC_RENDER,
+						   ctx[1]), 0);
+			}
+
+			gem_sync(fd, light);
+		}
+
+		gem_context_destroy(fd, ctx[0]);
+		gem_context_destroy(fd, ctx[1]);
+	}
+
 	igt_fixture {
 		igt_stop_hang_detector();
 		gem_close(fd, heavy);
-- 
2.17.1



More information about the igt-dev mailing list