[Intel-gfx] [PATCH igt] tests/gem_ctx_exec: Add reset-pin-leak subtest

ville.syrjala at linux.intel.com ville.syrjala at linux.intel.com
Wed Jun 18 21:04:49 CEST 2014


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

Add a subtest to make sure the kernel doesn't leak the vma
pin_count for the last context on reset.

Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
 tests/gem_ctx_exec.c | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/tests/gem_ctx_exec.c b/tests/gem_ctx_exec.c
index da49a2f..da7412c 100644
--- a/tests/gem_ctx_exec.c
+++ b/tests/gem_ctx_exec.c
@@ -46,6 +46,7 @@
 #include "ioctl_wrappers.h"
 #include "drmtest.h"
 #include "igt_aux.h"
+#include "igt_debugfs.h"
 
 struct local_drm_i915_gem_context_destroy {
 	__u32 ctx_id;
@@ -92,7 +93,6 @@ static int exec(int fd, uint32_t handle, int ring, int ctx_id)
 
 	ret = drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2,
 			&execbuf);
-	gem_sync(fd, handle);
 
 	return ret;
 }
@@ -188,15 +188,43 @@ igt_main
 	igt_subtest("basic") {
 		ctx_id = gem_context_create(fd);
 		igt_assert(exec(fd, handle, I915_EXEC_RENDER, ctx_id) == 0);
+		gem_sync(fd, handle);
 		context_destroy(fd, ctx_id);
 
 		ctx_id = gem_context_create(fd);
 		igt_assert(exec(fd, handle, I915_EXEC_RENDER, ctx_id) == 0);
+		gem_sync(fd, handle);
 		context_destroy(fd, ctx_id);
 
 		igt_assert(exec(fd, handle, I915_EXEC_RENDER, ctx_id) < 0);
+		gem_sync(fd, handle);
 	}
 
 	igt_subtest("eviction")
 		big_exec(fd, handle, I915_EXEC_RENDER);
+
+	igt_subtest("reset-pin-leak") {
+		int i;
+
+		/*
+		 * Use an explicit context to isolate the test from
+		 * any major code changes related to the per-file
+		 * default context (eg. if they would be eliminated).
+		 */
+		ctx_id = gem_context_create(fd);
+
+		/*
+		 * Iterate enough times that the kernel will
+		 * become unhappy if the ggtt pin count for
+		 * the last context is leaked at every reset.
+		 */
+		for (i = 0; i < 20; i++) {
+			igt_set_stop_rings(STOP_RING_DEFAULTS);
+			igt_assert(exec(fd, handle, I915_EXEC_RENDER, 0) == 0);
+			igt_assert(exec(fd, handle, I915_EXEC_RENDER, ctx_id) == 0);
+			gem_sync(fd, handle);
+		}
+
+		context_destroy(fd, ctx_id);
+	}
 }
-- 
1.8.5.5




More information about the Intel-gfx mailing list