[PATCH] tests/intel/xe_fault_injection: Inject errors during exec queue create IOCTL
pravalika gurram
pravalika.gurram at intel.com
Thu Jan 30 09:45:14 UTC 2025
Use the fault injection infrastructure to make targeted internal KMD
functions fail when executing xe_exec_queue_create_ioctl()
so that more code paths are tested, such as error handling and unwinding.
Signed-off-by: pravalika gurram <pravalika.gurram at intel.com>
---
tests/intel/xe_fault_injection.c | 41 ++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/tests/intel/xe_fault_injection.c b/tests/intel/xe_fault_injection.c
index 7ae941367..37aca6d8c 100644
--- a/tests/intel/xe_fault_injection.c
+++ b/tests/intel/xe_fault_injection.c
@@ -185,6 +185,38 @@ inject_fault_probe(int fd, char pci_slot[], const char function_name[])
injection_list_do(INJECTION_LIST_REMOVE, function_name);
}
+/**
+ * SUBTEST: exec-queue-create-fail-%s
+ * Description: inject an error in function %arg[1] used in exec queue create IOCTL to make it fail
+ * Functionality: fault
+ *
+ * arg[1]:
+ * @xe_exec_queue_create_bind: xe_exec_queue_create_bind
+ */
+static void
+exec_queue_create_fail(int fd, const char function_name[])
+{
+ struct drm_xe_engine_class_instance instance = {
+ .engine_class = DRM_XE_ENGINE_CLASS_VM_BIND,
+ };
+ uint32_t exec_queue_id;
+ uint32_t vm = xe_vm_create(fd, 0, 0);
+
+ /* sanity check */
+ igt_assert_eq(__xe_exec_queue_create(fd, vm, 1, 1, &instance, 0, &exec_queue_id), 0);
+ xe_exec_queue_destroy(fd, exec_queue_id);
+
+ ignore_faults_in_dmesg(function_name);
+ injection_list_do(INJECTION_LIST_ADD, function_name);
+ set_retval(function_name, INJECT_ERRNO);
+ igt_assert(__xe_exec_queue_create(fd, vm, 1, 1, &instance, 0, &exec_queue_id) != 0);
+ injection_list_do(INJECTION_LIST_REMOVE, function_name);
+
+ igt_assert_eq(__xe_exec_queue_create(fd, vm, 1, 1, &instance, 0, &exec_queue_id), 0);
+ xe_exec_queue_destroy(fd, exec_queue_id);
+ xe_vm_destroy(fd, vm);
+}
+
static int
simple_vm_create(int fd, unsigned int flags)
{
@@ -318,6 +350,11 @@ igt_main
{ }
};
+ const struct section exec_queue_create_fail_functions[] = {
+ { "xe_exec_queue_create_bind" },
+ { }
+ };
+
igt_fixture {
igt_require(fail_function_injection_enabled());
fd = drm_open_driver(DRIVER_XE);
@@ -333,6 +370,10 @@ igt_main
igt_subtest_f("vm-bind-fail-%s", s->name)
vm_bind_fail(fd, s->name);
+ for (const struct section *s = exec_queue_create_fail_functions; s->name; s++)
+ igt_subtest_f("exec-queue-create-fail-%s", s->name)
+ exec_queue_create_fail(fd, s->name);
+
igt_fixture {
xe_sysfs_driver_do(fd, pci_slot, XE_SYSFS_DRIVER_UNBIND);
}
--
2.37.1
More information about the igt-dev
mailing list