diff options
author | Christian König <christian.koenig@amd.com> | 2016-09-22 08:19:50 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-09-28 16:16:25 -0400 |
commit | 85a4b5798f587eab48327aa156fd5c22358e9086 (patch) | |
tree | 378c4fbf96ef8ab239f2425956527798a4ec68e1 | |
parent | 3d5f4d4770a4084ccfc5ed2fff4b2a0017e7d558 (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.c | 6 |
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(>t->adev->gtt_list_lock); | 770 | spin_lock(>t->adev->gtt_list_lock); |
771 | list_del_init(>t->list); | 771 | list_del_init(>t->list); |
772 | spin_unlock(>t->adev->gtt_list_lock); | 772 | spin_unlock(>t->adev->gtt_list_lock); |