[PATCH i-g-t] tests/intel/xe_create: Check negative cases for exec_queue create/destroy ioctl

nakshtra.goyal at intel.com nakshtra.goyal at intel.com
Fri Jan 17 20:53:19 UTC 2025


From: Nakshtra Goyal <nakshtra.goyal at intel.com>

Negetive test cases to check expected errors using invalid
flags, width, pad, reserved bits, num_placements, extensions, exec_queue_id

Signed-off-by: Nakshtra Goyal <nakshtra.goyal at intel.com>
---
 tests/intel/xe_create.c | 141 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 141 insertions(+)

diff --git a/tests/intel/xe_create.c b/tests/intel/xe_create.c
index 07e11036d..edc2a6178 100644
--- a/tests/intel/xe_create.c
+++ b/tests/intel/xe_create.c
@@ -59,6 +59,123 @@ static int __create_bo(int fd, uint32_t vm, uint64_t size, uint32_t placement,
 	return ret;
 }
 
+/**
+ * TEST: Negative test for exec-queue create/destroy ioctl
+ * Category: Core
+ * Mega feature: General Core features
+ * Sub-category: Synchronization
+ * Functionality: exec-queue create
+ * Test category: negative test
+ */
+
+/**
+ * SUBTEST: invalid-flag
+ * Description: Check ioctl with invalid flag returns expected error code
+ *
+ * SUBTEST: exec-queue-create-invalid-reserved
+ * Description: Send query with invalid reserved value for exec_queue_destroy ioctl
+ *
+ * SUBTEST: invalid-width
+ * Description: Check query with invalid width returns expected error code
+ *
+ * SUBTEST: invalid-num-placements
+ * Description: Check query with invalid num-placements returns expected error code
+ *
+ * SUBTEST: invalid-extensions
+ * Description: Check query with invalid extensions returns expected error code
+ */
+
+static void invalid_flag(int fd)
+{
+	struct drm_xe_exec_queue_create create = {
+		.flags = -1,
+	};
+
+	do_ioctl_err(fd, DRM_IOCTL_XE_EXEC_QUEUE_CREATE, &create, EINVAL);
+}
+
+static void exec_queue_create_invalid_reserved(int fd)
+{
+	struct drm_xe_exec_queue_create create = {
+		.reserved[0] = 0xffff,
+	};
+
+	do_ioctl_err(fd, DRM_IOCTL_XE_EXEC_QUEUE_CREATE, &create, EINVAL);
+
+	create.reserved[0] = 0;
+	create.reserved[1] = 0xffff;
+	do_ioctl_err(fd, DRM_IOCTL_XE_EXEC_QUEUE_CREATE, &create, EINVAL);
+}
+
+static void invalid_width(int fd)
+{
+	struct drm_xe_exec_queue_create create = {
+		.width = 1,
+	};
+
+	do_ioctl_err(fd, DRM_IOCTL_XE_EXEC_QUEUE_CREATE, &create, EINVAL);
+}
+
+static void invalid_num_placements(int fd)
+{
+	struct drm_xe_exec_queue_create create = {
+		.num_placements = 1,
+	};
+
+	do_ioctl_err(fd, DRM_IOCTL_XE_EXEC_QUEUE_CREATE, &create, EINVAL);
+}
+
+static void invalid_extensions(int fd)
+{
+	struct drm_xe_exec_queue_create create = {
+		.extensions = -1,
+	};
+
+	do_ioctl_err(fd, DRM_IOCTL_XE_EXEC_QUEUE_CREATE, &create, EINVAL);
+}
+
+/**
+ * SUBTEST: invalid-pad
+ * Description: Check query with invalid pad returns expected error code
+ *
+ * SUBTEST: exec-queue-destroy-invalid-reserved
+ * Description: Send query with invalid reserved value for exec_queue_destroy ioctl
+ *
+ * SUBTEST: invalid-exec-queue-id
+ * Description: Check query with invalid exec_queue_id returns expected error code
+ */
+
+static void invalid_pad(int fd)
+{
+	struct drm_xe_exec_queue_destroy destroy = {
+		.pad = 1,
+	};
+
+	do_ioctl_err(fd, DRM_IOCTL_XE_EXEC_QUEUE_DESTROY, &destroy, EINVAL);
+}
+
+static void exec_queue_destroy_invalid_reserved(int fd)
+{
+	struct drm_xe_exec_queue_destroy destroy = {
+		.reserved[0] = 0xffff,
+	};
+
+	do_ioctl_err(fd, DRM_IOCTL_XE_EXEC_QUEUE_DESTROY, &destroy, EINVAL);
+
+	destroy.reserved[0] = 0;
+	destroy.reserved[1] = 0xffff;
+	do_ioctl_err(fd, DRM_IOCTL_XE_EXEC_QUEUE_DESTROY, &destroy, EINVAL);
+}
+
+static void invalid_exec_queue_id(int xe)
+{
+	struct drm_xe_exec_queue_destroy args = {
+		.exec_queue_id = 0xffff,
+	};
+
+	do_ioctl_err(xe, DRM_IOCTL_XE_EXEC_QUEUE_DESTROY, &args, ENOENT);
+}
+
 /**
  * SUBTEST: create-invalid-size
  * Functionality: ioctl
@@ -392,6 +509,30 @@ igt_main_args("Q:p:", NULL, help_str, opt_handler, NULL)
 	igt_fixture
 		xe = drm_open_driver(DRIVER_XE);
 
+	igt_subtest("invalid-flag")
+		invalid_flag(xe);
+
+	igt_subtest("exec-queue-create-invalid-reserved")
+		exec_queue_create_invalid_reserved(xe);
+
+	igt_subtest("invalid-width")
+		invalid_width(xe);
+
+	igt_subtest("invalid-num-placements")
+		invalid_num_placements(xe);
+
+	igt_subtest("invalid-extensions")
+		invalid_extensions(xe);
+
+	igt_subtest("invalid-pad")
+		invalid_pad(xe);
+
+	igt_subtest("exec-queue-destroy-invalid-reserved")
+		exec_queue_destroy_invalid_reserved(xe);
+
+	igt_subtest("invalid-exec-queue-id")
+		invalid_exec_queue_id(xe);
+
 	igt_subtest("create-invalid-mbz")
 		create_invalid_mbz(xe);
 
-- 
2.34.1



More information about the igt-dev mailing list