[igt-dev] [PATCH i-g-t 1/2] lib: Add silent __igt_i915_driver_unload

Anshuman Gupta anshuman.gupta at intel.com
Mon Oct 25 09:23:04 UTC 2021


Add silent __igt_i915_driver_unload(), which will not
print any warning in case of passed argument is NULL.

Cc: Chris Wilson <chris.p.wilson at intel.com>
Signed-off-by: Anshuman Gupta <anshuman.gupta at intel.com>
---
 lib/igt_kmod.c | 86 ++++++++++++++++++++++++++++++--------------------
 lib/igt_kmod.h |  1 +
 2 files changed, 52 insertions(+), 35 deletions(-)

diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index 10e983844..ce9bfc07a 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -369,56 +369,72 @@ igt_i915_driver_load(const char *opts)
 	return IGT_EXIT_SUCCESS;
 }
 
-/**
- * igt_i915_driver_unload:
- *
- * Unloads the i915 driver and its dependencies.
- *
- */
-int
-igt_i915_driver_unload(void)
+int __igt_i915_driver_unload(const char **whom)
 {
+	const char *sound[] = {
+		"snd_hda_intel",
+		"snd_hdmi_lpe_audio",
+		NULL,
+	};
+
+	const char *aux[] = {
+		/* gen5: ips uses symbol_get() so only a soft module dependency */
+		"intel_ips",
+		NULL,
+	};
+
 	/* unbind vt */
 	bind_fbcon(false);
 
-	if (igt_kmod_is_loaded("snd_hda_intel")) {
-		igt_terminate_process(SIGTERM, "alsactl");
-
-		/* unbind snd_hda_intel */
-		kick_snd_hda_intel();
-
-		if (igt_kmod_unload("snd_hda_intel", 0)) {
-			igt_warn("Could not unload snd_hda_intel\n");
-			igt_kmod_list_loaded();
-			igt_lsof("/dev/snd");
-			return IGT_EXIT_FAILURE;
+	for (const char **m = sound; *m; m++) {
+		if (igt_kmod_is_loaded(*m)) {
+			igt_terminate_process(SIGTERM, "alsactl");
+			kick_snd_hda_intel();
+			if (igt_kmod_unload(*m, 0)) {
+				if (whom)
+					*whom = *m;
+				return IGT_EXIT_FAILURE;
+			}
 		}
 	}
 
-	if (igt_kmod_is_loaded("snd_hdmi_lpe_audio")) {
-		igt_terminate_process(SIGTERM, "alsactl");
-
-		if (igt_kmod_unload("snd_hdmi_lpe_audio", 0)) {
-			igt_warn("Could not unload snd_hdmi_lpe_audio\n");
-			igt_kmod_list_loaded();
-			igt_lsof("/dev/snd");
-			return IGT_EXIT_FAILURE;
-		}
+	for (const char **m = aux; *m; m++) {
+		if (igt_kmod_is_loaded(*m))
+			igt_kmod_unload(*m, 0);
 	}
 
-	/* gen5: ips uses symbol_get() so only a soft module dependency */
-	if (igt_kmod_is_loaded("intel_ips"))
-		igt_kmod_unload("intel_ips", 0);
-
 	if (igt_kmod_is_loaded("i915")) {
 		if (igt_kmod_unload("i915", 0)) {
-			igt_warn("Could not unload i915\n");
-			igt_kmod_list_loaded();
-			igt_lsof("/dev/dri");
+			if (whom)
+				*whom = "i915";
 			return IGT_EXIT_SKIP;
 		}
 	}
 
+	return IGT_EXIT_SUCCESS;
+}
+
+/**
+ * igt_i915_driver_unload:
+ *
+ * Unloads the i915 driver and its dependencies.
+ *
+ */
+int
+igt_i915_driver_unload(void)
+{
+	const char *whom;
+	int ret;
+
+	ret = __igt_i915_driver_unload(&whom);
+	if (ret) {
+		igt_warn("Could not unload %s\n", whom);
+		igt_kmod_list_loaded();
+		igt_lsof("/dev/dri");
+		igt_lsof("/dev/snd");
+		return ret;
+	}
+
 	if (igt_kmod_is_loaded("intel-gtt"))
 		igt_kmod_unload("intel-gtt", 0);
 
diff --git a/lib/igt_kmod.h b/lib/igt_kmod.h
index 04c87516f..0898122b3 100644
--- a/lib/igt_kmod.h
+++ b/lib/igt_kmod.h
@@ -38,6 +38,7 @@ int igt_kmod_unload(const char *mod_name, unsigned int flags);
 
 int igt_i915_driver_load(const char *opts);
 int igt_i915_driver_unload(void);
+int __igt_i915_driver_unload(const char **whom);
 
 int igt_amdgpu_driver_load(const char *opts);
 int igt_amdgpu_driver_unload(void);
-- 
2.26.2



More information about the igt-dev mailing list