[PATCH i-g-t 1/2] lib/igt_kmod: Allow igt_kmod_unbind() on a specific device
Francois Dugast
francois.dugast at intel.com
Fri Mar 14 09:55:04 UTC 2025
It can be that multiple devices are bound but we want to unbind only
one of them. Add an optional parameter so specificy which device.
Cc: Satyanarayana K V P <satyanarayana.k.v.p at intel.com>
Cc: Lucas De Marchi <lucas.demarchi at intel.com>
Signed-off-by: Francois Dugast <francois.dugast at intel.com>
---
lib/igt_kmod.c | 15 ++++++++++-----
lib/igt_kmod.h | 2 +-
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
index 524c1a632..f00f7dd15 100644
--- a/lib/igt_kmod.c
+++ b/lib/igt_kmod.c
@@ -633,7 +633,7 @@ int __igt_intel_driver_unload(char **who, const char *driver)
}
if (igt_kmod_is_loaded(driver)) {
- igt_kmod_unbind(driver);
+ igt_kmod_unbind(driver, NULL);
ret = igt_kmod_unload(driver);
if (ret) {
@@ -647,10 +647,14 @@ int __igt_intel_driver_unload(char **who, const char *driver)
return 0;
}
-/*
+/**
+ * igt_kmod_unbind:
+ *
* Unbind driver from devices. Currently supports only PCI bus
+ * @mod_name: name of the module to unbind
+ * @pci_device: if provided, unbind only this device, otherwise unbind all devices
*/
-int igt_kmod_unbind(const char *mod_name)
+int igt_kmod_unbind(const char *mod_name, const char *pci_device)
{
char path[PATH_MAX];
struct dirent *de;
@@ -671,7 +675,8 @@ int igt_kmod_unbind(const char *mod_name)
int devfd;
bool ret;
- if (de->d_type != DT_LNK || !isdigit(de->d_name[0]))
+ if (de->d_type != DT_LNK || !isdigit(de->d_name[0]) ||
+ (pci_device && strcmp(pci_device, de->d_name) != 0))
continue;
devfd = openat(dirfd(dir), de->d_name, O_RDONLY | O_CLOEXEC);
@@ -718,7 +723,7 @@ igt_intel_driver_unload(const char *driver)
int igt_xe_driver_unload(void)
{
- igt_kmod_unbind("xe");
+ igt_kmod_unbind("xe", NULL);
igt_kmod_unload("xe");
if (igt_kmod_is_loaded("xe"))
diff --git a/lib/igt_kmod.h b/lib/igt_kmod.h
index 193b95627..170a8df9d 100644
--- a/lib/igt_kmod.h
+++ b/lib/igt_kmod.h
@@ -36,7 +36,7 @@ bool igt_kmod_has_param(const char *mod_name, const char *param);
int igt_kmod_load(const char *mod_name, const char *opts);
int igt_kmod_unload(const char *mod_name);
-int igt_kmod_unbind(const char *mod_name);
+int igt_kmod_unbind(const char *mod_name, const char *pci_device);
int igt_audio_driver_unload(char **whom);
--
2.43.0
More information about the igt-dev
mailing list