winsys/amdgpu: add guard pages when R600_DEBUG=check_vm is enabled
This should help flush out GPU VM faults. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -294,6 +294,7 @@ static struct amdgpu_winsys_bo *amdgpu_create_bo(struct amdgpu_winsys *ws,
|
||||
uint64_t va = 0;
|
||||
struct amdgpu_winsys_bo *bo;
|
||||
amdgpu_va_handle va_handle;
|
||||
unsigned va_gap_size;
|
||||
int r;
|
||||
|
||||
assert(initial_domain & RADEON_DOMAIN_VRAM_GTT);
|
||||
@@ -327,8 +328,9 @@ static struct amdgpu_winsys_bo *amdgpu_create_bo(struct amdgpu_winsys *ws,
|
||||
goto error_bo_alloc;
|
||||
}
|
||||
|
||||
va_gap_size = ws->check_vm ? MAX2(4 * alignment, 64 * 1024) : 0;
|
||||
r = amdgpu_va_range_alloc(ws->dev, amdgpu_gpu_va_range_general,
|
||||
size, alignment, 0, &va, &va_handle, 0);
|
||||
size + va_gap_size, alignment, 0, &va, &va_handle, 0);
|
||||
if (r)
|
||||
goto error_va_alloc;
|
||||
|
||||
|
||||
@@ -294,6 +294,8 @@ static boolean do_winsys_init(struct amdgpu_winsys *ws, int fd)
|
||||
|
||||
ws->info.gart_page_size = alignment_info.size_remote;
|
||||
|
||||
ws->check_vm = strstr(debug_get_option("R600_DEBUG", ""), "check_vm") != NULL;
|
||||
|
||||
return TRUE;
|
||||
|
||||
fail:
|
||||
@@ -469,7 +471,7 @@ amdgpu_winsys_create(int fd, radeon_screen_create_t screen_create)
|
||||
goto fail;
|
||||
|
||||
/* Create managers. */
|
||||
pb_cache_init(&ws->bo_cache, 500000, 2.0f, 0,
|
||||
pb_cache_init(&ws->bo_cache, 500000, ws->check_vm ? 1.0f : 2.0f, 0,
|
||||
(ws->info.vram_size + ws->info.gart_size) / 8,
|
||||
amdgpu_bo_destroy, amdgpu_bo_can_reclaim);
|
||||
|
||||
|
||||
@@ -66,6 +66,8 @@ struct amdgpu_winsys {
|
||||
uint32_t rev_id;
|
||||
unsigned family;
|
||||
|
||||
bool check_vm;
|
||||
|
||||
/* List of all allocated buffers */
|
||||
pipe_mutex global_bo_list_lock;
|
||||
struct list_head global_bo_list;
|
||||
|
||||
Reference in New Issue
Block a user