diff options
author | Lenard Spencer <lenardrspencer@gmail.com> | 2025-05-27 13:22:27 +0700 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2025-05-27 13:39:17 +0700 |
commit | d77255a22cee53d760a39389f05f87c54b09dc2d (patch) | |
tree | 906327332112ca79a73f5b1a2b680cb1feb797ac | |
parent | 30a597d099fef6205425a8274250d5b7277c707e (diff) |
system/nvidia-kernel: Update build.
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
-rw-r--r-- | system/nvidia-kernel/0003-Workaround-nv_vm_flags_-calling-GPL-only-code.patch | 104 | ||||
-rw-r--r-- | system/nvidia-kernel/nvidia-kernel.SlackBuild | 5 |
2 files changed, 107 insertions, 2 deletions
diff --git a/system/nvidia-kernel/0003-Workaround-nv_vm_flags_-calling-GPL-only-code.patch b/system/nvidia-kernel/0003-Workaround-nv_vm_flags_-calling-GPL-only-code.patch new file mode 100644 index 0000000000..dbf4a476b2 --- /dev/null +++ b/system/nvidia-kernel/0003-Workaround-nv_vm_flags_-calling-GPL-only-code.patch @@ -0,0 +1,104 @@ +From 3b4e78d1107a4da33a805b161ade8f718454bd2d Mon Sep 17 00:00:00 2001 +From: Eric Naim <dnaim@cachyos.org> +Date: Tue, 20 May 2025 00:11:56 +0800 +Subject: [PATCH] Workaround nv_vm_flags_* calling GPL-only code + +Since 6.15, the main body of vma_start_write() was uninlined and has +been made GPL-only code. This means that the closed modules can no +longer use vma_start_write() and functions calling it. Fortunately for +us, an NVIDIA driver hacker that tries to maintain the legacy drivers +for newer kernels claims that all VMAs that the driver uses are all +either initially mapped or already locked, this means that using +vm_flags_reset is sufficient to replace vm_flags_* helpers. + +Signed-off-by: Eric Naim <dnaim@cachyos.org> +--- + kernel-open/nvidia-drm/nvidia-drm-gem-user-memory.c | 7 +++++++ + kernel-open/nvidia-drm/nvidia-drm-gem.c | 7 +++++++ + kernel-open/nvidia-uvm/uvm.c | 7 +++++++ + kernel-open/nvidia/nv-mmap.c | 7 +++++++ + 4 files changed, 28 insertions(+) + +diff --git a/nvidia-drm/nvidia-drm-gem-user-memory.c b/nvidia-drm/nvidia-drm-gem-user-memory.c +index 91d56ebb5..6e07bb023 100644 +--- a/nvidia-drm/nvidia-drm-gem-user-memory.c ++++ b/nvidia-drm/nvidia-drm-gem-user-memory.c +@@ -44,6 +44,13 @@ + #include <vm/vm_pageout.h> + #endif + ++#include <linux/version.h> ++ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0) ++#define nv_vm_flags_set(v, f) vm_flags_reset((v), (v)->vm_flags | (f)) ++#define nv_vm_flags_clear(v, f) vm_flags_reset((v), (v)->vm_flags & ~(f)) ++#endif ++ + static inline + void __nv_drm_gem_user_memory_free(struct nv_drm_gem_object *nv_gem) + { +diff --git a/nvidia-drm/nvidia-drm-gem.c b/nvidia-drm/nvidia-drm-gem.c +index 5ac597823..8dff0abe6 100644 +--- a/nvidia-drm/nvidia-drm-gem.c ++++ b/nvidia-drm/nvidia-drm-gem.c +@@ -51,6 +51,13 @@ + + #include "nv-mm.h" + ++#include <linux/version.h> ++ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0) ++#define nv_vm_flags_set(v, f) vm_flags_reset((v), (v)->vm_flags | (f)) ++#define nv_vm_flags_clear(v, f) vm_flags_reset((v), (v)->vm_flags & ~(f)) ++#endif ++ + void nv_drm_gem_free(struct drm_gem_object *gem) + { + struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem); +diff --git a/nvidia-uvm/uvm.c b/nvidia-uvm/uvm.c +index a9c182f82..bfec14dc0 100644 +--- a/nvidia-uvm/uvm.c ++++ b/nvidia-uvm/uvm.c +@@ -21,6 +21,8 @@ + + *******************************************************************************/ + ++#include <linux/version.h> ++ + #include "uvm_api.h" + #include "uvm_global.h" + #include "uvm_gpu_replayable_faults.h" +@@ -40,6 +42,11 @@ + + #define NVIDIA_UVM_DEVICE_NAME "nvidia-uvm" + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0) ++#define nv_vm_flags_set(v, f) vm_flags_reset((v), (v)->vm_flags | (f)) ++#define nv_vm_flags_clear(v, f) vm_flags_reset((v), (v)->vm_flags & ~(f)) ++#endif ++ + static dev_t g_uvm_base_dev; + static struct cdev g_uvm_cdev; + static const struct file_operations uvm_fops; +diff --git a/nvidia/nv-mmap.c b/nvidia/nv-mmap.c +index 33c7d2982..813264c8f 100644 +--- a/nvidia/nv-mmap.c ++++ b/nvidia/nv-mmap.c +@@ -23,10 +23,17 @@ + + #define __NO_VERSION__ + ++#include <linux/version.h> ++ + #include "os-interface.h" + #include "nv-linux.h" + #include "nv_speculation_barrier.h" + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0) ++#define nv_vm_flags_set(v, f) vm_flags_reset((v), (v)->vm_flags | (f)) ++#define nv_vm_flags_clear(v, f) vm_flags_reset((v), (v)->vm_flags & ~(f)) ++#endif ++ + /* + * The 'struct vm_operations' open() callback is called by the Linux + * kernel when the parent VMA is split or copied, close() when the diff --git a/system/nvidia-kernel/nvidia-kernel.SlackBuild b/system/nvidia-kernel/nvidia-kernel.SlackBuild index 12402dba8c..cc84be2b71 100644 --- a/system/nvidia-kernel/nvidia-kernel.SlackBuild +++ b/system/nvidia-kernel/nvidia-kernel.SlackBuild @@ -30,7 +30,7 @@ cd $(dirname $0) ; CWD=$(pwd) PRGNAM=nvidia-kernel VERSION=${VERSION:-570.153.02} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} @@ -93,7 +93,8 @@ find -L . \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; ( cd kernel$OPEN1 || exit 1 - +# Patch for 6.15 kernel as workaround for GPL-only symbols: +patch -p1 < $CWD/0003-Workaround-nv_vm_flags_-calling-GPL-only-code.patch # CC=${CC:-gcc} suppresses an otherwise harmless "compiler mismatch" # message. If you custom-build your kernel with clang, # then pass CC=clang to this script. |