diff options
author | Christian König <christian.koenig@amd.com> | 2016-09-12 10:06:18 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-09-14 15:10:45 -0400 |
commit | 08291c5c2ea76af86b6a3d8ef78c60f3ef8a8413 (patch) | |
tree | 2b7231543d060b4a20638345adf5eb06c3f7d223 /drivers/gpu/drm/amd/amdgpu | |
parent | 78ab0a38bfe0e02db6e619185dd4337fc97e3ffe (diff) |
drm/amdgpu: use explicit GTT limit for evictions
This way the address space gets allocated immediately.
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>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index 8aa3fe6c270c..3daf85897d7c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | |||
@@ -201,6 +201,7 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo, | |||
201 | .lpfn = 0, | 201 | .lpfn = 0, |
202 | .flags = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM | 202 | .flags = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM |
203 | }; | 203 | }; |
204 | unsigned i; | ||
204 | 205 | ||
205 | if (!amdgpu_ttm_bo_is_amdgpu_bo(bo)) { | 206 | if (!amdgpu_ttm_bo_is_amdgpu_bo(bo)) { |
206 | placement->placement = &placements; | 207 | placement->placement = &placements; |
@@ -212,10 +213,25 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo, | |||
212 | rbo = container_of(bo, struct amdgpu_bo, tbo); | 213 | rbo = container_of(bo, struct amdgpu_bo, tbo); |
213 | switch (bo->mem.mem_type) { | 214 | switch (bo->mem.mem_type) { |
214 | case TTM_PL_VRAM: | 215 | case TTM_PL_VRAM: |
215 | if (rbo->adev->mman.buffer_funcs_ring->ready == false) | 216 | if (rbo->adev->mman.buffer_funcs_ring->ready == false) { |
216 | amdgpu_ttm_placement_from_domain(rbo, AMDGPU_GEM_DOMAIN_CPU); | 217 | amdgpu_ttm_placement_from_domain(rbo, AMDGPU_GEM_DOMAIN_CPU); |
217 | else | 218 | } else { |
218 | amdgpu_ttm_placement_from_domain(rbo, AMDGPU_GEM_DOMAIN_GTT); | 219 | amdgpu_ttm_placement_from_domain(rbo, AMDGPU_GEM_DOMAIN_GTT); |
220 | for (i = 0; i < rbo->placement.num_placement; ++i) { | ||
221 | if (!(rbo->placements[i].flags & | ||
222 | TTM_PL_FLAG_TT)) | ||
223 | continue; | ||
224 | |||
225 | if (rbo->placements[i].lpfn) | ||
226 | continue; | ||
227 | |||
228 | /* set an upper limit to force directly | ||
229 | * allocating address space for the BO. | ||
230 | */ | ||
231 | rbo->placements[i].lpfn = | ||
232 | rbo->adev->mc.gtt_size >> PAGE_SHIFT; | ||
233 | } | ||
234 | } | ||
219 | break; | 235 | break; |
220 | case TTM_PL_TT: | 236 | case TTM_PL_TT: |
221 | default: | 237 | default: |