All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Senna Tschudin <peter.senna@linux.intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Peter Senna Tschudin <peter.senna@linux.intel.com>,
	rodrigo.vivi@intel.com, katarzyna.piecielska@intel.com
Subject: [PATCH i-g-t 1/1] tests/intel/xe_debugfs: Add tests to read all debugfs and sysfs files
Date: Tue, 18 Mar 2025 10:53:50 +0100	[thread overview]
Message-ID: <20250318095350.57133-2-peter.senna@linux.intel.com> (raw)
In-Reply-To: <20250318095350.57133-1-peter.senna@linux.intel.com>

The existing tests/intel/debugfs_test.c scans and reads all relevant
files from sysfs and debugfs, but it is specific to i915, leaving a gap
for Xe.

A similar test exists for Xe in tests/intel/xe_debugfs.c, but it has two
gaps compared to the i915 counterpart:
 - It lacks sysfs file testing.
 - It does not attempt to read all debugfs files.

This commit addresses these gaps by adding two new tests to
tests/intel/xe_debugfs.c:
 - sysfs_read_all_entries
 - debugfs_read_all_entries

Both tests use the function read_and_discard_sysfs_entries(), which was
copied from tests/intel/debugfs_test.c.

Cc: rodrigo.vivi@intel.com
Cc: katarzyna.piecielska@intel.com
Signed-off-by: Peter Senna Tschudin <peter.senna@linux.intel.com>
---
 tests/intel/xe_debugfs.c | 88 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 87 insertions(+), 1 deletion(-)

diff --git a/tests/intel/xe_debugfs.c b/tests/intel/xe_debugfs.c
index ec8b0d0b5..0b468c4d4 100644
--- a/tests/intel/xe_debugfs.c
+++ b/tests/intel/xe_debugfs.c
@@ -235,15 +235,90 @@ static int opt_handler(int option, int option_index, void *input)
 	return IGT_OPT_HANDLER_SUCCESS;
 }
 
+/**
+ * SUBTEST: sysfs_read_all_entries
+ * Description: Read all entries from sysfs path.
+ *
+ * SUBTEST: debugfs_read_all_entries
+ * Description: Read all entries from debugfs path.
+ */
+static void read_and_discard_sysfs_entries(int path_fd, int indent)
+{
+	struct dirent *dirent;
+	DIR *dir;
+	char tabs[8];
+	int i;
+
+	igt_assert(indent < sizeof(tabs) - 1);
+
+	for (i = 0; i < indent; i++)
+		tabs[i] = '\t';
+	tabs[i] = '\0';
+
+	dir = fdopendir(path_fd);
+	if (!dir)
+		return;
+
+	while ((dirent = readdir(dir))) {
+		if (!strcmp(dirent->d_name, ".") ||
+		    !strcmp(dirent->d_name, ".."))
+			continue;
+
+		if (dirent->d_type == DT_DIR) {
+			int sub_fd;
+
+			sub_fd = openat(path_fd, dirent->d_name,
+					O_RDONLY | O_DIRECTORY);
+			if (sub_fd < 0)
+				continue;
+
+			igt_debug("%sEntering subdir %s\n", tabs, dirent->d_name);
+			read_and_discard_sysfs_entries(sub_fd, indent + 1);
+			close(sub_fd);
+		} else if (dirent->d_type == DT_REG) {
+			char buf[512];
+			int sub_fd;
+			ssize_t ret;
+
+			igt_kmsg(KMSG_DEBUG "Reading file \"%s\"\n", dirent->d_name);
+			igt_debug("%sReading file \"%s\"\n", tabs, dirent->d_name);
+			igt_set_timeout(5, "reading sysfs entry");
+
+			sub_fd = openat(path_fd, dirent->d_name, O_RDONLY | O_NONBLOCK);
+			if (sub_fd == -1) {
+				igt_debug("%sCould not open file \"%s\" with error: %m\n",
+					  tabs, dirent->d_name);
+				continue;
+			}
+
+			do {
+				ret = read(sub_fd, buf, sizeof(buf));
+			} while (ret == sizeof(buf));
+
+			if (ret == -1)
+				igt_debug("%sCould not read file \"%s\" with error: %m\n",
+					  tabs, dirent->d_name);
+
+			igt_reset_timeout();
+			close(sub_fd);
+		}
+	}
+	closedir(dir);
+}
+
 igt_main_args("", long_options, help_str, opt_handler, NULL)
 {
 	char devnode[PATH_MAX];
 	int fd;
 	int gt;
+	int debugfs;
+	int sysfs;
 
 	igt_fixture {
 		fd = drm_open_driver(DRIVER_XE);
 		__igt_debugfs_dump(fd, "info", IGT_LOG_INFO);
+		debugfs = igt_debugfs_dir(fd);
+		sysfs = igt_sysfs_open(fd);
 	}
 
 	igt_subtest("base") {
@@ -263,6 +338,17 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
 		test_forcewake(fd);
 	}
 
-	igt_fixture
+	igt_describe("Read all entries from sysfs path.");
+	igt_subtest("sysfs_read_all_entries")
+		read_and_discard_sysfs_entries(sysfs, 0);
+
+	igt_describe("Read all entries from debugfs path.");
+	igt_subtest("debugfs_read_all_entries")
+		read_and_discard_sysfs_entries(debugfs, 0);
+
+	igt_fixture {
+		close(sysfs);
+		close(debugfs);
 		drm_close_driver(fd);
+	}
 }
-- 
2.34.1


  reply	other threads:[~2025-03-18  9:54 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-18  9:53 [PATCH i-g-t 0/1] Close sysfs and debugfs test gap between i915 and Xe Peter Senna Tschudin
2025-03-18  9:53 ` Peter Senna Tschudin [this message]
2025-03-18 15:56   ` [PATCH i-g-t 1/1] tests/intel/xe_debugfs: Add tests to read all debugfs and sysfs files Kamil Konieczny
2025-03-18 16:33     ` Peter Senna Tschudin
2025-03-18 21:41     ` Peter Senna Tschudin
2025-03-18 10:18 ` ✓ Xe.CI.BAT: success for Close sysfs and debugfs test gap between i915 and Xe Patchwork
2025-03-18 10:41 ` ✓ i915.CI.BAT: " Patchwork
2025-03-18 11:13 ` ✗ Xe.CI.Full: failure " Patchwork
2025-03-18 12:34   ` Peter Senna Tschudin
2025-03-18 12:16 ` ✗ i915.CI.Full: " Patchwork
2025-03-18 12:36   ` Peter Senna Tschudin
2025-03-19  8:55     ` Ravali, JupallyX

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250318095350.57133-2-peter.senna@linux.intel.com \
    --to=peter.senna@linux.intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=katarzyna.piecielska@intel.com \
    --cc=rodrigo.vivi@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.