public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH] tests/gem_reloc_overflow: Add gen8+ specifc tests
@ 2013-11-06 18:12 rafael.barbalho
  2013-11-06 18:52 ` Daniel Vetter
  0 siblings, 1 reply; 5+ messages in thread
From: rafael.barbalho @ 2013-11-06 18:12 UTC (permalink / raw)
  To: intel-gfx

From: Rafael Barbalho <rafael.barbalho@intel.com>

Broadwell introduces 64-bit relocation addresses which add extra
corner cases. The test was refactored slightly with some tests that
were in the source offset tests were moved to the more generic reloc
test area. The source offset tests are now gen aware and called twice to
test both cpu & gtt relocation paths. In addition 2 new gen8+ test
were added to the test:

* Relocation straddling page a page
* Insufficient space for a relocation at the end of the buffer.

Signed-off-by: Rafael Barbalho <rafael.barbalho@intel.com>

Conflicts:
	tests/gem_reloc_overflow.c
---
 tests/gem_reloc_overflow.c | 148 +++++++++++++++++++++++++++++++--------------
 1 file changed, 103 insertions(+), 45 deletions(-)

diff --git a/tests/gem_reloc_overflow.c b/tests/gem_reloc_overflow.c
index f7ba1d7..38ad2a5 100644
--- a/tests/gem_reloc_overflow.c
+++ b/tests/gem_reloc_overflow.c
@@ -24,6 +24,7 @@
  * Authors:
  *    Kees Cook <keescook@chromium.org>
  *    Daniel Vetter <daniel.vetter@ffwll.ch>
+ *    Rafael Barbalho <rafael.barbalho@intel.com>
  *
  */
 
@@ -60,13 +61,14 @@ struct drm_i915_gem_relocation_entry *reloc;
 uint32_t handle;
 uint32_t batch_handle;
 
-
-static void source_offset_tests(void)
+static void source_offset_tests(int devid, bool reloc_gtt)
 {
 	struct drm_i915_gem_relocation_entry single_reloc;
+	char *dst_gtt;
+	char *relocation_type;
 
 	igt_fixture {
-		handle = gem_create(fd, 4096);
+		handle = gem_create(fd, 8192);
 
 		execobjs[1].handle = batch_handle;
 		execobjs[1].relocation_count = 0;
@@ -76,21 +78,70 @@ static void source_offset_tests(void)
 		execobjs[0].relocation_count = 1;
 		execobjs[0].relocs_ptr = (uintptr_t) &single_reloc;
 		execbuf.buffer_count = 2;
+
+		if (reloc_gtt) {
+			dst_gtt = gem_mmap(fd, handle, 8192, PROT_READ | PROT_WRITE);
+			igt_assert(dst_gtt != MAP_FAILED);
+			gem_set_domain(fd, handle, I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
+			memset(dst_gtt, 0, 8192);
+			munmap(dst_gtt, 8192);
+			relocation_type = "reloc-gtt";
+		} else {
+			relocation_type = "reloc-cpu";
+		}
 	}
 
-	igt_subtest("source-offset-end") {
-		single_reloc.offset = 4096 - 4;
-		single_reloc.delta = 0;
-		single_reloc.target_handle = handle;
-		single_reloc.read_domains = I915_GEM_DOMAIN_RENDER;
-		single_reloc.write_domain = I915_GEM_DOMAIN_RENDER;
-		single_reloc.presumed_offset = 0;
+	if (intel_gen(devid) >= 8) {
+		igt_subtest_f("source-offset-page-stradle-gen8+-%s", relocation_type) {
+			single_reloc.offset = 4096 - 4;
+			single_reloc.delta = 0;
+			single_reloc.target_handle = handle;
+			single_reloc.read_domains = I915_GEM_DOMAIN_RENDER;
+			single_reloc.write_domain = I915_GEM_DOMAIN_RENDER;
+			single_reloc.presumed_offset = 0;
+
+			igt_assert(ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf) == 0);
+			single_reloc.delta = 1024;
+			igt_assert(ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf) == 0);
+		}
 
-		igt_assert(ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf) == 0);
+		igt_subtest_f("source-offset-end-gen8+-%s", relocation_type) {
+			single_reloc.offset = 8192 - 8;
+			single_reloc.delta = 0;
+			single_reloc.target_handle = handle;
+			single_reloc.read_domains = I915_GEM_DOMAIN_RENDER;
+			single_reloc.write_domain = I915_GEM_DOMAIN_RENDER;
+			single_reloc.presumed_offset = 0;
+
+			igt_assert(ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf) == 0);
+		}
+
+		igt_subtest_f("source-offset-overflow-gen8+-%s", relocation_type) {
+			single_reloc.offset = 8192 - 4;
+			single_reloc.delta = 0;
+			single_reloc.target_handle = handle;
+			single_reloc.read_domains = I915_GEM_DOMAIN_RENDER;
+			single_reloc.write_domain = I915_GEM_DOMAIN_RENDER;
+			single_reloc.presumed_offset = 0;
+
+			igt_assert(ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf) != 0);
+			igt_assert(errno == EINVAL);
+		}
+	} else {
+		igt_subtest_f("source-offset-end-%s", relocation_type) {
+			single_reloc.offset = 8192 - 4;
+			single_reloc.delta = 0;
+			single_reloc.target_handle = handle;
+			single_reloc.read_domains = I915_GEM_DOMAIN_RENDER;
+			single_reloc.write_domain = I915_GEM_DOMAIN_RENDER;
+			single_reloc.presumed_offset = 0;
+
+			igt_assert(ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf) == 0);
+		}
 	}
 
-	igt_subtest("source-offset-big") {
-		single_reloc.offset = 4096;
+	igt_subtest_f("source-offset-big-%s", relocation_type) {
+		single_reloc.offset = 8192;
 		single_reloc.delta = 0;
 		single_reloc.target_handle = handle;
 		single_reloc.read_domains = I915_GEM_DOMAIN_RENDER;
@@ -101,7 +152,7 @@ static void source_offset_tests(void)
 		igt_assert(errno == EINVAL);
 	}
 
-	igt_subtest("source-offset-negative") {
+	igt_subtest_f("source-offset-negative-%s", relocation_type) {
 		single_reloc.offset = (int64_t) -4;
 		single_reloc.delta = 0;
 		single_reloc.target_handle = handle;
@@ -113,7 +164,7 @@ static void source_offset_tests(void)
 		igt_assert(errno == EINVAL);
 	}
 
-	igt_subtest("source-offset-unaligned") {
+	igt_subtest_f("source-offset-unaligned-%s", relocation_type) {
 		single_reloc.offset = 1;
 		single_reloc.delta = 0;
 		single_reloc.target_handle = handle;
@@ -126,34 +177,6 @@ static void source_offset_tests(void)
 	}
 
 	igt_fixture {
-		execobjs[0].handle = batch_handle;
-		execobjs[0].relocation_count = 0;
-		execobjs[0].relocs_ptr = 0;
-
-		execbuf.buffer_count = 1;
-	}
-
-	igt_subtest("batch-start-unaligend") {
-		execbuf.batch_start_offset = 1;
-		execbuf.batch_len = 8;
-
-		igt_assert(ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf) != 0);
-		igt_assert(errno == EINVAL);
-	}
-
-	igt_subtest("batch-end-unaligend") {
-		execbuf.batch_start_offset = 0;
-		execbuf.batch_len = 7;
-
-		igt_assert(ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf) != 0);
-		igt_assert(errno == EINVAL);
-	}
-
-	igt_fixture {
-		/* Undo damage for next tests. */
-		execbuf.batch_start_offset = 0;
-		execbuf.batch_len = 8;
-
 		gem_close(fd, handle);
 	}
 }
@@ -185,6 +208,36 @@ static void reloc_tests(void)
 		igt_assert(errno == EINVAL);
 	}
 
+	igt_fixture {
+		execobjs[0].handle = batch_handle;
+		execobjs[0].relocation_count = 0;
+		execobjs[0].relocs_ptr = 0;
+
+		execbuf.buffer_count = 1;
+	}
+
+	igt_subtest("batch-start-unaligned") {
+		execbuf.batch_start_offset = 1;
+		execbuf.batch_len = 8;
+
+		igt_assert(ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf) != 0);
+		igt_assert(errno == EINVAL);
+	}
+
+	igt_subtest("batch-end-unaligned") {
+		execbuf.batch_start_offset = 0;
+		execbuf.batch_len = 7;
+
+		igt_assert(ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf) != 0);
+		igt_assert(errno == EINVAL);
+	}
+
+	igt_fixture {
+		/* Undo damage for next tests. */
+		execbuf.batch_start_offset = 0;
+		execbuf.batch_len = 8;
+	}
+
 	igt_subtest("wrapped-overflow") {
 		/* Attempt wrapped overflow entries. */
 		for (i = 0; i < num; i++) {
@@ -252,12 +305,16 @@ static void buffer_count_tests(void)
 
 igt_main
 {
+	int devid = 0;
+
 	igt_fixture {
 		int ring;
 		uint32_t batch_data [2] = { MI_NOOP, MI_BATCH_BUFFER_END };
 
 		fd = drm_open_any();
 
+		devid = intel_get_drm_devid(fd);
+
 		/* Create giant reloc buffer area. */
 		num = 257;
 		entries = ((1ULL << 32) / (num - 1));
@@ -271,7 +328,7 @@ igt_main
 		for (int i = 0; i < num; i++)
 			handles[i] = gem_create(fd, 4096);
 
-		if (intel_gen(intel_get_drm_devid(fd)) >= 6)
+		if (intel_gen(devid) >= 6)
 			ring = I915_EXEC_BLT;
 		else
 			ring = 0;
@@ -296,7 +353,8 @@ igt_main
 
 	reloc_tests();
 
-	source_offset_tests();
+	source_offset_tests(devid, false);
+	source_offset_tests(devid, true);
 
 	buffer_count_tests();
 
-- 
1.8.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-11-07 13:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-06 18:12 [PATCH] tests/gem_reloc_overflow: Add gen8+ specifc tests rafael.barbalho
2013-11-06 18:52 ` Daniel Vetter
2013-11-06 19:52   ` Barbalho, Rafael
2013-11-07 13:05     ` Daniel Vetter
2013-11-07 13:15       ` Daniel Vetter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox