[packages/xorg-driver-video-nvidia-legacy-390xx] - fix inter-dependencies between kernel patches

baggins baggins at pld-linux.org
Sun Jun 15 02:32:11 CEST 2025


commit 5c03de03f85bac5cd0ad88724caeb28d19b233c8
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Sun Jun 15 02:40:53 2025 +0200

    - fix inter-dependencies between kernel patches

 kernel-6.12.patch                                |   2 +-
 kernel-6.15-uvm.patch => kernel-6.15-x8664.patch |  13 ---
 kernel-6.15.patch                                |  98 ++++----------------
 kernel-6.3-uvm.patch                             |  11 +--
 kernel-6.3.patch                                 | 112 ++++++++++++++++-------
 xorg-driver-video-nvidia-legacy-390xx.spec       |   2 +-
 6 files changed, 102 insertions(+), 136 deletions(-)
---
diff --git a/xorg-driver-video-nvidia-legacy-390xx.spec b/xorg-driver-video-nvidia-legacy-390xx.spec
index 3975cc2..8b5138f 100644
--- a/xorg-driver-video-nvidia-legacy-390xx.spec
+++ b/xorg-driver-video-nvidia-legacy-390xx.spec
@@ -67,7 +67,7 @@ Patch14:	kernel-6.13.patch
 Patch15:	kernel-6.14.patch
 Patch16:	gcc15.patch
 Patch17:	kernel-6.15.patch
-Patch18:	kernel-6.15-uvm.patch
+Patch18:	kernel-6.15-x8664.patch
 Patch19:	kernel-6.15-x86.patch
 URL:		https://www.nvidia.com/en-us/drivers/unix/
 BuildRequires:	rpm-build >= 4.6
diff --git a/kernel-6.12.patch b/kernel-6.12.patch
index 9660b88..c0f854b 100644
--- a/kernel-6.12.patch
+++ b/kernel-6.12.patch
@@ -3,7 +3,7 @@ diff -ur NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/conftest.sh NVIDIA-
 +++ NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/conftest.sh	2024-12-05 23:36:51.609889959 +0100
 @@ -4559,6 +4559,29 @@
  
-             compile_check_conftest "$CODE" "NV_ACPI_VIDEO_BACKLIGHT_USE_NATIVE" "" "functions"
+             compile_check_conftest "$CODE" "NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS" "" "types"
          ;;
 +
 +        drm_output_poll_changed)
diff --git a/kernel-6.15-uvm.patch b/kernel-6.15-x8664.patch
similarity index 73%
rename from kernel-6.15-uvm.patch
rename to kernel-6.15-x8664.patch
index 6d6963b..6b23470 100644
--- a/kernel-6.15-uvm.patch
+++ b/kernel-6.15-x8664.patch
@@ -40,16 +40,3 @@ index baa6986..7324345 100644
  endif
  
  
-diff --git a/kernel/nvidia-uvm/uvm8.c b/kernel/nvidia-uvm/uvm8.c
-index 49e1047..4e84bbd 100644
---- a/kernel/nvidia-uvm/uvm8.c
-+++ b/kernel/nvidia-uvm/uvm8.c
-@@ -658,7 +658,7 @@ static int uvm_mmap(struct file *filp, struct vm_area_struct *vma)
-     // Using VM_DONTCOPY would be nice, but madvise(MADV_DOFORK) can reset that
-     // so we have to handle vm_open on fork anyway. We could disable MADV_DOFORK
-     // with VM_IO, but that causes other mapping issues.
--    vm_flags_set(vma, VM_MIXEDMAP | VM_DONTEXPAND);
-+    nv_vm_flags_set(vma, VM_MIXEDMAP | VM_DONTEXPAND);
- 
-     vma->vm_ops = &uvm_vm_ops_managed;
- 
diff --git a/kernel-6.15.patch b/kernel-6.15.patch
index 7e7ebec..cca9cd9 100644
--- a/kernel-6.15.patch
+++ b/kernel-6.15.patch
@@ -10,12 +10,10 @@ index acd396d..1e955a4 100644
  #include "conftest.h"
  
  #if !defined(NV_VM_FAULT_T_IS_PRESENT)
-@@ -323,4 +323,30 @@ static inline struct rw_semaphore *nv_mmap_get_lock(struct mm_struct *mm)
- #endif
- }
+@@ -323,20 +323,36 @@ static inline struct rw_semaphore *nv_mmap_get_lock(struct mm_struct *mm)
  
-+static inline void nv_vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags)
-+{
+ static inline void nv_vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags)
+ {
 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0)
 +    // Rel. commit "mm: uninline the main body of vma_start_write()" (Suren Baghdasaryan, 13 Feb 2025)
 +    // Since Linux 6.15, vm_flags_set and vm_flags_clear call a GPL-only symbol
@@ -25,48 +23,30 @@ index acd396d..1e955a4 100644
 +    // doesn't lock the VMA, but rather just asserts it is already write-locked.
 +    vm_flags_reset(vma, vma->vm_flags | flags);
 +#else
-+    vm_flags_set(vma, flags);
+ #if defined(NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS)
+     vm_flags_set(vma, flags);
+ #else
+     vma->vm_flags |= flags;
+ #endif
 +#endif
-+}
-+
-+static inline void nv_vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags)
-+{
+ }
+ 
+ static inline void nv_vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags)
+ {
 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0)
 +    // Rel. commit "mm: uninline the main body of vma_start_write()" (Suren Baghdasaryan, 13 Feb 2025)
 +    // See above
 +    vm_flags_reset(vma, vma->vm_flags & ~flags);
 +#else
-+    vm_flags_clear(vma, flags);
-+#endif
-+}
-+
- #endif // __NV_MM_H__
-diff --git a/kernel/common/inc/nv-timer.h b/kernel/common/inc/nv-timer.h
-index 18df6ea..396e121 100644
---- a/kernel/common/inc/nv-timer.h
-+++ b/kernel/common/inc/nv-timer.h
-@@ -25,6 +25,7 @@
- 
- #include <linux/timer.h>
- #include <linux/kernel.h> // For container_of
-+#include <linux/version.h>
- 
- #include "conftest.h"
- 
-@@ -63,4 +64,13 @@ static inline void nv_timer_setup(struct nv_timer *nv_timer,
+ #if defined(NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS)
+     vm_flags_clear(vma, flags);
+ #else
+     vma->vm_flags &= ~flags;
  #endif
++#endif
  }
  
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 2, 0)
-+// Rel. commit "treewide: Switch/rename to timer_delete[_sync]()" (Thomas Gleixner, 5 Apr 2025)
-+// This provides a shim for ancient kernels before timer_delete_sync was introduced
-+static inline int timer_delete_sync(struct timer_list *timer)
-+{
-+    return del_timer_sync(timer);
-+}
-+#endif
-+
- #endif // __NV_TIMER_H__
+ #endif // __NV_MM_H__
 diff --git a/kernel/nvidia-drm/nvidia-drm-connector.c b/kernel/nvidia-drm/nvidia-drm-connector.c
 index 0e9e976..5c62490 100644
 --- a/kernel/nvidia-drm/nvidia-drm-connector.c
@@ -158,48 +138,6 @@ index 59c69a0..157689a 100644
  #if defined(MODULE_LICENSE)
  MODULE_LICENSE("NVIDIA");
  #endif
-diff --git a/kernel/nvidia/nv-mmap.c b/kernel/nvidia/nv-mmap.c
-index da891ff..526391a 100644
---- a/kernel/nvidia/nv-mmap.c
-+++ b/kernel/nvidia/nv-mmap.c
-@@ -447,7 +447,7 @@ int nvidia_mmap_helper(
-             addr  = mmap_start;
-             
-             // Needed for the linux kernel for mapping compound pages
--            vm_flags_set(vma, VM_MIXEDMAP);
-+            nv_vm_flags_set(vma, VM_MIXEDMAP);
- 
-             for (j = 0; j < pages; j++)
-             {
-@@ -471,7 +471,7 @@ int nvidia_mmap_helper(
-             }
-         }
- 
--        vm_flags_set(vma, VM_IO);
-+        nv_vm_flags_set(vma, VM_IO);
-     }
-     else
-     {
-@@ -533,15 +533,15 @@ int nvidia_mmap_helper(
- 
-         NV_PRINT_AT(NV_DBG_MEMINFO, at);
- 
--        vm_flags_set(vma, VM_IO | VM_LOCKED | VM_RESERVED);
--        vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP);
-+        nv_vm_flags_set(vma, VM_IO | VM_LOCKED | VM_RESERVED);
-+        nv_vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP);
-     }
- 
-     if ((prot & NV_PROTECT_WRITEABLE) == 0)
-     {
-         vma->vm_page_prot = NV_PGPROT_READ_ONLY(vma->vm_page_prot);
--        vm_flags_clear(vma, VM_WRITE);
--        vm_flags_clear(vma, VM_MAYWRITE);
-+        nv_vm_flags_clear(vma, VM_WRITE);
-+        nv_vm_flags_clear(vma, VM_MAYWRITE);
-     }
- 
-     vma->vm_ops = &nv_vm_ops;
 diff --git a/kernel/nvidia/nv.c b/kernel/nvidia/nv.c
 index 4fa9c23..cf9ebbf 100644
 --- a/kernel/nvidia/nv.c
diff --git a/kernel-6.3-uvm.patch b/kernel-6.3-uvm.patch
index 6967124..7156c9a 100644
--- a/kernel-6.3-uvm.patch
+++ b/kernel-6.3-uvm.patch
@@ -1,13 +1,12 @@
-diff --git a/kernel/nvidia-uvm/uvm8.c b/kernel/nvidia-uvm/uvm8.c
-index 11cb373..49e1047 100644
---- a/kernel/nvidia-uvm/uvm8.c
-+++ b/kernel/nvidia-uvm/uvm8.c
-@@ -658,7 +658,7 @@ static int uvm_mmap(struct file *filp, struct vm_area_struct *vma)
+diff --color -ur NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/nvidia-uvm/uvm8.c NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/nvidia-uvm/uvm8.c
+--- NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/nvidia-uvm/uvm8.c	2022-10-12 11:30:28.000000000 +0200
++++ NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/nvidia-uvm/uvm8.c	2023-05-27 21:31:28.027398157 +0200
+@@ -658,7 +658,7 @@
      // Using VM_DONTCOPY would be nice, but madvise(MADV_DOFORK) can reset that
      // so we have to handle vm_open on fork anyway. We could disable MADV_DOFORK
      // with VM_IO, but that causes other mapping issues.
 -    vma->vm_flags |= VM_MIXEDMAP | VM_DONTEXPAND;
-+    vm_flags_set(vma, VM_MIXEDMAP | VM_DONTEXPAND);
++    nv_vm_flags_set(vma, VM_MIXEDMAP | VM_DONTEXPAND | VM_DONTCOPY);
  
      vma->vm_ops = &uvm_vm_ops_managed;
  
diff --git a/kernel-6.3.patch b/kernel-6.3.patch
index 57f0893..2a6892b 100644
--- a/kernel-6.3.patch
+++ b/kernel-6.3.patch
@@ -1,67 +1,98 @@
-diff --git a/kernel/common/inc/nv-linux.h b/kernel/common/inc/nv-linux.h
-index 2c4cb7b..f68fcf2 100644
---- a/kernel/common/inc/nv-linux.h
-+++ b/kernel/common/inc/nv-linux.h
-@@ -1996,4 +1996,17 @@ static inline NvU64 nv_expand_nvlink_addr(NvU64 addr47)
- #include <linux/backlight.h>
+diff --color -ur NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/common/inc/nv-mm.h NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/common/inc/nv-mm.h
+--- NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/common/inc/nv-mm.h	2022-10-12 11:30:26.000000000 +0200
++++ NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/common/inc/nv-mm.h	2023-05-27 21:34:28.310317019 +0200
+@@ -282,4 +282,22 @@
  #endif
+ }
  
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)
-+// Rel. commit "mm: introduce vma->vm_flags wrapper functions" (Suren Baghdasaryan, 26 Jan 2023)
-+static inline void vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags)
++static inline void nv_vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags)
 +{
++#if defined(NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS)
++    vm_flags_set(vma, flags);
++#else
 +    vma->vm_flags |= flags;
++#endif
 +}
 +
-+static inline void vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags)
++static inline void nv_vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags)
 +{
++#if defined(NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS)
++    vm_flags_clear(vma, flags);
++#else
 +    vma->vm_flags &= ~flags;
-+}
 +#endif
++}
 +
- #endif  /* _NV_LINUX_H_ */
-diff --git a/kernel/nvidia-drm/nvidia-drm-fb.c b/kernel/nvidia-drm/nvidia-drm-fb.c
-index 725164a..c35e0ee 100644
---- a/kernel/nvidia-drm/nvidia-drm-fb.c
-+++ b/kernel/nvidia-drm/nvidia-drm-fb.c
-@@ -29,6 +29,7 @@
- #include "nvidia-drm-fb.h"
- #include "nvidia-drm-utils.h"
- #include "nvidia-drm-gem.h"
-+#include "nvidia-drm-helper.h"
+ #endif // __NV_MM_H__
+diff --color -ur NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/conftest.sh NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/conftest.sh
+--- NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/conftest.sh	2022-10-11 18:00:50.000000000 +0200
++++ NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/conftest.sh	2023-05-27 21:33:14.502405255 +0200
+@@ -4646,6 +4646,25 @@
  
- #include <drm/drm_crtc_helper.h>
+             compile_check_conftest "$CODE" "NV_ACPI_VIDEO_BACKLIGHT_USE_NATIVE" "" "functions"
+         ;;
++
++        vm_area_struct_has_const_vm_flags)
++            #
++            # Determine if the 'vm_area_struct' structure has
++            # const 'vm_flags'.
++            #
++            # A union of '__vm_flags' and 'const vm_flags' was added 
++            # by commit bc292ab00f6c ("mm: introduce vma->vm_flags
++            # wrapper functions") in mm-stable branch (2023-02-09)
++            # of the akpm/mm maintainer tree.
++            #
++            CODE="
++            #include <linux/mm_types.h>
++            int conftest_vm_area_struct_has_const_vm_flags(void) {
++                return offsetof(struct vm_area_struct, __vm_flags);
++            }"
++
++            compile_check_conftest "$CODE" "NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS" "" "types"
++        ;;
+     esac
+ }
+ 
+diff --color -ur NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/nvidia/nvidia.Kbuild NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/nvidia/nvidia.Kbuild
+--- NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/nvidia/nvidia.Kbuild	2022-10-12 11:29:57.000000000 +0200
++++ NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/nvidia/nvidia.Kbuild	2023-05-27 21:33:16.565772516 +0200
+@@ -168,6 +168,7 @@
+ NV_CONFTEST_FUNCTION_COMPILE_TESTS += unsafe_follow_pfn
+ NV_CONFTEST_FUNCTION_COMPILE_TESTS += acpi_bus_get_device
+ NV_CONFTEST_FUNCTION_COMPILE_TESTS += acpi_video_backlight_use_native
++NV_CONFTEST_FUNCTION_COMPILE_TESTS += vm_area_struct_has_const_vm_flags
  
-diff --git a/kernel/nvidia/nv-mmap.c b/kernel/nvidia/nv-mmap.c
-index 0b0a6f2..da891ff 100644
---- a/kernel/nvidia/nv-mmap.c
-+++ b/kernel/nvidia/nv-mmap.c
-@@ -447,7 +447,7 @@ int nvidia_mmap_helper(
+ NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_gpl_of_node_to_nid
+ NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_swiotlb_map_sg_attrs
+diff --color -ur NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/nvidia/nv-mmap.c NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/nvidia/nv-mmap.c
+--- NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/nvidia/nv-mmap.c	2022-10-12 11:30:26.000000000 +0200
++++ NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/nvidia/nv-mmap.c	2023-05-27 21:33:09.022315399 +0200
+@@ -447,7 +447,7 @@
              addr  = mmap_start;
              
              // Needed for the linux kernel for mapping compound pages
 -            vma->vm_flags |= VM_MIXEDMAP;
-+            vm_flags_set(vma, VM_MIXEDMAP);
++            nv_vm_flags_set(vma, VM_MIXEDMAP | VM_PFNMAP | VM_DONTEXPAND);
  
              for (j = 0; j < pages; j++)
              {
-@@ -471,7 +471,7 @@ int nvidia_mmap_helper(
+@@ -471,7 +471,7 @@
              }
          }
  
 -        vma->vm_flags |= VM_IO;
-+        vm_flags_set(vma, VM_IO);
++        nv_vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND);
      }
      else
      {
-@@ -533,15 +533,15 @@ int nvidia_mmap_helper(
+@@ -533,15 +533,15 @@
  
          NV_PRINT_AT(NV_DBG_MEMINFO, at);
  
 -        vma->vm_flags |= (VM_IO | VM_LOCKED | VM_RESERVED);
 -        vma->vm_flags |= (VM_DONTEXPAND | VM_DONTDUMP);
-+        vm_flags_set(vma, VM_IO | VM_LOCKED | VM_RESERVED);
-+        vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP);
++        nv_vm_flags_set(vma, VM_IO | VM_LOCKED | VM_RESERVED);
++        nv_vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP);
      }
  
      if ((prot & NV_PROTECT_WRITEABLE) == 0)
@@ -69,8 +100,19 @@ index 0b0a6f2..da891ff 100644
          vma->vm_page_prot = NV_PGPROT_READ_ONLY(vma->vm_page_prot);
 -        vma->vm_flags &= ~VM_WRITE;
 -        vma->vm_flags &= ~VM_MAYWRITE;
-+        vm_flags_clear(vma, VM_WRITE);
-+        vm_flags_clear(vma, VM_MAYWRITE);
++        nv_vm_flags_clear(vma, VM_WRITE);
++        nv_vm_flags_clear(vma, VM_MAYWRITE);
      }
  
      vma->vm_ops = &nv_vm_ops;
+diff --color -ur NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/nvidia-drm/nvidia-drm-fb.c NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/nvidia-drm/nvidia-drm-fb.c
+--- NVIDIA-Linux-x86_64-390.157-no-compat32.orig/kernel/nvidia-drm/nvidia-drm-fb.c	2022-10-12 11:30:31.000000000 +0200
++++ NVIDIA-Linux-x86_64-390.157-no-compat32/kernel/nvidia-drm/nvidia-drm-fb.c	2023-05-27 21:29:24.045671732 +0200
+@@ -29,6 +29,7 @@
+ #include "nvidia-drm-fb.h"
+ #include "nvidia-drm-utils.h"
+ #include "nvidia-drm-gem.h"
++#include "nvidia-drm-helper.h"
+ 
+ #include <drm/drm_crtc_helper.h>
+ 
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/xorg-driver-video-nvidia-legacy-390xx.git/commitdiff/5c03de03f85bac5cd0ad88724caeb28d19b233c8



More information about the pld-cvs-commit mailing list