Files
for-gentoo/x11-misc/bumblebee/files/bb_nvidia_modeset-detection_bug699.patch
T

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;
}