diff options
author | Aaron Plattner <aplattner@nvidia.com> | 2016-10-10 09:49:31 -0700 |
---|---|---|
committer | Aaron Plattner <aplattner@nvidia.com> | 2016-10-10 09:49:31 -0700 |
commit | 9eed8858765a2d34092726c0bac6d56e7d846ea5 (patch) | |
tree | b8d5a9c93fce945f518fb96617e0bd765eff1577 | |
parent | 80df9b732091f317d006a8a8daff347af69c9b6a (diff) |
-rw-r--r-- | kernel.c | 35 | ||||
-rw-r--r-- | nvidia-installer.h | 2 | ||||
-rw-r--r-- | version.mk | 2 |
3 files changed, 25 insertions, 14 deletions
@@ -1422,7 +1422,7 @@ int test_kernel_modules(Options *op, Package *p) ret = ignore_load_error(op, p, p->kernel_modules[i].module_filename, cmd_output, ret); if (ret) { - op->load_error_ignored = TRUE; + op->skip_module_load = TRUE; handle_optional_module_failure(op, p->kernel_modules[i], ui_warn, "load"); @@ -1491,7 +1491,7 @@ static int modprobe_helper(Options *op, const char *module_name, int ret = 0, old_loglevel, loglevel_set; char *cmd, *data; - if (op->load_error_ignored) { + if (op->skip_module_load) { return TRUE; } @@ -1772,7 +1772,7 @@ PrecompiledInfo *find_precompiled_kernel_interface(Options *op, Package *p) /* * get_kernel_name() - get the kernel name: this is either what - * the user specified via the --kernel-name option, or `name -r`. + * the user specified via the --kernel-name option, or `uname -r`. */ char __kernel_name[256]; @@ -1781,18 +1781,29 @@ char *get_kernel_name(Options *op) { struct utsname uname_buf; - if (op->kernel_name) { - return op->kernel_name; + __kernel_name[0] = '\0'; + + if (uname(&uname_buf) == -1) { + ui_warn(op, "Unable to determine the version of the running kernel " + "(%s).", strerror(errno)); } else { - if (uname(&uname_buf) == -1) { - ui_warn(op, "Unable to determine kernel version (%s).", - strerror(errno)); - return NULL; - } else { - strncpy(__kernel_name, uname_buf.release, 256); - return __kernel_name; + strncpy(__kernel_name, uname_buf.release, sizeof(__kernel_name)); + __kernel_name[sizeof(__kernel_name) - 1] = '\0'; + } + + if (op->kernel_name) { + if (strcmp(op->kernel_name, __kernel_name) != 0) { + /* Don't load kernel modules built against a non-running kernel */ + op->skip_module_load = TRUE; } + return op->kernel_name; + } + + if (__kernel_name[0]) { + return __kernel_name; } + + return NULL; } /* get_kernel_name() */ diff --git a/nvidia-installer.h b/nvidia-installer.h index 8409305..c3ecc9b 100644 --- a/nvidia-installer.h +++ b/nvidia-installer.h @@ -155,7 +155,7 @@ typedef struct __options { int compat32_files_packaged; int x_files_packaged; int concurrency_level; - int load_error_ignored; + int skip_module_load; int glvnd_glx_client; NVOptionalBool install_libglx_indirect; @@ -1 +1 @@ -NVIDIA_VERSION = 367.44 +NVIDIA_VERSION = 367.57 |