Add 6.1-6-7-8-gpl patch - 2f6779c64c

Fixes compiling prop nvidia modules on 6.1.76, 6.6.15, 6.7.3 and 6.8rc1
pull/214/head
Tk-Glitch 3 months ago
parent a4f4d432c9
commit a779aea699

@ -303,7 +303,7 @@ fi
pkgname=("${_pkgname_array[@]}")
pkgver=$_driver_version
pkgrel=252
pkgrel=253
arch=('x86_64')
url="http://www.nvidia.com/"
license=('custom:NVIDIA')
@ -374,6 +374,7 @@ source=($_source_name
'legacy-kernel-6.5.diff'
'kernel-6.5.patch'
'legacy-kernel-6.6.diff'
'6.1-6-7-8-gpl.diff'
)
msg2 "Selected driver integrity check behavior (md5sum or SKIP): $_md5sum" # If the driver is "known", return md5sum. If it isn't, return SKIP
@ -423,7 +424,8 @@ md5sums=("$_md5sum"
'4f855bb0e0b84e8e5d072c687256767a'
'50d3eac54d14d44d70df92770a3a9abf'
'b81cac7573842ebd7af30fdf851c63f9'
'd11cb3bd76ab61a0f086aea9a0c53087')
'd11cb3bd76ab61a0f086aea9a0c53087'
'f7f95287eb18be63bfad0427f13b6d43')
if [ "$_open_source_modules" = "true" ]; then
if [[ "$_srcbase" == "NVIDIA-kernel-module-source" ]]; then
@ -844,6 +846,7 @@ DEST_MODULE_LOCATION[3]="/kernel/drivers/video"' dkms.conf
cd ..
fi
fi
# 6.5
if (( $(vercmp "$_kernel" "6.5") >= 0 )); then
_kernel65="1"
@ -855,14 +858,22 @@ DEST_MODULE_LOCATION[3]="/kernel/drivers/video"' dkms.conf
cd ..
fi
fi
# 6.6
if (( $(vercmp "$_kernel" "6.6") >= 0 )); then
_kernel66="1"
_whitelist66=()
if [[ $pkgver = 470.199* ]]; then
cd ..
fi
fi
# 6.1-6-7-8 GPL
if (( $(vercmp "$_kernel" "6.1") >= 0 )) || (( $(vercmp "$_kernel" "6.6") >= 0 )) || (( $(vercmp "$_kernel" "6.7") >= 0 )) || (( $(vercmp "$_kernel" "6.8") >= 0 )); then
if [[ $pkgver = 470.* ]] || [[ $pkgver = 535.* ]] || [[ $pkgver = 545.* ]] || [[ $pkgver = 550.* ]]; then
cd "$srcdir"/"$_pkg"/kernel-$_kernel
msg2 "Applying legacy-kernel-6.6.patch for $_kernel..."
patch -Np2 -i "$srcdir"/legacy-kernel-6.6.diff
msg2 "Applying 6.1-6-7-8-gpl.diff for $_kernel..."
patch -Np2 -i "$srcdir"/6.1-6-7-8-gpl.diff
cd ..
fi
fi
@ -1343,6 +1354,7 @@ DEST_MODULE_LOCATION[3]="/kernel/drivers/video"' dkms.conf
patch -Np1 -i "$srcdir"/legacy-kernel-6.4.diff
fi
fi
# 6.5
if [ "$_kernel65" = "1" ]; then
patchy=0
@ -1360,6 +1372,7 @@ DEST_MODULE_LOCATION[3]="/kernel/drivers/video"' dkms.conf
patch -Np1 -i "$srcdir"/legacy-kernel-6.5.diff
fi
fi
# 6.6
if [ "$_kernel66" = "1" ]; then
patchy=0
@ -1374,6 +1387,16 @@ DEST_MODULE_LOCATION[3]="/kernel/drivers/video"' dkms.conf
patch -Np1 -i "$srcdir"/legacy-kernel-6.6.diff
fi
fi
# 6.1-6-7-8 GPL
if (( $(vercmp "$_kernel" "6.1") >= 0 )) || (( $(vercmp "$_kernel" "6.6") >= 0 )) || (( $(vercmp "$_kernel" "6.7") >= 0 )) || (( $(vercmp "$_kernel" "6.8") >= 0 )); then
if [[ $pkgver = 470.* ]] || [[ $pkgver = 535.* ]] || [[ $pkgver = 545.* ]] || [[ $pkgver = 550.* ]]; then
msg2 "Applying 6.1-6-7-8-gpl.diff for dkms..."
patch -Np1 -i "$srcdir"/6.1-6-7-8-gpl.diff
cd ..
fi
fi
# Legacy quirks
if [ "$_oldstuff" = "1" ]; then
msg2 "Applying 01-ipmi-vm.diff for dkms..."

@ -0,0 +1,62 @@
linux-6.1.76, 6.6.15, and 6.7.3 have modified the non-ARCH-specific
pfn_valid() to use __rcu_read_lock/unlock[1] that is marked GPL and
cannot be used here[2][3][4] unless use the open source variant.
As a workaround, reuse the old implementation until NVIDIA makes
a fixed release (due to no longer be using pfn_valid[5], likely
with its own implementation similarly to this patch).
Safe to use with kernel >=5.15 or so but older ones had a different
pfn_valid implementation. However 5.15 and older branches are
"currently" not affected, so simply limit to >=6.1.76.
[1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/include/linux/mmzone.h?h=v6.7.3&id=3a01daace71b521563c38bbbf874e14c3e58adb7
[2] https://bugs.gentoo.org/923456
[3] https://forums.developer.nvidia.com/t/280908
[4] https://github.com/NVIDIA/open-gpu-kernel-modules/issues/594
[5] https://github.com/NVIDIA/open-gpu-kernel-modules/issues/594#issuecomment-1916197641
--- a/kernel-dkms/common/inc/nv-linux.h
+++ b/kernel-dkms/common/inc/nv-linux.h
@@ -1990,2 +1990,23 @@
+#if defined(CONFIG_HAVE_ARCH_PFN_VALID) || LINUX_VERSION_CODE < KERNEL_VERSION(6,1,76)
+# define nv_pfn_valid pfn_valid
+#else
+/* pre-6.1.76 kernel pfn_valid version without GPL rcu_read_lock/unlock() */
+static inline int nv_pfn_valid(unsigned long pfn)
+{
+ struct mem_section *ms;
+
+ if (PHYS_PFN(PFN_PHYS(pfn)) != pfn)
+ return 0;
+
+ if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS)
+ return 0;
+
+ ms = __pfn_to_section(pfn);
+ if (!valid_section(ms))
+ return 0;
+
+ return early_section(ms) || pfn_section_valid(ms, pfn);
+}
+#endif
#endif /* _NV_LINUX_H_ */
--- a/kernel-dkms/nvidia/nv-mmap.c
+++ b/kernel-dkms/nvidia/nv-mmap.c
@@ -576,3 +576,3 @@
if (!IS_REG_OFFSET(nv, access_start, access_len) &&
- (pfn_valid(PFN_DOWN(mmap_start))))
+ (nv_pfn_valid(PFN_DOWN(mmap_start))))
{
--- a/kernel-dkms/nvidia/os-mlock.c
+++ b/kernel-dkms/nvidia/os-mlock.c
@@ -102,3 +102,3 @@
if ((nv_follow_pfn(vma, (start + (i * PAGE_SIZE)), &pfn) < 0) ||
- (!pfn_valid(pfn)))
+ (!nv_pfn_valid(pfn)))
{
@@ -176,3 +176,3 @@
- if (pfn_valid(pfn))
+ if (nv_pfn_valid(pfn))
{
Loading…
Cancel
Save