[igt-dev] [PATCH i-g-t] tests/i915/gem_ctx_create: add two multi-gpu subtests

Kamil Konieczny kamil.konieczny at linux.intel.com
Fri Jan 20 12:28:57 UTC 2023


Create two multi-gpu tests for basic functionality. Also
while at it improve a little subtest basic and check if
we get context id we requested. Add also a helper for creating
non-zero random number.

Cc: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
Signed-off-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
---
 tests/i915/gem_ctx_create.c | 71 +++++++++++++++++++++++++++++++++----
 1 file changed, 64 insertions(+), 7 deletions(-)

diff --git a/tests/i915/gem_ctx_create.c b/tests/i915/gem_ctx_create.c
index 39f070af..4d12e769 100644
--- a/tests/i915/gem_ctx_create.c
+++ b/tests/i915/gem_ctx_create.c
@@ -34,6 +34,7 @@
 #include "i915/gem_create.h"
 #include "igt.h"
 #include "igt_rand.h"
+#include "lib/igt_device_scan.h"
 #include "sw_sync.h"
 
 IGT_TEST_DESCRIPTION("Test the context create ioctls");
@@ -558,12 +559,36 @@ static void iris_pipeline(int i915)
 #endif /* I915_DEFINE_CONTEXT_PARAM_ENGINES */
 }
 
+static int nonzero_rand(void)
+{
+	int i, r;
+
+	for (i = 0, r = rand(); r == 0 && i <= 1; i++)
+		r = rand();
+
+	igt_assert_f(r, "rand() error\n");
+
+	return r;
+}
+
+static void test_create_id(int fd, uint32_t id)
+{
+	struct drm_i915_gem_context_create create;
+
+	igt_assert(id != 0);
+	memset(&create, 0, sizeof(create));
+	create.ctx_id = id;
+	igt_assert_eq(create_ioctl(fd, &create), 0);
+	gem_context_destroy(fd, create.ctx_id);
+	igt_assert(create.ctx_id == id);
+}
+
 igt_main
 {
 	const int ncpus = sysconf(_SC_NPROCESSORS_ONLN);
-	struct drm_i915_gem_context_create create;
 	const struct intel_execution_engine2 *e;
 	intel_ctx_cfg_t cfg;
+	int gpu_count;
 	int fd = -1;
 
 	igt_fixture {
@@ -589,12 +614,7 @@ igt_main
 
 	igt_describe("Test random context creation");
 	igt_subtest("basic") {
-		memset(&create, 0, sizeof(create));
-		create.ctx_id = rand();
-		create.pad = 0;
-		igt_assert_eq(create_ioctl(fd, &create), 0);
-		igt_assert(create.ctx_id != 0);
-		gem_context_destroy(fd, create.ctx_id);
+		test_create_id(fd, nonzero_rand());
 	}
 
 	igt_describe("Verify valid and invalid context extensions");
@@ -668,5 +688,42 @@ igt_main
 	igt_fixture {
 		igt_stop_hang_detector();
 		close(fd);
+		gpu_count = igt_device_filter_count();
+	}
+
+	igt_describe("Test context creation on multi-GPU machine");
+	igt_subtest("multigpu-basic") {
+		igt_require(gpu_count > 1);
+
+		igt_multi_fork(child, gpu_count) {
+			int gpu_fd = __drm_open_driver_another(child, DRIVER_INTEL);
+
+			igt_assert(gpu_fd > 0);
+			test_create_id(gpu_fd, nonzero_rand());
+			close(gpu_fd);
+		}
+
+		igt_waitchildren();
+	}
+
+	igt_describe("Exercise implicit per-fd context creation on multi-GPU machine");
+	igt_subtest("multigpu-basic-files")
+	{
+			igt_require(gpu_count > 1);
+			igt_multi_fork(child, gpu_count) {
+				int gpu_fd = __drm_open_driver_another(child, DRIVER_INTEL);
+				intel_ctx_cfg_t gpu_cfg;
+
+				igt_assert(gpu_fd > 0);
+				igt_fork_hang_detector(gpu_fd);
+				gpu_cfg = intel_ctx_cfg_all_physical(gpu_fd);
+
+				files(gpu_fd, &gpu_cfg, 2, 1);
+
+				igt_stop_hang_detector();
+				close(gpu_fd);
+			}
+
+			igt_waitchildren();
 	}
 }
-- 
2.37.2



More information about the igt-dev mailing list