diff options
author | Junwei Zhang <Jerry.Zhang@amd.com> | 2018-06-25 01:32:24 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-07-10 15:15:58 -0400 |
commit | bb812f1ea87dd7a4f336242212219268393ed308 (patch) | |
tree | 2bc46b9bf43e7dd0882c867912e15e2d75cad4f8 /drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c | |
parent | 7b7c6c81b3a370b46b0c48f4ab7ac3be83237a12 (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.c | 14 |
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); |