[PATCH i-g-t 2/2] tests/intel/xe_fault_injection: Make inject-fault-probe-function* tests VF-aware

Marcin Bernatowicz marcin.bernatowicz at linux.intel.com
Thu Apr 17 13:13:12 UTC 2025


Not all probe functions are invoked and cause a failure when fault
injection is performed in a Virtual Function (VF) context. Some of
these functions are only relevant for Physical Function (PF).

Mark such functions with a `pf_only` flag and update the fault injection
test logic to handle VF environments appropriately. When a PF-only
function is tested on a VF device, expect the probe to succeed and
validate accordingly.

This ensures that tests do not produce false failures when run on VFs.

Cc: Francois Dugast <francois.dugast at intel.com>
Cc: Satyanarayana K V P <satyanarayana.k.v.p at intel.com>
Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz at linux.intel.com>
---
 tests/intel/xe_fault_injection.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/tests/intel/xe_fault_injection.c b/tests/intel/xe_fault_injection.c
index dc8005dc8..818f62ceb 100644
--- a/tests/intel/xe_fault_injection.c
+++ b/tests/intel/xe_fault_injection.c
@@ -16,6 +16,7 @@
 #include "igt.h"
 #include "igt_device.h"
 #include "igt_kmod.h"
+#include "igt_sriov_device.h"
 #include "igt_sysfs.h"
 #include "lib/igt_syncobj.h"
 #include "lib/intel_pat.h"
@@ -385,18 +386,20 @@ igt_main
 	struct drm_xe_engine_class_instance *hwe;
 	static uint32_t devid;
 	char pci_slot[NAME_MAX];
+	bool is_vf_device;
 	const struct section {
 		const char *name;
 		unsigned int flags;
+		bool pf_only;
 	} probe_fail_functions[] = {
 		{ "wait_for_lmem_ready" },
 		{ "xe_add_hw_engine_class_defaults" },
 		{ "xe_device_create" },
 		{ "xe_device_probe_early" },
 		{ "xe_ggtt_init_early" },
-		{ "xe_guc_ads_init" },
+		{ "xe_guc_ads_init", 0, true },
 		{ "xe_guc_ct_init" },
-		{ "xe_guc_log_init" },
+		{ "xe_guc_log_init", 0, true },
 		{ "xe_guc_relay_init" },
 		{ "xe_mmio_probe_early" },
 		{ "xe_pcode_probe_early" },
@@ -405,7 +408,7 @@ igt_main
 		{ "xe_tile_init_early" },
 		{ "xe_uc_fw_init" },
 		{ "xe_wa_init" },
-		{ "xe_wopcm_init" },
+		{ "xe_wopcm_init", 0, true },
 		{ }
 	};
 	const struct section vm_create_fail_functions[] = {
@@ -449,6 +452,7 @@ igt_main
 		igt_device_get_pci_slot_name(fd, pci_slot);
 		setup_injection_fault();
 		igt_install_exit_handler(cleanup_injection_fault);
+		is_vf_device = intel_is_vf_device(fd);
 	}
 
 	for (const struct section *s = vm_create_fail_functions; s->name; s++)
@@ -480,8 +484,15 @@ igt_main
 	}
 
 	for (const struct section *s = probe_fail_functions; s->name; s++)
-		igt_subtest_f("inject-fault-probe-function-%s", s->name)
-			igt_assert_eq(INJECT_ERRNO, inject_fault_probe(fd, pci_slot, s->name));
+		igt_subtest_f("inject-fault-probe-function-%s", s->name) {
+			bool should_pass = s->pf_only && is_vf_device;
+			int err;
+
+			err = inject_fault_probe(fd, pci_slot, s->name);
+
+			igt_assert_eq(should_pass ? 0 : INJECT_ERRNO, err);
+			igt_kmod_unbind("xe", pci_slot);
+		}
 
 	igt_fixture {
 		close(sysfs);
-- 
2.31.1



More information about the igt-dev mailing list