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>
(cherry picked from commit d9c3bbb08c)
This commit is contained in:
Karol Herbst 2025-08-18 15:16:12 +02:00 committed by Eric Engestrom
parent ca5259ec32
commit 7eab15d9c8
3 changed files with 6 additions and 9 deletions

View file

@ -1754,7 +1754,7 @@
"description": "aux/trace: move fence_server calls outside the locked area",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null

View file

@ -1659,13 +1659,13 @@ 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);
trace_dump_call_begin("pipe_context", "fence_server_sync");
trace_dump_arg(ptr, pipe);
trace_dump_arg(ptr, fence);
pipe->fence_server_sync(pipe, fence);
trace_dump_call_end();
}
@ -1677,13 +1677,13 @@ 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);
trace_dump_call_begin("pipe_context", "fence_server_signal");
trace_dump_arg(ptr, pipe);
trace_dump_arg(ptr, fence);
pipe->fence_server_signal(pipe, fence);
trace_dump_call_end();
}

View file

@ -949,15 +949,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();