diff options
author | Jerome Glisse <jglisse@redhat.com> | 2012-11-29 10:35:41 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2012-12-12 14:34:07 -0500 |
commit | d025e9e2b890db679f1246037bf65bd4be512627 (patch) | |
tree | 6296d8181ef4db5403746d5d7dd074809b83e025 /drivers/gpu/drm/radeon/radeon_object.c | |
parent | a636a9829175987e74ddd28a2e87ed17ff7adfdc (diff) |
drm/radeon: do not move bo to different placement at each cs
The bo creation placement is where the bo will be. Instead of trying
to move bo at each command stream let this work to another worker
thread that will use more advance heuristic.
agd5f: remove leftover unused variable
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_object.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_object.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index bfb332e616dc..93d3445477be 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c | |||
@@ -84,7 +84,6 @@ void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain) | |||
84 | rbo->placement.fpfn = 0; | 84 | rbo->placement.fpfn = 0; |
85 | rbo->placement.lpfn = 0; | 85 | rbo->placement.lpfn = 0; |
86 | rbo->placement.placement = rbo->placements; | 86 | rbo->placement.placement = rbo->placements; |
87 | rbo->placement.busy_placement = rbo->placements; | ||
88 | if (domain & RADEON_GEM_DOMAIN_VRAM) | 87 | if (domain & RADEON_GEM_DOMAIN_VRAM) |
89 | rbo->placements[c++] = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | | 88 | rbo->placements[c++] = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | |
90 | TTM_PL_FLAG_VRAM; | 89 | TTM_PL_FLAG_VRAM; |
@@ -105,6 +104,14 @@ void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain) | |||
105 | if (!c) | 104 | if (!c) |
106 | rbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; | 105 | rbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; |
107 | rbo->placement.num_placement = c; | 106 | rbo->placement.num_placement = c; |
107 | |||
108 | c = 0; | ||
109 | rbo->placement.busy_placement = rbo->busy_placements; | ||
110 | if (rbo->rdev->flags & RADEON_IS_AGP) { | ||
111 | rbo->busy_placements[c++] = TTM_PL_FLAG_WC | TTM_PL_FLAG_TT; | ||
112 | } else { | ||
113 | rbo->busy_placements[c++] = TTM_PL_FLAG_CACHED | TTM_PL_FLAG_TT; | ||
114 | } | ||
108 | rbo->placement.num_busy_placement = c; | 115 | rbo->placement.num_busy_placement = c; |
109 | } | 116 | } |
110 | 117 | ||
@@ -350,7 +357,6 @@ int radeon_bo_list_validate(struct list_head *head) | |||
350 | { | 357 | { |
351 | struct radeon_bo_list *lobj; | 358 | struct radeon_bo_list *lobj; |
352 | struct radeon_bo *bo; | 359 | struct radeon_bo *bo; |
353 | u32 domain; | ||
354 | int r; | 360 | int r; |
355 | 361 | ||
356 | r = ttm_eu_reserve_buffers(head); | 362 | r = ttm_eu_reserve_buffers(head); |
@@ -360,17 +366,9 @@ int radeon_bo_list_validate(struct list_head *head) | |||
360 | list_for_each_entry(lobj, head, tv.head) { | 366 | list_for_each_entry(lobj, head, tv.head) { |
361 | bo = lobj->bo; | 367 | bo = lobj->bo; |
362 | if (!bo->pin_count) { | 368 | if (!bo->pin_count) { |
363 | domain = lobj->wdomain ? lobj->wdomain : lobj->rdomain; | ||
364 | |||
365 | retry: | ||
366 | radeon_ttm_placement_from_domain(bo, domain); | ||
367 | r = ttm_bo_validate(&bo->tbo, &bo->placement, | 369 | r = ttm_bo_validate(&bo->tbo, &bo->placement, |
368 | true, false); | 370 | true, false); |
369 | if (unlikely(r)) { | 371 | if (unlikely(r)) { |
370 | if (r != -ERESTARTSYS && domain == RADEON_GEM_DOMAIN_VRAM) { | ||
371 | domain |= RADEON_GEM_DOMAIN_GTT; | ||
372 | goto retry; | ||
373 | } | ||
374 | return r; | 372 | return r; |
375 | } | 373 | } |
376 | } | 374 | } |