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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user