radv/winsys: Report VA mappings in bo_log too.
Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32146>
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
index 93ba410..69a8960 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
@@ -97,6 +97,31 @@
return VK_SUCCESS;
}
+static void
+radv_amdgpu_log_va_op(struct radv_amdgpu_winsys *ws,
+ struct radv_amdgpu_winsys_bo *bo, uint64_t offset, uint64_t size,
+ uint64_t virtual_va)
+{
+ struct radv_amdgpu_winsys_bo_log *bo_log = NULL;
+
+ if (!ws->debug_log_bos)
+ return;
+
+ bo_log = calloc(1, sizeof(*bo_log));
+ if (!bo_log)
+ return;
+
+ bo_log->va = virtual_va;
+ bo_log->size = size;
+ bo_log->timestamp = os_time_get_nano();
+ bo_log->virtual_mapping = 1;
+ bo_log->mapped_va = bo ? (bo->base.va + offset) : 0;
+
+ u_rwlock_wrlock(&ws->log_bo_list_lock);
+ list_addtail(&bo_log->list, &ws->log_bo_list);
+ u_rwlock_wrunlock(&ws->log_bo_list_lock);
+}
+
static VkResult
radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys *_ws, struct radeon_winsys_bo *_parent, uint64_t offset,
uint64_t size, struct radeon_winsys_bo *_bo, uint64_t bo_offset)
@@ -119,8 +144,10 @@
if (bo) {
r =
radv_amdgpu_bo_va_op(ws, bo->bo_handle, bo_offset, size, parent->base.va + offset, 0, 0, AMDGPU_VA_OP_REPLACE);
+ radv_amdgpu_log_va_op(ws, bo, bo_offset, size, parent->base.va + offset);
} else {
r = radv_amdgpu_bo_va_op(ws, 0, 0, size, parent->base.va + offset, 0, AMDGPU_VM_PAGE_PRT, AMDGPU_VA_OP_REPLACE);
+ radv_amdgpu_log_va_op(ws, NULL, 0, size, parent->base.va + offset);
}
if (r) {
@@ -249,7 +276,7 @@
if (!ws->debug_log_bos)
return;
- bo_log = malloc(sizeof(*bo_log));
+ bo_log = calloc(1, sizeof(*bo_log));
if (!bo_log)
return;
@@ -1046,9 +1073,19 @@
u_rwlock_rdlock(&ws->log_bo_list_lock);
LIST_FOR_EACH_ENTRY (bo_log, &ws->log_bo_list, list) {
- fprintf(file, "timestamp=%llu, VA=%.16llx-%.16llx, destroyed=%d, is_virtual=%d\n", (long long)bo_log->timestamp,
- (long long)radv_amdgpu_canonicalize_va(bo_log->va),
- (long long)radv_amdgpu_canonicalize_va(bo_log->va + bo_log->size), bo_log->destroyed, bo_log->is_virtual);
+ if (bo_log->virtual_mapping) {
+ fprintf(file, "timestamp=%llu, VA=%.16llx-%.16llx, mapped_to=%.16llx\n",
+ (long long)bo_log->timestamp,
+ (long long)radv_amdgpu_canonicalize_va(bo_log->va),
+ (long long)radv_amdgpu_canonicalize_va(bo_log->va + bo_log->size),
+ (long long)radv_amdgpu_canonicalize_va(bo_log->mapped_va));
+ } else {
+ fprintf(file, "timestamp=%llu, VA=%.16llx-%.16llx, destroyed=%d, is_virtual=%d\n",
+ (long long)bo_log->timestamp,
+ (long long)radv_amdgpu_canonicalize_va(bo_log->va),
+ (long long)radv_amdgpu_canonicalize_va(bo_log->va + bo_log->size), bo_log->destroyed,
+ bo_log->is_virtual);
+ }
}
u_rwlock_rdunlock(&ws->log_bo_list_lock);
}
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h
index 2130c49..4cde39d 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h
@@ -19,8 +19,10 @@
uint64_t va;
uint64_t size;
uint64_t timestamp; /* CPU timestamp */
+ uint64_t mapped_va;
uint8_t is_virtual : 1;
uint8_t destroyed : 1;
+ uint8_t virtual_mapping : 1;
};
struct radv_amdgpu_map_range {