[PATCH i-g-t 2/2] tests/intel/xe_configfs: Add test to validate survivability mode

Riana Tauro riana.tauro at intel.com
Thu Apr 10 06:07:26 UTC 2025


The test validates if survivability mode is enabled on supported
platforms when configured using configfs attribute.

Signed-off-by: Riana Tauro <riana.tauro at intel.com>
---
 tests/intel/xe_configfs.c | 138 ++++++++++++++++++++++++++++++++++++++
 tests/meson.build         |   1 +
 2 files changed, 139 insertions(+)
 create mode 100644 tests/intel/xe_configfs.c

diff --git a/tests/intel/xe_configfs.c b/tests/intel/xe_configfs.c
new file mode 100644
index 000000000..8954ed87c
--- /dev/null
+++ b/tests/intel/xe_configfs.c
@@ -0,0 +1,138 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+#include <limits.h>
+
+#include "igt.h"
+#include "igt_configfs.h"
+#include "igt_device.h"
+#include "igt_sysfs.h"
+
+/**
+ * TEST: Check configfs userspace API
+ * Category: Core
+ * Mega feature: General Core features
+ * Sub-category: uapi
+ * Functionality: configfs
+ * Description: validate configfs entries
+ * Test category: functionality test
+ */
+
+static char bus_addr[NAME_MAX];
+static uint32_t dev_id;
+
+static int driver_fd(void)
+{
+	int fd;
+
+	fd = open("/sys/bus/pci/drivers/xe", O_RDONLY);
+	igt_assert_f(fd >= 0, "Can't open path\n");
+
+	return fd;
+}
+
+static void driver_bind(void)
+{
+	int fd;
+
+	fd = driver_fd();
+	igt_sysfs_write(fd, "bind", bus_addr, sizeof(bus_addr));
+	close(fd);
+}
+
+static void driver_unbind(void)
+{
+	int fd;
+
+	fd = driver_fd();
+	igt_sysfs_write(fd, "unbind", bus_addr, sizeof(bus_addr));
+	close(fd);
+}
+
+static void restore(int sig)
+{
+	/* Restore after survivability mode */
+	driver_unbind();
+	driver_bind();
+}
+
+static void set_survivability_mode(int dir_fd, bool value)
+{
+	driver_unbind();
+	igt_sysfs_set_boolean(dir_fd, "survivability_mode", value);
+	driver_bind();
+}
+
+static void check_survivability_mode(void)
+{
+	char path[PATH_MAX], buf[4096];
+	int fd, len;
+
+	snprintf(path, PATH_MAX, "/sys/bus/pci/devices/%s", bus_addr);
+	fd = open(path, O_RDONLY);
+	igt_assert_f(fd >= 0, "Cannot open %s\n", path);
+
+	len = igt_sysfs_read(fd, "survivability_mode", buf, sizeof(buf) - 1);
+	if (len > 0) {
+		buf[len] = '\0';
+		igt_info("Survivability Mode:\n%s", buf);
+	}
+	close(fd);
+
+	if (IS_BATTLEMAGE(dev_id))
+		igt_assert_f(len > 0, "Survivability mode not set\n");
+}
+
+/**
+ * SUBTEST: survivability-mode
+ * Description: Validate survivability mode by setting configfs
+ */
+static void test_survivability_mode(int dir_fd)
+{
+	/* Enable survivability mode */
+	set_survivability_mode(dir_fd, true);
+
+	check_survivability_mode();
+}
+
+static int create_device_configfs(int configfs_fd, int fd)
+{
+	int dir_fd;
+	struct pci_device *pci_dev;
+
+	pci_dev = igt_device_get_pci_device(fd);
+	snprintf(bus_addr, sizeof(bus_addr), "%04x:%02x:%02x.%01x",
+		 pci_dev->domain, pci_dev->bus, pci_dev->dev, pci_dev->func);
+
+	dir_fd = igt_configfs_create_directory(configfs_fd, bus_addr);
+	igt_assert(dir_fd);
+
+	return dir_fd;
+}
+
+igt_main
+{
+	int fd, configfs_fd, dir_fd;
+
+	igt_fixture {
+		fd = drm_open_driver(DRIVER_XE);
+		dev_id = intel_get_drm_devid(fd);
+		configfs_fd = igt_configfs_open("xe");
+		igt_require(configfs_fd != -1);
+		dir_fd = create_device_configfs(configfs_fd, fd);
+	}
+
+	igt_describe("Validate survivability mode");
+	igt_subtest("survivability-mode") {
+		igt_install_exit_handler(restore);
+		test_survivability_mode(dir_fd);
+	}
+
+	igt_fixture {
+		igt_configfs_remove_directory(configfs_fd, bus_addr);
+		close(dir_fd);
+		close(configfs_fd);
+		close(fd);
+	}
+}
diff --git a/tests/meson.build b/tests/meson.build
index 2a63d888f..74684ea35 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -279,6 +279,7 @@ intel_xe_progs = [
 	'xe_create',
 	'xe_compute',
 	'xe_compute_preempt',
+        'xe_configfs',
 	'xe_copy_basic',
 	'xe_dma_buf_sync',
 	'xe_debugfs',
-- 
2.47.1



More information about the igt-dev mailing list