]>
Commit | Line | Data |
---|---|---|
9c1ff707 JR |
1 | diff --git a/kernel/nvidia-uvm/uvm8_tools.c b/kernel/nvidia-uvm/uvm8_tools.c |
2 | index 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; |