aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLenard Spencer <lenardrspencer@gmail.com>2025-05-27 13:22:27 +0700
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2025-05-27 13:39:17 +0700
commitd77255a22cee53d760a39389f05f87c54b09dc2d (patch)
tree906327332112ca79a73f5b1a2b680cb1feb797ac
parent30a597d099fef6205425a8274250d5b7277c707e (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.patch104
-rw-r--r--system/nvidia-kernel/nvidia-kernel.SlackBuild5
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.