diff options
author | Christian König <christian.koenig@amd.com> | 2016-02-08 04:57:22 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-02-10 14:07:52 -0500 |
commit | cc1de6e800c253172334f8774c419dc64401cd2e (patch) | |
tree | 40de20901e3f0d8b867d2682b6ed20d3a5e0f333 /drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | |
parent | f6ff4f67cdf8455d0a4226eeeaf5af17c37d05eb (diff) |
drm/amdgpu: fix issue with overlapping userptrs
Otherwise we could try to evict overlapping userptr BOs in get_user_pages(),
leading to a possible circular locking dependency.
Signed-off-by: Christian König <christian.koenig@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index 55cf05e1c81c..6442a06d6fdc 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | |||
@@ -783,6 +783,25 @@ bool amdgpu_ttm_tt_has_userptr(struct ttm_tt *ttm) | |||
783 | return !!gtt->userptr; | 783 | return !!gtt->userptr; |
784 | } | 784 | } |
785 | 785 | ||
786 | bool amdgpu_ttm_tt_affect_userptr(struct ttm_tt *ttm, unsigned long start, | ||
787 | unsigned long end) | ||
788 | { | ||
789 | struct amdgpu_ttm_tt *gtt = (void *)ttm; | ||
790 | unsigned long size; | ||
791 | |||
792 | if (gtt == NULL) | ||
793 | return false; | ||
794 | |||
795 | if (gtt->ttm.ttm.state != tt_bound || !gtt->userptr) | ||
796 | return false; | ||
797 | |||
798 | size = (unsigned long)gtt->ttm.ttm.num_pages * PAGE_SIZE; | ||
799 | if (gtt->userptr > end || gtt->userptr + size <= start) | ||
800 | return false; | ||
801 | |||
802 | return true; | ||
803 | } | ||
804 | |||
786 | bool amdgpu_ttm_tt_is_readonly(struct ttm_tt *ttm) | 805 | bool amdgpu_ttm_tt_is_readonly(struct ttm_tt *ttm) |
787 | { | 806 | { |
788 | struct amdgpu_ttm_tt *gtt = (void *)ttm; | 807 | struct amdgpu_ttm_tt *gtt = (void *)ttm; |