nv_mmap_read_unlock(mm);
if (pages_pinned < 0 || (unsigned)pages_pinned < pages_count) {
-diff --git a/kernel/nvidia-uvm/uvm8_tools.c b/kernel/nvidia-uvm/uvm8_tools.c
-index 1dc7c97d..ea521945 100644
---- a/kernel/nvidia-uvm/uvm8_tools.c
-+++ b/kernel/nvidia-uvm/uvm8_tools.c
-@@ -251,13 +251,37 @@ static NV_STATUS map_user_pages(NvU64 user_va, NvU64 size, void **addr, struct p
- }
-
- nv_mmap_read_lock(current->mm);
-+#if defined(NV_GET_USER_PAGES_DROPPED_VMA)
-+ ret = NV_GET_USER_PAGES(user_va, num_pages, 1, 0, *pages);
-+#else
- ret = NV_GET_USER_PAGES(user_va, num_pages, 1, 0, *pages, vmas);
-+#endif
- nv_mmap_read_unlock(current->mm);
- if (ret != num_pages) {
- status = NV_ERR_INVALID_ARGUMENT;
- goto fail;
- }
-
-+#if defined(NV_GET_USER_PAGES_DROPPED_VMA)
-+ struct vm_area_struct *vma;
-+ unsigned long start;
-+
-+ nv_mmap_read_lock(current->mm);
-+ start = user_va;
-+ for (i = 0; i < num_pages; i++) {
-+ vma = find_vma(current->mm, start);
-+ if (!vma) {
-+ nv_mmap_read_unlock(current->mm);
-+ status = NV_ERR_INVALID_ARGUMENT;
-+ goto fail;
-+ }
-+
-+ vmas[i] = vma;
-+ start = (start + PAGE_SIZE) & PAGE_MASK;
-+ }
-+ nv_mmap_read_unlock(current->mm);
-+#endif
-+
- for (i = 0; i < num_pages; i++) {
- if (page_count((*pages)[i]) > MAX_PAGE_COUNT || uvm_file_is_nvidia_uvm(vmas[i]->vm_file)) {
- status = NV_ERR_INVALID_ARGUMENT;
diff --git a/kernel/nvidia/os-mlock.c b/kernel/nvidia/os-mlock.c
index f88daed4..ad5cb9a1 100644
--- a/kernel/nvidia/os-mlock.c
--- /dev/null
+diff --git a/kernel/nvidia-uvm/uvm8_tools.c b/kernel/nvidia-uvm/uvm8_tools.c
+index 1dc7c97d..ea521945 100644
+--- a/kernel/nvidia-uvm/uvm8_tools.c
++++ b/kernel/nvidia-uvm/uvm8_tools.c
+@@ -251,13 +251,37 @@ static NV_STATUS map_user_pages(NvU64 user_va, NvU64 size, void **addr, struct p
+ }
+
+ nv_mmap_read_lock(current->mm);
++#if defined(NV_GET_USER_PAGES_DROPPED_VMA)
++ ret = NV_GET_USER_PAGES(user_va, num_pages, 1, 0, *pages);
++#else
+ ret = NV_GET_USER_PAGES(user_va, num_pages, 1, 0, *pages, vmas);
++#endif
+ nv_mmap_read_unlock(current->mm);
+ if (ret != num_pages) {
+ status = NV_ERR_INVALID_ARGUMENT;
+ goto fail;
+ }
+
++#if defined(NV_GET_USER_PAGES_DROPPED_VMA)
++ struct vm_area_struct *vma;
++ unsigned long start;
++
++ nv_mmap_read_lock(current->mm);
++ start = user_va;
++ for (i = 0; i < num_pages; i++) {
++ vma = find_vma(current->mm, start);
++ if (!vma) {
++ nv_mmap_read_unlock(current->mm);
++ status = NV_ERR_INVALID_ARGUMENT;
++ goto fail;
++ }
++
++ vmas[i] = vma;
++ start = (start + PAGE_SIZE) & PAGE_MASK;
++ }
++ nv_mmap_read_unlock(current->mm);
++#endif
++
+ for (i = 0; i < num_pages; i++) {
+ if (page_count((*pages)[i]) > MAX_PAGE_COUNT || uvm_file_is_nvidia_uvm(vmas[i]->vm_file)) {
+ status = NV_ERR_INVALID_ARGUMENT;
Patch5: kernel-6.4.patch
Patch6: kernel-6.5-garbage-collect-all-references-to-get_user.patch
Patch7: kernel-6.5-handle-get_user_pages-vmas-argument-remova.patch
+Patch8: kernel-6.5-handle-get_user_pages-vmas-argument-removal-x8664.patch
URL: https://www.nvidia.com/en-us/drivers/unix/
BuildRequires: rpm-build >= 4.6
BuildRequires: rpmbuild(macros) >= 1.752
%patch5 -p1
%patch6 -p1
%patch7 -p1
+%ifarch %{x8664}
+%patch8 -p1
+%endif
echo 'EXTRA_CFLAGS += -Wno-pointer-arith -Wno-sign-compare -Wno-unused' >> kernel/Makefile.kbuild
%build