aux/trace: move fence_server calls outside the locked area

Multiple contexts can use those causing deadlocks if e.g. fence_get_fd
gets called before fence_server_signal on another thread on the same
pipe_fence_handle.

Cc: mesa-stable
Acked-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36819>
This commit is contained in:
Karol Herbst
2025-08-18 15:16:12 +02:00
parent 5fe097a844
commit d9c3bbb08c
2 changed files with 5 additions and 8 deletions
@@ -1626,14 +1626,14 @@ trace_context_fence_server_sync(struct pipe_context *_pipe,
struct trace_context *tr_ctx = trace_context(_pipe);
struct pipe_context *pipe = tr_ctx->pipe;
pipe->fence_server_sync(pipe, fence, timeline_value);
trace_dump_call_begin("pipe_context", "fence_server_sync");
trace_dump_arg(ptr, pipe);
trace_dump_arg(ptr, fence);
trace_dump_arg(uint, timeline_value);
pipe->fence_server_sync(pipe, fence, timeline_value);
trace_dump_call_end();
}
@@ -1646,14 +1646,14 @@ trace_context_fence_server_signal(struct pipe_context *_pipe,
struct trace_context *tr_ctx = trace_context(_pipe);
struct pipe_context *pipe = tr_ctx->pipe;
pipe->fence_server_signal(pipe, fence, timeline_value);
trace_dump_call_begin("pipe_context", "fence_server_signal");
trace_dump_arg(ptr, pipe);
trace_dump_arg(ptr, fence);
trace_dump_arg(uint, timeline_value);
pipe->fence_server_signal(pipe, fence, timeline_value);
trace_dump_call_end();
}
@@ -942,15 +942,12 @@ trace_screen_fence_get_fd(struct pipe_screen *_screen,
{
struct trace_screen *tr_scr = trace_screen(_screen);
struct pipe_screen *screen = tr_scr->screen;
int result;
int result = screen->fence_get_fd(screen, fence);
trace_dump_call_begin("pipe_screen", "fence_get_fd");
trace_dump_arg(ptr, screen);
trace_dump_arg(ptr, fence);
result = screen->fence_get_fd(screen, fence);
trace_dump_ret(int, result);
trace_dump_call_end();