radv: improve failure logging for amdgpu on init

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15771>
This commit is contained in:
Mike Blumenkrantz 2022-04-06 10:49:26 -04:00 committed by Marge Bot
parent 0864b15047
commit 736f3fdadd
3 changed files with 25 additions and 19 deletions

View File

@ -132,7 +132,7 @@ radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys *_ws, struct radeon_wins
} }
if (r) { if (r) {
fprintf(stderr, "amdgpu: Failed to replace a PRT VA region (%d).\n", r); fprintf(stderr, "radv/amdgpu: Failed to replace a PRT VA region (%d).\n", r);
return VK_ERROR_OUT_OF_DEVICE_MEMORY; return VK_ERROR_OUT_OF_DEVICE_MEMORY;
} }
@ -321,7 +321,7 @@ radv_amdgpu_winsys_bo_destroy(struct radeon_winsys *_ws, struct radeon_winsys_bo
/* Clear mappings of this PRT VA region. */ /* Clear mappings of this PRT VA region. */
r = radv_amdgpu_bo_va_op(ws, bo->bo, 0, bo->size, bo->base.va, 0, 0, AMDGPU_VA_OP_CLEAR); r = radv_amdgpu_bo_va_op(ws, bo->bo, 0, bo->size, bo->base.va, 0, 0, AMDGPU_VA_OP_CLEAR);
if (r) { if (r) {
fprintf(stderr, "amdgpu: Failed to clear a PRT VA region (%d).\n", r); fprintf(stderr, "radv/amdgpu: Failed to clear a PRT VA region (%d).\n", r);
} }
free(bo->bos); free(bo->bos);
@ -415,7 +415,7 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws, uint64_t size, unsigned
r = radv_amdgpu_bo_va_op(ws, NULL, 0, size, bo->base.va, 0, AMDGPU_VM_PAGE_PRT, r = radv_amdgpu_bo_va_op(ws, NULL, 0, size, bo->base.va, 0, AMDGPU_VM_PAGE_PRT,
AMDGPU_VA_OP_MAP); AMDGPU_VA_OP_MAP);
if (r) { if (r) {
fprintf(stderr, "amdgpu: Failed to reserve a PRT VA region (%d).\n", r); fprintf(stderr, "radv/amdgpu: Failed to reserve a PRT VA region (%d).\n", r);
result = VK_ERROR_OUT_OF_DEVICE_MEMORY; result = VK_ERROR_OUT_OF_DEVICE_MEMORY;
goto error_ranges_alloc; goto error_ranges_alloc;
} }
@ -480,10 +480,10 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws, uint64_t size, unsigned
r = amdgpu_bo_alloc(ws->dev, &request, &buf_handle); r = amdgpu_bo_alloc(ws->dev, &request, &buf_handle);
if (r) { if (r) {
fprintf(stderr, "amdgpu: Failed to allocate a buffer:\n"); fprintf(stderr, "radv/amdgpu: Failed to allocate a buffer:\n");
fprintf(stderr, "amdgpu: size : %" PRIu64 " bytes\n", size); fprintf(stderr, "radv/amdgpu: size : %" PRIu64 " bytes\n", size);
fprintf(stderr, "amdgpu: alignment : %u bytes\n", alignment); fprintf(stderr, "radv/amdgpu: alignment : %u bytes\n", alignment);
fprintf(stderr, "amdgpu: domains : %u\n", initial_domain); fprintf(stderr, "radv/amdgpu: domains : %u\n", initial_domain);
result = VK_ERROR_OUT_OF_DEVICE_MEMORY; result = VK_ERROR_OUT_OF_DEVICE_MEMORY;
goto error_bo_alloc; goto error_bo_alloc;
} }

View File

@ -386,7 +386,7 @@ radv_amdgpu_cs_grow(struct radeon_cmdbuf *_cs, size_t min_size)
/* Re-compute the number of dwords to allocate. */ /* Re-compute the number of dwords to allocate. */
ib_dws = MAX2(cs->base.cdw + min_size, MIN2(cs->base.max_dw * 2, limit_dws)); ib_dws = MAX2(cs->base.cdw + min_size, MIN2(cs->base.max_dw * 2, limit_dws));
if (ib_dws > limit_dws) { if (ib_dws > limit_dws) {
fprintf(stderr, "amdgpu: Too high number of " fprintf(stderr, "radv/amdgpu: Too high number of "
"dwords to allocate\n"); "dwords to allocate\n");
cs->status = VK_ERROR_OUT_OF_HOST_MEMORY; cs->status = VK_ERROR_OUT_OF_HOST_MEMORY;
return; return;
@ -1552,7 +1552,7 @@ radv_amdgpu_ctx_create(struct radeon_winsys *_ws, enum radeon_ctx_priority prior
result = VK_ERROR_NOT_PERMITTED_EXT; result = VK_ERROR_NOT_PERMITTED_EXT;
goto fail_create; goto fail_create;
} else if (r) { } else if (r) {
fprintf(stderr, "amdgpu: radv_amdgpu_cs_ctx_create2 failed. (%i)\n", r); fprintf(stderr, "radv/amdgpu: radv_amdgpu_cs_ctx_create2 failed. (%i)\n", r);
result = VK_ERROR_OUT_OF_HOST_MEMORY; result = VK_ERROR_OUT_OF_HOST_MEMORY;
goto fail_create; goto fail_create;
} }
@ -1832,10 +1832,10 @@ radv_amdgpu_cs_submit(struct radv_amdgpu_ctx *ctx, struct radv_amdgpu_cs_request
request->handles, &bo_list); request->handles, &bo_list);
if (r) { if (r) {
if (r == -ENOMEM) { if (r == -ENOMEM) {
fprintf(stderr, "amdgpu: Not enough memory for buffer list creation.\n"); fprintf(stderr, "radv/amdgpu: Not enough memory for buffer list creation.\n");
result = VK_ERROR_OUT_OF_HOST_MEMORY; result = VK_ERROR_OUT_OF_HOST_MEMORY;
} else { } else {
fprintf(stderr, "amdgpu: buffer list creation failed (%d).\n", r); fprintf(stderr, "radv/amdgpu: buffer list creation failed (%d).\n", r);
result = VK_ERROR_UNKNOWN; result = VK_ERROR_UNKNOWN;
} }
goto error_out; goto error_out;
@ -1858,10 +1858,10 @@ radv_amdgpu_cs_submit(struct radv_amdgpu_ctx *ctx, struct radv_amdgpu_cs_request
if (r) { if (r) {
if (r == -ENOMEM) { if (r == -ENOMEM) {
fprintf(stderr, "amdgpu: Not enough memory for command submission.\n"); fprintf(stderr, "radv/amdgpu: Not enough memory for command submission.\n");
result = VK_ERROR_OUT_OF_HOST_MEMORY; result = VK_ERROR_OUT_OF_HOST_MEMORY;
} else if (r == -ECANCELED) { } else if (r == -ECANCELED) {
fprintf(stderr, "amdgpu: The CS has been cancelled because the context is lost.\n"); fprintf(stderr, "radv/amdgpu: The CS has been cancelled because the context is lost.\n");
result = VK_ERROR_DEVICE_LOST; result = VK_ERROR_DEVICE_LOST;
} else { } else {
fprintf(stderr, fprintf(stderr,

View File

@ -46,13 +46,13 @@ do_winsys_init(struct radv_amdgpu_winsys *ws, int fd)
return false; return false;
if (ws->info.drm_minor < 23) { if (ws->info.drm_minor < 23) {
fprintf(stderr, "radv: DRM 3.23+ is required (Linux kernel 4.15+)\n"); fprintf(stderr, "radv/amdgpu: DRM 3.23+ is required (Linux kernel 4.15+)\n");
return false; return false;
} }
ws->addrlib = ac_addrlib_create(&ws->info, &ws->info.max_alignment); ws->addrlib = ac_addrlib_create(&ws->info, &ws->info.max_alignment);
if (!ws->addrlib) { if (!ws->addrlib) {
fprintf(stderr, "amdgpu: Cannot create addrlib.\n"); fprintf(stderr, "radv/amdgpu: Cannot create addrlib.\n");
return false; return false;
} }
@ -198,15 +198,19 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags,
struct radv_amdgpu_winsys *ws = NULL; struct radv_amdgpu_winsys *ws = NULL;
r = amdgpu_device_initialize(fd, &drm_major, &drm_minor, &dev); r = amdgpu_device_initialize(fd, &drm_major, &drm_minor, &dev);
if (r) if (r) {
fprintf(stderr, "radv/amdgpu: failed to initialize device.\n");
return NULL; return NULL;
}
/* We have to keep this lock till insertion. */ /* We have to keep this lock till insertion. */
simple_mtx_lock(&winsys_creation_mutex); simple_mtx_lock(&winsys_creation_mutex);
if (!winsyses) if (!winsyses)
winsyses = _mesa_pointer_hash_table_create(NULL); winsyses = _mesa_pointer_hash_table_create(NULL);
if (!winsyses) if (!winsyses) {
fprintf(stderr, "radv/amdgpu: failed to alloc winsys hash table.\n");
goto fail; goto fail;
}
struct hash_entry *entry = _mesa_hash_table_search(winsyses, dev); struct hash_entry *entry = _mesa_hash_table_search(winsyses, dev);
if (entry) { if (entry) {
@ -223,7 +227,7 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags,
((debug_flags & RADV_DEBUG_HANG) && !ws->debug_log_bos) || ((debug_flags & RADV_DEBUG_HANG) && !ws->debug_log_bos) ||
((debug_flags & RADV_DEBUG_NO_IBS) && ws->use_ib_bos) || ((debug_flags & RADV_DEBUG_NO_IBS) && ws->use_ib_bos) ||
(perftest_flags != ws->perftest)) { (perftest_flags != ws->perftest)) {
fprintf(stderr, "amdgpu: Found options that differ from the existing winsys.\n"); fprintf(stderr, "radv/amdgpu: Found options that differ from the existing winsys.\n");
return NULL; return NULL;
} }
@ -253,8 +257,10 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags,
ws->reserve_vmid = reserve_vmid; ws->reserve_vmid = reserve_vmid;
if (ws->reserve_vmid) { if (ws->reserve_vmid) {
r = amdgpu_vm_reserve_vmid(dev, 0); r = amdgpu_vm_reserve_vmid(dev, 0);
if (r) if (r) {
fprintf(stderr, "radv/amdgpu: failed to reserve vmid.\n");
goto vmid_fail; goto vmid_fail;
}
} }
int num_sync_types = 0; int num_sync_types = 0;