summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Plattner <aplattner@nvidia.com>2014-01-13 14:47:12 -0800
committerAaron Plattner <aplattner@nvidia.com>2014-01-13 14:47:12 -0800
commite49143d67bf5c67efb9293455d5d69d068c23e6c (patch)
treee72f88f956a620ea5edfdb3b82dbf6c07cab95b1
parent5063b429c1c26e0a409a86180ffaa4de28668c3a (diff)
331.38331.38
-rw-r--r--backup.c35
-rw-r--r--kernel.c10
-rw-r--r--misc.c9
-rw-r--r--nvidia-installer.c9
-rw-r--r--option_table.h10
-rw-r--r--version.mk2
6 files changed, 54 insertions, 21 deletions
diff --git a/backup.c b/backup.c
index c8b0eff..e199396 100644
--- a/backup.c
+++ b/backup.c
@@ -619,6 +619,21 @@ static int rmdir_recursive(Options *op)
return ret;
}
+
+
+/* unload_nvidia_module() - unload nvidia${suffix}.ko, ignoring failures. */
+
+static void unload_nvidia_module(Options *op, const char *suffix)
+{
+ char *cmd;
+
+ cmd = nvstrcat(op->utils[RMMOD], " ", RMMOD_MODULE_NAME, suffix, NULL);
+ run_command(op, cmd, NULL, FALSE, 0, TRUE);
+ nvfree(cmd);
+}
+
+
+
/*
* do_uninstall() - this function uninstalls a previously installed
* driver, by parsing the BACKUP_LOG file.
@@ -629,7 +644,7 @@ static int do_uninstall(Options *op, const char *version)
BackupLogEntry *e;
BackupInfo *b;
int i, len, ok;
- char *tmpstr, *cmd;
+ char *tmpstr;
float percent;
int removal_failed = FALSE, restore_failed = FALSE;
@@ -823,28 +838,20 @@ static int do_uninstall(Options *op, const char *version)
* might not have existed at all.
*/
- cmd = nvstrcat(op->utils[RMMOD], " ", RMMOD_MODULE_NAME, NULL);
- run_command(op, cmd, NULL, FALSE, 0, TRUE);
- nvfree(cmd);
+ unload_nvidia_module(op, "-uvm");
+
+ unload_nvidia_module(op, "");
for (i = 0; i < NV_MAX_MODULE_INSTANCES; i++) {
char num[5];
memset(num, 0, sizeof(num));
snprintf(num, sizeof(num), "%d", i);
num[sizeof(num) - 1] = '\0';
-
- cmd = nvstrcat(op->utils[RMMOD], " ", RMMOD_MODULE_NAME,
- num, NULL);
- run_command(op, cmd, NULL, FALSE, 0, TRUE);
- nvfree(cmd);
+ unload_nvidia_module(op, num);
}
- cmd = nvstrcat(op->utils[RMMOD], " ", RMMOD_MODULE_NAME,
- "-frontend", NULL);
- run_command(op, cmd, NULL, FALSE, 0, TRUE);
-
- nvfree(cmd);
+ unload_nvidia_module(op, "-frontend");
run_distro_hook(op, "post-uninstall");
diff --git a/kernel.c b/kernel.c
index 2a90b42..ae54df6 100644
--- a/kernel.c
+++ b/kernel.c
@@ -706,7 +706,8 @@ int build_kernel_module(Options *op, Package *p)
if (!ret) {
ui_error(op, "The Unified Memory kernel module failed to build. "
- "To work around this issue, you may attempt to "
+ "This kernel module is required for the proper operation "
+ "of CUDA. If you do not need to use CUDA, you can try to "
"install this driver package again with the "
"'--no-unified-memory' option.");
return FALSE;
@@ -1525,6 +1526,13 @@ int test_kernel_module(Options *op, Package *p)
if (ret != 0) {
ret = ignore_load_error(op, p, p->uvm_kernel_module_filename, data,
ret);
+ if (ret) {
+ ui_warn(op, "The NVIDIA Unified Memory module failed to load, "
+ "and the load failure was ignored. This module is "
+ "required in order for the CUDA driver to function; if "
+ "the load failure cannot be resolved, then this system "
+ "will be unable to run CUDA applications.");
+ }
goto test_exit;
}
}
diff --git a/misc.c b/misc.c
index cc8b48e..b310826 100644
--- a/misc.c
+++ b/misc.c
@@ -1286,7 +1286,14 @@ void should_install_uvm(Options *op, Package *p)
if (op->expert) {
op->install_uvm = ui_yes_no(op, op->install_uvm, "Would you like to "
"install the NVIDIA Unified Memory kernel "
- "module?");
+ "module? You must install this module in "
+ "order to use CUDA.");
+ }
+
+ if (!op->install_uvm) {
+ ui_warn(op, "The NVIDIA Unified Memory kernel module will not be "
+ "installed. As a result, CUDA applications will not be able to "
+ "run with this installation of the NVIDIA driver.");
}
}
diff --git a/nvidia-installer.c b/nvidia-installer.c
index 52caec2..43f5746 100644
--- a/nvidia-installer.c
+++ b/nvidia-installer.c
@@ -419,10 +419,15 @@ static void parse_commandline(int argc, char *argv[], Options *op)
goto fail;
}
op->multiple_kernel_modules = TRUE;
- if (intval > NV_MAX_MODULE_INSTANCES)
+ /* Unified Memory is incompatible with multiple kernel modules */
+ op->install_uvm = FALSE;
+
+ if (intval > NV_MAX_MODULE_INSTANCES) {
op->num_kernel_modules = NV_MAX_MODULE_INSTANCES;
- else
+ }
+ else {
op->num_kernel_modules = intval;
+ }
break;
case NO_UVM_OPTION:
op->install_uvm = FALSE;
diff --git a/option_table.h b/option_table.h
index 49d3556..f1e02a7 100644
--- a/option_table.h
+++ b/option_table.h
@@ -628,10 +628,16 @@ static const NVGetoptOption __options[] = {
{ "multiple-kernel-modules", MULTIPLE_KERNEL_MODULES_OPTION,
NVGETOPT_INTEGER_ARGUMENT, NULL,
"Build and install multiple NVIDIA kernel modules. The maximum number "
- "of NVIDIA kernel modules that may be built is 8." },
+ "of NVIDIA kernel modules that may be built is 8. '--multiple-kernel-"
+ "modules' implies '--no-unified-memory'."},
{ "no-unified-memory", NO_UVM_OPTION, 0, NULL,
- "Do not install the NVIDIA Unified Memory kernel module."},
+ "Do not install the NVIDIA Unified Memory kernel module. This kernel "
+ "module is required for CUDA, and if it is not installed, the CUDA "
+ "driver and CUDA applications will not be able to run. The "
+ "'--no-unified-memory' option should only be used to work around "
+ "failures to build or install the Unified Memory kernel module on "
+ "systems that do not need to run CUDA." },
/* Orphaned options: These options were in the long_options table in
* nvidia-installer.c but not in the help. */
diff --git a/version.mk b/version.mk
index 0d4860a..2bca142 100644
--- a/version.mk
+++ b/version.mk
@@ -1 +1 @@
-NVIDIA_VERSION = 331.20
+NVIDIA_VERSION = 331.38