[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