aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2016-09-22 08:19:50 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-09-28 16:16:25 -0400
commit85a4b5798f587eab48327aa156fd5c22358e9086 (patch)
tree378c4fbf96ef8ab239f2425956527798a4ec68e1
parent3d5f4d4770a4084ccfc5ed2fff4b2a0017e7d558 (diff)
drm/amdgpu: free userptrs even if GTT isn't bound
This fixes a memory leak since binding GTT only on demand. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 61a885b5a6a1..c80bdc7194e5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -757,6 +757,9 @@ static int amdgpu_ttm_backend_unbind(struct ttm_tt *ttm)
757{ 757{
758 struct amdgpu_ttm_tt *gtt = (void *)ttm; 758 struct amdgpu_ttm_tt *gtt = (void *)ttm;
759 759
760 if (gtt->userptr)
761 amdgpu_ttm_tt_unpin_userptr(ttm);
762
760 if (!amdgpu_ttm_is_bound(ttm)) 763 if (!amdgpu_ttm_is_bound(ttm))
761 return 0; 764 return 0;
762 765
@@ -764,9 +767,6 @@ static int amdgpu_ttm_backend_unbind(struct ttm_tt *ttm)
764 if (gtt->adev->gart.ready) 767 if (gtt->adev->gart.ready)
765 amdgpu_gart_unbind(gtt->adev, gtt->offset, ttm->num_pages); 768 amdgpu_gart_unbind(gtt->adev, gtt->offset, ttm->num_pages);
766 769
767 if (gtt->userptr)
768 amdgpu_ttm_tt_unpin_userptr(ttm);
769
770 spin_lock(&gtt->adev->gtt_list_lock); 770 spin_lock(&gtt->adev->gtt_list_lock);
771 list_del_init(&gtt->list); 771 list_del_init(&gtt->list);
772 spin_unlock(&gtt->adev->gtt_list_lock); 772 spin_unlock(&gtt->adev->gtt_list_lock);