[PATCH v2] wpa_debug: prefer tracefs over debugfs

Johannes Berg johannes at sipsolutions.net
Thu Aug 28 05:15:00 PDT 2025


From: Johannes Berg <johannes.berg at intel.com>

With Linux 6.17, having /sys/kernel/debug/tracing/ is
now optional (CONFIG_TRACEFS_AUTOMOUNT_DEPRECATED),
since tracefs has been around for a long time. Prefer
tracefs when finding the trace_marker file.

Note the "!buf[0]" condition which serves to keep the
logic identical to before when tracefs isn't present,
using the first debugfs rather than the last. That is
not likely to matter, but still.

Also mount tracefs in the scripts for running in VMs.

Signed-off-by: Johannes Berg <johannes.berg at intel.com>
---
v2: add the mount
---
 src/utils/wpa_debug.c    | 24 +++++++++++++++++-------
 tests/hwsim/vm/inside.sh |  1 +
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/utils/wpa_debug.c b/src/utils/wpa_debug.c
index 7f3dd185f100..78686e5af1cd 100644
--- a/src/utils/wpa_debug.c
+++ b/src/utils/wpa_debug.c
@@ -130,7 +130,7 @@ int wpa_debug_open_linux_tracing(void)
 	int mounts, trace_fd;
 	char buf[4096] = {};
 	ssize_t buflen;
-	char *line, *tmp1, *path = NULL;
+	char *line, *tmp1;
 
 	mounts = open("/proc/mounts", O_RDONLY);
 	if (mounts < 0) {
@@ -153,21 +153,31 @@ int wpa_debug_open_linux_tracing(void)
 		strtok_r(line, " ", &tmp2);
 		tmp_path = strtok_r(NULL, " ", &tmp2);
 		fstype = strtok_r(NULL, " ", &tmp2);
-		if (fstype && strcmp(fstype, "debugfs") == 0) {
-			path = tmp_path;
+
+		if (!buf[0] && fstype && strcmp(fstype, "debugfs") == 0) {
+			snprintf(buf, sizeof(buf) - 1, "%s/tracing/trace_marker",
+				 tmp_path);
+			/*
+			 * don't break to prefer tracefs, which if present may
+			 * mean debugfs doesn't have tracing/ (depending on the
+			 * kernel version)
+			 */
+		}
+
+		if (fstype && strcmp(fstype, "tracefs") == 0) {
+			snprintf(buf, sizeof(buf) - 1, "%s/trace_marker",
+				 tmp_path);
 			break;
 		}
 
 		line = strtok_r(NULL, "\n", &tmp1);
 	}
 
-	if (path == NULL) {
-		printf("debugfs mountpoint not found\n");
+	if (!buf[0]) {
+		printf("tracefs/debugfs not found\n");
 		return -1;
 	}
 
-	snprintf(buf, sizeof(buf) - 1, "%s/tracing/trace_marker", path);
-
 	trace_fd = open(buf, O_WRONLY);
 	if (trace_fd < 0) {
 		printf("failed to open trace_marker file\n");
diff --git a/tests/hwsim/vm/inside.sh b/tests/hwsim/vm/inside.sh
index 31dfb9d5708c..53d67472cd50 100755
--- a/tests/hwsim/vm/inside.sh
+++ b/tests/hwsim/vm/inside.sh
@@ -14,6 +14,7 @@ mount proc -t proc /proc
 mount sysfs -t sysfs /sys
 # needed for tracing
 mount debugfs -t debugfs /sys/kernel/debug
+mount tracefs -t tracefs /sys/kernel/tracing
 
 mkdir /tmp/wireshark-share
 mount --bind /usr/share/wireshark /tmp/wireshark-share
-- 
2.51.0




More information about the Hostap mailing list