]> git.pld-linux.org Git - packages/xorg-driver-video-nvidia-legacy-390xx.git/blame - kernel-6.5-handle-get_user_pages-vmas-argument-removal-x8664.patch
- fix build on ix86
[packages/xorg-driver-video-nvidia-legacy-390xx.git] / kernel-6.5-handle-get_user_pages-vmas-argument-removal-x8664.patch
CommitLineData
9c1ff707
JR
1diff --git a/kernel/nvidia-uvm/uvm8_tools.c b/kernel/nvidia-uvm/uvm8_tools.c
2index 1dc7c97d..ea521945 100644
3--- a/kernel/nvidia-uvm/uvm8_tools.c
4+++ b/kernel/nvidia-uvm/uvm8_tools.c
5@@ -251,13 +251,37 @@ static NV_STATUS map_user_pages(NvU64 user_va, NvU64 size, void **addr, struct p
6 }
7
8 nv_mmap_read_lock(current->mm);
9+#if defined(NV_GET_USER_PAGES_DROPPED_VMA)
10+ ret = NV_GET_USER_PAGES(user_va, num_pages, 1, 0, *pages);
11+#else
12 ret = NV_GET_USER_PAGES(user_va, num_pages, 1, 0, *pages, vmas);
13+#endif
14 nv_mmap_read_unlock(current->mm);
15 if (ret != num_pages) {
16 status = NV_ERR_INVALID_ARGUMENT;
17 goto fail;
18 }
19
20+#if defined(NV_GET_USER_PAGES_DROPPED_VMA)
21+ struct vm_area_struct *vma;
22+ unsigned long start;
23+
24+ nv_mmap_read_lock(current->mm);
25+ start = user_va;
26+ for (i = 0; i < num_pages; i++) {
27+ vma = find_vma(current->mm, start);
28+ if (!vma) {
29+ nv_mmap_read_unlock(current->mm);
30+ status = NV_ERR_INVALID_ARGUMENT;
31+ goto fail;
32+ }
33+
34+ vmas[i] = vma;
35+ start = (start + PAGE_SIZE) & PAGE_MASK;
36+ }
37+ nv_mmap_read_unlock(current->mm);
38+#endif
39+
40 for (i = 0; i < num_pages; i++) {
41 if (page_count((*pages)[i]) > MAX_PAGE_COUNT || uvm_file_is_nvidia_uvm(vmas[i]->vm_file)) {
42 status = NV_ERR_INVALID_ARGUMENT;
This page took 0.104095 seconds and 4 git commands to generate.