aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2017-09-03 09:22:06 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-09-12 14:24:00 -0400
commitb72cf4fca2bb786e20864b5e8755105aa9626fb4 (patch)
tree0f3f739d3fdbe0b8c2a7510689f8fdf482da295d /drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
parent862095237c392887819e98018d6dc187d8c78726 (diff)
drm/amdgpu: move taking mmap_sem into get_user_pages v2
This didn't helped as intended, just simplify the code. v2: unlock mmap_sem in the error path as well Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 28e121984332..ea0378c8b049 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -622,6 +622,8 @@ int amdgpu_ttm_tt_get_user_pages(struct ttm_tt *ttm, struct page **pages)
622 if (!(gtt->userflags & AMDGPU_GEM_USERPTR_READONLY)) 622 if (!(gtt->userflags & AMDGPU_GEM_USERPTR_READONLY))
623 flags |= FOLL_WRITE; 623 flags |= FOLL_WRITE;
624 624
625 down_read(&current->mm->mmap_sem);
626
625 if (gtt->userflags & AMDGPU_GEM_USERPTR_ANONONLY) { 627 if (gtt->userflags & AMDGPU_GEM_USERPTR_ANONONLY) {
626 /* check that we only use anonymous memory 628 /* check that we only use anonymous memory
627 to prevent problems with writeback */ 629 to prevent problems with writeback */
@@ -629,8 +631,10 @@ int amdgpu_ttm_tt_get_user_pages(struct ttm_tt *ttm, struct page **pages)
629 struct vm_area_struct *vma; 631 struct vm_area_struct *vma;
630 632
631 vma = find_vma(gtt->usermm, gtt->userptr); 633 vma = find_vma(gtt->usermm, gtt->userptr);
632 if (!vma || vma->vm_file || vma->vm_end < end) 634 if (!vma || vma->vm_file || vma->vm_end < end) {
635 up_read(&current->mm->mmap_sem);
633 return -EPERM; 636 return -EPERM;
637 }
634 } 638 }
635 639
636 do { 640 do {
@@ -657,10 +661,12 @@ int amdgpu_ttm_tt_get_user_pages(struct ttm_tt *ttm, struct page **pages)
657 661
658 } while (pinned < ttm->num_pages); 662 } while (pinned < ttm->num_pages);
659 663
664 up_read(&current->mm->mmap_sem);
660 return 0; 665 return 0;
661 666
662release_pages: 667release_pages:
663 release_pages(pages, pinned, 0); 668 release_pages(pages, pinned, 0);
669 up_read(&current->mm->mmap_sem);
664 return r; 670 return r;
665} 671}
666 672