[igt-dev] [PATCH i-g-t] lib/igt_sysfs: move kick_snd_hda_intel() to igt_kmod.c

Mauro Carvalho Chehab mauro.chehab at linux.intel.com
Thu Oct 26 09:27:24 UTC 2023


From: Mauro Carvalho Chehab <mchehab at kernel.org>

This unbind function is now used only inside igt_kmod, and
should be called only via igt_always_unload_audio_driver(),
which does other required steps to unbind the audio driver.

So, move it to igt_kmod and make it static.

Suggested-by: Andrzej Hajda <andrzej.hajda at intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>

---

v4: place includes in alphabetic order
v3: fix a typo on a message: cand ->can
v2: added some missing includes
---
 lib/igt_kmod.c  | 57 ++++++++++++++++++++++++++++++++++++++++++++++++-
 lib/igt_sysfs.c | 52 --------------------------------------------
 lib/igt_sysfs.h |  1 -
 3 files changed, 56 insertions(+), 54 deletions(-)

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index 4785d724aec8..e967c9bcdce0 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -22,12 +22,15 @@
  */
 
 #include <ctype.h>
-#include <signal.h>
+#include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <pthread.h>
+#include <signal.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
 #include <sys/utsname.h>
 #include <unistd.h>
 
@@ -437,6 +440,58 @@ igt_intel_driver_load(const char *opts, const char *driver)
 	return 0;
 }
 
+/**
+ * kick_snd_hda_intel:
+ *
+ * This function unbinds the snd_hda_intel driver so the module can be
+ * unloaded.
+ *
+ */
+static void kick_snd_hda_intel(void)
+{
+	DIR *dir;
+	struct dirent *snd_hda;
+	int fd; size_t len;
+
+	const char *dpath = "/sys/bus/pci/drivers/snd_hda_intel";
+	const char *path = "/sys/bus/pci/drivers/snd_hda_intel/unbind";
+	const char *devid = "0000:";
+
+	fd = open(path, O_WRONLY);
+	if (fd < 0) {
+		return;
+	}
+
+	dir = opendir(dpath);
+	if (!dir)
+		goto out;
+
+	len = strlen(devid);
+	while ((snd_hda = readdir(dir))) {
+		struct stat st;
+		char fpath[PATH_MAX];
+
+		if (*snd_hda->d_name == '.')
+			continue;
+
+		snprintf(fpath, sizeof(fpath), "%s/%s", dpath, snd_hda->d_name);
+		if (lstat(fpath, &st))
+			continue;
+
+		if (!S_ISLNK(st.st_mode))
+			continue;
+
+		if (!strncmp(devid, snd_hda->d_name, len)) {
+			igt_ignore_warn(write(fd, snd_hda->d_name,
+					strlen(snd_hda->d_name)));
+		}
+	}
+
+	closedir(dir);
+out:
+	close(fd);
+}
+
 static int igt_always_unload_audio_driver(char **who)
 {
 	int ret;
diff --git a/lib/igt_sysfs.c b/lib/igt_sysfs.c
index 83182020b498..567b4f6d5f03 100644
--- a/lib/igt_sysfs.c
+++ b/lib/igt_sysfs.c
@@ -856,58 +856,6 @@ void bind_fbcon(bool enable)
 	bind_con("frame buffer device", enable);
 }
 
-/**
- * kick_snd_hda_intel:
- *
- * This functions unbinds the snd_hda_intel driver so the module cand be
- * unloaded.
- *
- */
-void kick_snd_hda_intel(void)
-{
-	DIR *dir;
-	struct dirent *snd_hda;
-	int fd; size_t len;
-
-	const char *dpath = "/sys/bus/pci/drivers/snd_hda_intel";
-	const char *path = "/sys/bus/pci/drivers/snd_hda_intel/unbind";
-	const char *devid = "0000:";
-
-	fd = open(path, O_WRONLY);
-	if (fd < 0) {
-		return;
-	}
-
-	dir = opendir(dpath);
-	if (!dir)
-		goto out;
-
-	len = strlen(devid);
-	while ((snd_hda = readdir(dir))) {
-		struct stat st;
-		char fpath[PATH_MAX];
-
-		if (*snd_hda->d_name == '.')
-			continue;
-
-		snprintf(fpath, sizeof(fpath), "%s/%s", dpath, snd_hda->d_name);
-		if (lstat(fpath, &st))
-			continue;
-
-		if (!S_ISLNK(st.st_mode))
-			continue;
-
-		if (!strncmp(devid, snd_hda->d_name, len)) {
-			igt_ignore_warn(write(fd, snd_hda->d_name,
-					strlen(snd_hda->d_name)));
-		}
-	}
-
-	closedir(dir);
-out:
-	close(fd);
-}
-
 static int fbcon_cursor_blink_fd = -1;
 static char fbcon_cursor_blink_prev_value[2];
 
diff --git a/lib/igt_sysfs.h b/lib/igt_sysfs.h
index 0087c03b706a..e804cf8e109d 100644
--- a/lib/igt_sysfs.h
+++ b/lib/igt_sysfs.h
@@ -135,7 +135,6 @@ bool __igt_sysfs_set_boolean(int dir, const char *attr, bool value);
 void igt_sysfs_set_boolean(int dir, const char *attr, bool value);
 
 void bind_fbcon(bool enable);
-void kick_snd_hda_intel(void);
 void fbcon_blink_enable(bool enable);
 
 /**
-- 
2.41.0



More information about the igt-dev mailing list