aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
diff options
context:
space:
mode:
authorJunwei Zhang <Jerry.Zhang@amd.com>2018-06-25 01:32:24 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-07-10 15:15:58 -0400
commitbb812f1ea87dd7a4f336242212219268393ed308 (patch)
tree2bc46b9bf43e7dd0882c867912e15e2d75cad4f8 /drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
parent7b7c6c81b3a370b46b0c48f4ab7ac3be83237a12 (diff)
drm/amdgpu: allocate gart memory when it's required (v3)
Instead of calling gart address space on every bo pin, allocates it on demand v2: fix error handling v3: drop the change on amdgpu_amdkfd_gpuvm.c, not needed. Signed-off-by: Junwei Zhang <Jerry.Zhang@amd.com> Acked-by: Felix Kuehling <Felix.Kuehling@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
index cb88d7e8b96b..3079ea8523c5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
@@ -96,11 +96,16 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
96 if (unlikely(r != 0)) 96 if (unlikely(r != 0))
97 goto out_cleanup; 97 goto out_cleanup;
98 r = amdgpu_bo_pin(sobj, sdomain); 98 r = amdgpu_bo_pin(sobj, sdomain);
99 saddr = amdgpu_bo_gpu_offset(sobj); 99 if (r) {
100 amdgpu_bo_unreserve(sobj);
101 goto out_cleanup;
102 }
103 r = amdgpu_ttm_alloc_gart(&sobj->tbo);
100 amdgpu_bo_unreserve(sobj); 104 amdgpu_bo_unreserve(sobj);
101 if (r) { 105 if (r) {
102 goto out_cleanup; 106 goto out_cleanup;
103 } 107 }
108 saddr = amdgpu_bo_gpu_offset(sobj);
104 bp.domain = ddomain; 109 bp.domain = ddomain;
105 r = amdgpu_bo_create(adev, &bp, &dobj); 110 r = amdgpu_bo_create(adev, &bp, &dobj);
106 if (r) { 111 if (r) {
@@ -110,11 +115,16 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size,
110 if (unlikely(r != 0)) 115 if (unlikely(r != 0))
111 goto out_cleanup; 116 goto out_cleanup;
112 r = amdgpu_bo_pin(dobj, ddomain); 117 r = amdgpu_bo_pin(dobj, ddomain);
113 daddr = amdgpu_bo_gpu_offset(dobj); 118 if (r) {
119 amdgpu_bo_unreserve(sobj);
120 goto out_cleanup;
121 }
122 r = amdgpu_ttm_alloc_gart(&dobj->tbo);
114 amdgpu_bo_unreserve(dobj); 123 amdgpu_bo_unreserve(dobj);
115 if (r) { 124 if (r) {
116 goto out_cleanup; 125 goto out_cleanup;
117 } 126 }
127 daddr = amdgpu_bo_gpu_offset(dobj);
118 128
119 if (adev->mman.buffer_funcs) { 129 if (adev->mman.buffer_funcs) {
120 time = amdgpu_benchmark_do_move(adev, size, saddr, daddr, n); 130 time = amdgpu_benchmark_do_move(adev, size, saddr, daddr, n);