Mesa (main): radv: Add submit locking with trace bo.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Feb 10 04:13:11 UTC 2022
Module: Mesa
Branch: main
Commit: 8d5be0a2b3f1dfa212adb50d09f0ff622dcb0457
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8d5be0a2b3f1dfa212adb50d09f0ff622dcb0457
Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date: Sun Jan 30 01:52:55 2022 +0100
radv: Add submit locking with trace bo.
Otherwise cmdbuffers from different queues can override the trace id
from each other, making for a very confusing hang report.
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14868>
---
src/amd/vulkan/radv_device.c | 10 ++++++++++
src/amd/vulkan/radv_private.h | 2 ++
2 files changed, 12 insertions(+)
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index e3c21b98c51..4c16253ac56 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -3038,6 +3038,7 @@ radv_CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCr
device->instance = physical_device->instance;
device->physical_device = physical_device;
+ simple_mtx_init(&device->trace_mtx, mtx_plain);
device->ws = physical_device->ws;
device->vk.create_sync_for_memory = radv_create_sync_for_memory;
@@ -3307,6 +3308,7 @@ fail:
device->ws->ctx_destroy(device->hw_ctx[i]);
}
+ simple_mtx_destroy(&device->trace_mtx);
mtx_destroy(&device->overallocation_mutex);
vk_device_finish(&device->vk);
@@ -3346,6 +3348,7 @@ radv_DestroyDevice(VkDevice _device, const VkAllocationCallbacks *pAllocator)
}
mtx_destroy(&device->overallocation_mutex);
+ simple_mtx_destroy(&device->trace_mtx);
radv_device_finish_meta(device);
@@ -4370,6 +4373,9 @@ radv_queue_submit(struct vk_queue *vqueue, struct vk_queue_submit *submission)
if (result != VK_SUCCESS)
goto fail;
} else {
+ if (queue->device->trace_bo)
+ simple_mtx_lock(&queue->device->trace_mtx);
+
struct radeon_cmdbuf **cs_array =
malloc(sizeof(struct radeon_cmdbuf *) * (submission->command_buffer_count));
@@ -4401,6 +4407,8 @@ radv_queue_submit(struct vk_queue *vqueue, struct vk_queue_submit *submission)
can_patch);
if (result != VK_SUCCESS) {
free(cs_array);
+ if (queue->device->trace_bo)
+ simple_mtx_unlock(&queue->device->trace_mtx);
goto fail;
}
@@ -4414,6 +4422,8 @@ radv_queue_submit(struct vk_queue *vqueue, struct vk_queue_submit *submission)
}
free(cs_array);
+ if (queue->device->trace_bo)
+ simple_mtx_unlock(&queue->device->trace_mtx);
}
fail:
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index ad8e2df6cbd..42b39e36257 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -865,6 +865,8 @@ struct radv_device {
struct radv_shader_prolog *simple_vs_prologs[MAX_VERTEX_ATTRIBS];
struct radv_shader_prolog *instance_rate_vs_prologs[816];
+
+ simple_mtx_t trace_mtx;
};
struct radv_device_memory {
More information about the mesa-commit
mailing list