diff options
| author | Michel Dänzer <daenzer@vmware.com> | 2009-07-28 06:30:56 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2009-07-29 01:45:39 -0400 |
| commit | 1ab2e1059916b917af19e4137a4222988bd7a169 (patch) | |
| tree | dda31657727f6b10d27d00fcbdfca7959336d784 /drivers | |
| parent | e46074effd5510e7a8fe34b93828d98a50835da2 (diff) | |
drm/radeon: Fall back to evicting BOs with memcpy if necessary.
Otherwise if there's no GTT space we would fail the eviction, leading to
cascaded failure.
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_ttm.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index 37e1cbcce3a9..f3469b96208c 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c | |||
| @@ -355,23 +355,26 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, | |||
| 355 | if (!rdev->cp.ready) { | 355 | if (!rdev->cp.ready) { |
| 356 | /* use memcpy */ | 356 | /* use memcpy */ |
| 357 | DRM_ERROR("CP is not ready use memcpy.\n"); | 357 | DRM_ERROR("CP is not ready use memcpy.\n"); |
| 358 | return ttm_bo_move_memcpy(bo, evict, no_wait, new_mem); | 358 | goto memcpy; |
| 359 | } | 359 | } |
| 360 | 360 | ||
| 361 | if (old_mem->mem_type == TTM_PL_VRAM && | 361 | if (old_mem->mem_type == TTM_PL_VRAM && |
| 362 | new_mem->mem_type == TTM_PL_SYSTEM) { | 362 | new_mem->mem_type == TTM_PL_SYSTEM) { |
| 363 | return radeon_move_vram_ram(bo, evict, interruptible, | 363 | r = radeon_move_vram_ram(bo, evict, interruptible, |
| 364 | no_wait, new_mem); | 364 | no_wait, new_mem); |
| 365 | } else if (old_mem->mem_type == TTM_PL_SYSTEM && | 365 | } else if (old_mem->mem_type == TTM_PL_SYSTEM && |
| 366 | new_mem->mem_type == TTM_PL_VRAM) { | 366 | new_mem->mem_type == TTM_PL_VRAM) { |
| 367 | return radeon_move_ram_vram(bo, evict, interruptible, | 367 | r = radeon_move_ram_vram(bo, evict, interruptible, |
| 368 | no_wait, new_mem); | 368 | no_wait, new_mem); |
| 369 | } else { | 369 | } else { |
| 370 | r = radeon_move_blit(bo, evict, no_wait, new_mem, old_mem); | 370 | r = radeon_move_blit(bo, evict, no_wait, new_mem, old_mem); |
| 371 | if (unlikely(r)) { | ||
| 372 | return r; | ||
| 373 | } | ||
| 374 | } | 371 | } |
| 372 | |||
| 373 | if (r) { | ||
| 374 | memcpy: | ||
| 375 | r = ttm_bo_move_memcpy(bo, evict, no_wait, new_mem); | ||
| 376 | } | ||
| 377 | |||
| 375 | return r; | 378 | return r; |
| 376 | } | 379 | } |
| 377 | 380 | ||
