summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>2021-11-05 20:18:42 +0100
committerEric Engestrom <eric@engestrom.ch>2021-11-10 21:58:07 +0000
commit44b5b835931db52b3f3d8a8dcaeef2b5ece31301 (patch)
tree68914c07b5f188be365d1ccc29a0012a3e491991
parent33272954988fb49f36aa1950704ff05404d59b4a (diff)
downloadmesa-44b5b835931db52b3f3d8a8dcaeef2b5ece31301.tar.gz
radv/sqtt: fix GPU hangs when capturing from the compute queue
S_008D20_FINISH_DONE is a mask of queues and 1 means "wait on the gfx queue until the value is not 0" which can never happen when the driver captures from compute. Instead, use the full mask of possible queues. Cc: 21.3 mesa-stable Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13694> (cherry picked from commit 379fab74d2135abb9ada7edec83da983ba0c4257)
-rw-r--r--.pick_status.json2
-rw-r--r--src/amd/vulkan/layers/radv_sqtt_layer.c9
-rw-r--r--src/amd/vulkan/radv_sqtt.c6
3 files changed, 4 insertions, 13 deletions
diff --git a/.pick_status.json b/.pick_status.json
index 8a7ba4a302b..db4ccb7a9bb 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -76,7 +76,7 @@
"description": "radv/sqtt: fix GPU hangs when capturing from the compute queue",
"nominated": true,
"nomination_type": 0,
- "resolution": 0,
+ "resolution": 1,
"main_sha": null,
"because_sha": null
},
diff --git a/src/amd/vulkan/layers/radv_sqtt_layer.c b/src/amd/vulkan/layers/radv_sqtt_layer.c
index 6a4acda4d17..fb0858bfdae 100644
--- a/src/amd/vulkan/layers/radv_sqtt_layer.c
+++ b/src/amd/vulkan/layers/radv_sqtt_layer.c
@@ -389,15 +389,6 @@ radv_handle_thread_trace(VkQueue _queue)
#endif
if (frame_trigger || file_trigger || resize_trigger) {
- /* FIXME: SQTT on compute hangs. */
- if (queue->vk.queue_family_index == RADV_QUEUE_COMPUTE) {
- fprintf(stderr, "RADV: Capturing a SQTT trace on the compute "
- "queue is currently broken and might hang! "
- "Please, disable presenting on compute if "
- "you can.\n");
- return;
- }
-
radv_begin_thread_trace(queue);
assert(!thread_trace_enabled);
thread_trace_enabled = true;
diff --git a/src/amd/vulkan/radv_sqtt.c b/src/amd/vulkan/radv_sqtt.c
index 71c489910a3..c09cd367e7c 100644
--- a/src/amd/vulkan/radv_sqtt.c
+++ b/src/amd/vulkan/radv_sqtt.c
@@ -271,7 +271,7 @@ radv_emit_thread_trace_stop(struct radv_device *device, struct radeon_cmdbuf *cs
radeon_emit(cs, R_008D20_SQ_THREAD_TRACE_STATUS >> 2); /* register */
radeon_emit(cs, 0);
radeon_emit(cs, 0); /* reference value */
- radeon_emit(cs, S_008D20_FINISH_DONE(1)); /* mask */
+ radeon_emit(cs, ~C_008D20_FINISH_DONE);
radeon_emit(cs, 4); /* poll interval */
/* Disable the thread trace mode. */
@@ -285,7 +285,7 @@ radv_emit_thread_trace_stop(struct radv_device *device, struct radeon_cmdbuf *cs
radeon_emit(cs, R_008D20_SQ_THREAD_TRACE_STATUS >> 2); /* register */
radeon_emit(cs, 0);
radeon_emit(cs, 0); /* reference value */
- radeon_emit(cs, S_008D20_BUSY(1)); /* mask */
+ radeon_emit(cs, ~C_008D20_BUSY); /* mask */
radeon_emit(cs, 4); /* poll interval */
} else {
/* Disable the thread trace mode. */
@@ -298,7 +298,7 @@ radv_emit_thread_trace_stop(struct radv_device *device, struct radeon_cmdbuf *cs
radeon_emit(cs, R_030CE8_SQ_THREAD_TRACE_STATUS >> 2); /* register */
radeon_emit(cs, 0);
radeon_emit(cs, 0); /* reference value */
- radeon_emit(cs, S_030CE8_BUSY(1)); /* mask */
+ radeon_emit(cs, ~C_030CE8_BUSY); /* mask */
radeon_emit(cs, 4); /* poll interval */
}