From 7ef537231a7bcc8deb49119034f9f6d403565ecc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ville=20Syrj=C3=A4l=C3=A4?= Date: Wed, 18 Jun 2014 21:14:11 +0300 Subject: [PATCH] tests/gem_ctx_exec: Add reset-pin-leak subtest MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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ä --- 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); + } } -- 2.7.4