[PATCH 16/66] tests/xe_eudebug: Introduce basic exec_queue testing

Christoph Manszewski christoph.manszewski at intel.com
Mon Jul 29 16:01:09 UTC 2024


From: Dominik Grzegorzek <dominik.grzegorzek at intel.com>

Exercise events send by the debugger on exec_queue create/destroy.

Signed-off-by: Dominik Grzegorzek <dominik.grzegorzek at intel.com>
Cc: Christoph Manszewski <christoph.manszewski at intel.com>
---
 tests/intel/xe_eudebug.c | 64 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 60 insertions(+), 4 deletions(-)

diff --git a/tests/intel/xe_eudebug.c b/tests/intel/xe_eudebug.c
index cf8f01684..47523982d 100644
--- a/tests/intel/xe_eudebug.c
+++ b/tests/intel/xe_eudebug.c
@@ -17,13 +17,16 @@
 
 #include "igt.h"
 #include "xe/xe_eudebug.h"
+#include "xe/xe_query.h"
 
 #define CREATE_VMS	(1 << 0)
+#define CREATE_EXEC_QUEUES	(1 << 1)
 static void run_basic_client(struct xe_eudebug_client *c)
 {
 	int fd, i;
 
 	fd = xe_eudebug_client_open_driver(c);
+	xe_device_get(fd);
 
 	if (c->flags & CREATE_VMS) {
 		const uint32_t flags[] = {
@@ -39,6 +42,51 @@ static void run_basic_client(struct xe_eudebug_client *c)
 			xe_eudebug_client_vm_destroy(c, fd, vms[i]);
 	}
 
+	if (c->flags & CREATE_EXEC_QUEUES) {
+		struct drm_xe_exec_queue_create *create;
+		struct drm_xe_engine_class_instance *hwe;
+		struct drm_xe_engine_class_instance bind_sync = {
+			.engine_class = DRM_XE_ENGINE_CLASS_VM_BIND,
+			.engine_instance = 0,
+		};
+		struct drm_xe_engine_class_instance bind_async = {
+			.engine_class = DRM_XE_ENGINE_CLASS_VM_BIND,
+			.engine_instance = 0,
+		};
+		uint32_t vm;
+
+		create = calloc((xe_number_engines(fd) + 2), sizeof(*create));
+
+		vm = xe_eudebug_client_vm_create(c, fd, 0, 0);
+
+		i = 0;
+		xe_for_each_engine(fd, hwe) {
+			create[i].instances = to_user_pointer(hwe);
+			create[i].vm_id = vm;
+			create[i].width = 1;
+			create[i].num_placements = 1;
+			xe_eudebug_client_exec_queue_create(c, fd, &create[i++]);
+		}
+
+		create[i].instances = to_user_pointer(&bind_sync),
+		create[i].vm_id = vm;
+		create[i].width = 1,
+		create[i].num_placements = 1,
+		xe_eudebug_client_exec_queue_create(c, fd, &create[i++]);
+
+		create[i].instances = to_user_pointer(&bind_async),
+		create[i].vm_id = vm;
+		create[i].width = 1,
+		create[i].num_placements = 1,
+		xe_eudebug_client_exec_queue_create(c, fd, &create[i]);
+
+		for (; i >= 0; i--)
+			xe_eudebug_client_exec_queue_destroy(c, fd, &create[i]);
+
+		xe_eudebug_client_vm_destroy(c, fd,  vm);
+	}
+
+	xe_device_put(fd);
 	xe_eudebug_client_close_driver(c, fd);
 }
 
@@ -253,11 +301,16 @@ static void test_read_event(int fd)
  * SUBTEST: multiple-sessions
  * Description:
  *	Simultaneously attach many debuggers to many processes.
- *	Each process opens and closes xe drm client.
+ *	Each process opens and closes xe drm client and creates few resources.
  *
- * SUBTEST: basic-vms
+ * SUBTEST: basic-%s
  * Description:
- *	Attach the debugger to process which creates and destroys a few vms.
+ *	Attach the debugger to process which creates and destroys a few %arg[1].
+ *
+ * arg[1]:
+ *
+ * @vms: vms
+ * @exec-queues: exec queues
  */
 static void test_basic_sessions(int fd, unsigned int flags, int count)
 {
@@ -547,11 +600,14 @@ igt_main
 		test_basic_sessions(fd, 0, 1);
 
 	igt_subtest("multiple-sessions")
-		test_basic_sessions(fd, CREATE_VMS, 4);
+		test_basic_sessions(fd, CREATE_VMS | CREATE_EXEC_QUEUES, 4);
 
 	igt_subtest("basic-vms")
 		test_basic_sessions(fd, CREATE_VMS, 1);
 
+	igt_subtest("basic-exec-queues")
+		test_basic_sessions(fd, CREATE_EXEC_QUEUES, 1);
+
 	igt_subtest("discovery-race")
 		test_race_discovery(fd, 0, 4);
 
-- 
2.34.1



More information about the igt-dev mailing list