76 lines
2.1 KiB
Diff
76 lines
2.1 KiB
Diff
c6406352fcab2a8b94ba10676f28f9fe9132cbbf Dirty fix for issue #699
|
|
diff --git a/src/module.c b/src/module.c
|
|
index f7b99fa..b5a4d79 100644
|
|
--- a/src/module.c
|
|
+++ b/src/module.c
|
|
@@ -92,16 +92,38 @@ int module_load(char *module_name, char *driver) {
|
|
* @return 1 if the driver is succesfully unloaded, 0 otherwise
|
|
*/
|
|
int module_unload(char *driver) {
|
|
- if (module_is_loaded(driver) == 1) {
|
|
+
|
|
+ if (module_is_loaded("nvidia_uvm") == 1) {
|
|
+ int retries = 30;
|
|
+ bb_log(LOG_INFO, "Unloading nvidia_uvm driver\n");
|
|
+ char *mod_argv[] = {
|
|
+ "modprobe",
|
|
+ "-r",
|
|
+ "nvidia_uvm",
|
|
+ "nvidia_modeset",
|
|
+ NULL
|
|
+ };
|
|
+ bb_run_fork_wait(mod_argv, 10);
|
|
+ while (retries-- > 0 && module_is_loaded("nvidia_uvm") == 1) {
|
|
+ usleep(100000);
|
|
+ }
|
|
+ if (module_is_loaded(driver) == 1) {
|
|
+ bb_log(LOG_ERR, "Unloading %s driver timed out.\n", driver);
|
|
+ return 0;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ else if (module_is_loaded("nvidia_modeset") == 1) {
|
|
int retries = 30;
|
|
- bb_log(LOG_INFO, "Unloading %s driver\n", driver);
|
|
+ bb_log(LOG_INFO, "Unloading nvidia_modeset driver\n");
|
|
char *mod_argv[] = {
|
|
- "rmmod",
|
|
- driver,
|
|
+ "modprobe",
|
|
+ "-r",
|
|
+ "nvidia_modeset",
|
|
NULL
|
|
};
|
|
bb_run_fork_wait(mod_argv, 10);
|
|
- while (retries-- > 0 && module_is_loaded(driver) == 1) {
|
|
+ while (retries-- > 0 && module_is_loaded("nvidia_modeset") == 1) {
|
|
usleep(100000);
|
|
}
|
|
if (module_is_loaded(driver) == 1) {
|
|
@@ -109,6 +131,25 @@ int module_unload(char *driver) {
|
|
return 0;
|
|
}
|
|
}
|
|
+
|
|
+ else if (module_is_loaded(driver) == 1) {
|
|
+ int retries = 30;
|
|
+ bb_log(LOG_INFO, "Unloading %s driver\n", driver);
|
|
+ char *mod_argv[] = {
|
|
+ "modprobe",
|
|
+ "-r",
|
|
+ driver,
|
|
+ NULL
|
|
+ };
|
|
+ bb_run_fork_wait(mod_argv, 10);
|
|
+ while (retries-- > 0 && module_is_loaded(driver) == 1) {
|
|
+ usleep(100000);
|
|
+ }
|
|
+ if (module_is_loaded(driver) == 1) {
|
|
+ bb_log(LOG_ERR, "Unloading %s driver timed out.\n", driver);
|
|
+ return 0;
|
|
+ }
|
|
+ }
|
|
return 1;
|
|
}
|
|
|