[igt-dev] [RFC PATCH v2] tests/i915/gem_ctx_sseu: Extend the mmapped paramaters test

Antonio Argenziano antonio.argenziano at intel.com
Tue Feb 4 21:53:37 UTC 2020


The current implementation of the test only maps the arguments in gtt.
This proposal is to extend the test to use different mappings. This is a
first step in making this test exhaustive enough to say that the
interface is robust but, it is meant as a first step improvement. It
also helps with the lack of mappable aperture skipping the mappings if
they do not work.

Signed-off-by: Antonio Argenziano <antonio.argenziano at intel.com>
Cc: Dixit Ashutosh <ashutosh.dixit at intel.com>
Cc: Chris Wilson <chris at chris-wilson.co.uk>
---
 tests/i915/gem_ctx_sseu.c | 54 +++++++++++++++++++++++++++++----------
 1 file changed, 40 insertions(+), 14 deletions(-)

diff --git a/tests/i915/gem_ctx_sseu.c b/tests/i915/gem_ctx_sseu.c
index 38dc584b..7d1ee5a3 100644
--- a/tests/i915/gem_ctx_sseu.c
+++ b/tests/i915/gem_ctx_sseu.c
@@ -48,6 +48,8 @@ static unsigned int __intel_gen__, __intel_devid__;
 static uint64_t __slice_mask__, __subslice_mask__;
 static unsigned int __slice_count__, __subslice_count__;
 
+enum { GTT, WC, CPU, COHERENT, } mappings;
+
 static uint64_t mask_minus_one(uint64_t mask)
 {
 	unsigned int i;
@@ -364,7 +366,7 @@ test_invalid_args(int fd)
  * Verify that ggtt mapped area can be used as the sseu pointer.
  */
 static void
-test_ggtt_args(int fd)
+test_mmapped_args(int fd)
 {
 	struct drm_i915_gem_context_param_sseu *sseu;
 	struct drm_i915_gem_context_param arg = {
@@ -373,17 +375,40 @@ test_ggtt_args(int fd)
 		.size = sizeof(*sseu),
 	};
 	uint32_t bo;
-
-	bo = gem_create(fd, 4096);
-	arg.value = to_user_pointer(gem_mmap__gtt(fd, bo, 4096,
-						  PROT_READ | PROT_WRITE));
-
-	igt_assert_eq(__gem_context_get_param(fd, &arg), 0);
-	igt_assert_eq(__gem_context_set_param(fd, &arg), 0);
-
-	munmap((void *)(uintptr_t)arg.value, 4096);
-	gem_close(fd, bo);
-	gem_context_destroy(fd, arg.ctx_id);
+	void *ptr;
+
+	for (unsigned mapping = GTT; mapping <= COHERENT; mapping++)
+	{
+		bo = gem_create(fd, 4096);
+
+		switch (mapping)
+		{
+			case GTT:
+				ptr = gem_mmap__gtt(fd, bo, 4096, PROT_READ | PROT_WRITE);
+				break;
+			case WC:
+				ptr = gem_mmap__wc(fd, bo, 0, 4096, PROT_READ | PROT_WRITE);
+				break;
+			case CPU:
+				ptr = gem_mmap__cpu(fd, bo, 0, 4096, PROT_READ | PROT_WRITE);
+				break;
+			case COHERENT:
+				ptr = gem_mmap__device_coherent(fd, bo, 0, 4096, PROT_READ | PROT_WRITE);
+				break;
+		};
+
+		if (!ptr)
+			continue;
+
+		arg.value = to_user_pointer(ptr);
+
+		igt_assert_eq(__gem_context_get_param(fd, &arg), 0);
+		igt_assert_eq(__gem_context_set_param(fd, &arg), 0);
+
+		munmap((void *)(uintptr_t)arg.value, 4096);
+		gem_close(fd, bo);
+		gem_context_destroy(fd, arg.ctx_id);
+	}
 }
 
 /*
@@ -528,8 +553,9 @@ igt_main
 		igt_subtest("invalid-sseu")
 			test_invalid_sseu(fd);
 
-		igt_subtest("ggtt-args")
-			test_ggtt_args(fd);
+		igt_subtest("mmapped-args") {
+			test_mmapped_args(fd);
+		}
 
 		igt_subtest("engines")
 			test_engines(fd);
-- 
2.21.0



More information about the igt-dev mailing list