summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorRyan Neph <ryanneph@google.com>2022-06-14 13:16:58 -0700
committerRyan Neph <ryanneph@google.com>2022-06-17 11:17:06 -0700
commitc7527c5482ea591117194c21d6f858be761e67ca (patch)
treed24af4da562b94cc1d1a1beb20401e374ce3ed87 /server
parentc1518906f91d6e1bd7ad2fe2c5120ad930a92a1c (diff)
server: set custom execname for mesa dri-conf matching
Need this to get app-specific driver configurations with Venus. Without process isolation, Mesa's dri-conf matching still won't be correct, but there are other options that can be explored later when multiple venus contexts share a process. Signed-off-by: Ryan Neph <ryanneph@google.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/835>
Diffstat (limited to 'server')
-rw-r--r--server/render_context.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/server/render_context.c b/server/render_context.c
index 969e4de..4a643d3 100644
--- a/server/render_context.c
+++ b/server/render_context.c
@@ -182,8 +182,7 @@ render_context_dispatch_submit_fence(struct render_context *ctx,
const uint32_t seqno = req->submit_fence.seqno;
assert(ring_idx < (uint32_t)ctx->timeline_count);
- int ret = virgl_renderer_context_create_fence(ctx->ctx_id, flags, ring_idx,
- seqno);
+ int ret = virgl_renderer_context_create_fence(ctx->ctx_id, flags, ring_idx, seqno);
return !ret;
}
@@ -399,21 +398,34 @@ render_context_fini(struct render_context *ctx)
render_socket_fini(&ctx->socket);
}
+static void
+render_context_set_thread_name(uint32_t ctx_id, const char *ctx_name)
+{
+ char thread_name[16];
+ snprintf(thread_name, ARRAY_SIZE(thread_name), "virgl-%d-%s", ctx_id, ctx_name);
+ u_thread_setname(thread_name);
+}
+
static bool
render_context_init_name(struct render_context *ctx,
uint32_t ctx_id,
const char *ctx_name)
{
- const size_t name_size = strlen(ctx_name) + 16;
- ctx->name = malloc(name_size);
+ ctx->name_len = strlen(ctx_name);
+ ctx->name = malloc(ctx->name_len + 1);
if (!ctx->name)
return false;
- ctx->name_len = snprintf(ctx->name, name_size, "virgl-%d-%s", ctx_id, ctx_name);
- if (ctx->name_len >= name_size)
- ctx->name_len = name_size - 1;
+ strcpy(ctx->name, ctx_name);
+
+ render_context_set_thread_name(ctx_id, ctx_name);
- u_thread_setname(ctx->name);
+#ifdef _GNU_SOURCE
+ /* Sets the guest app executable name used by mesa to load app-specific driver
+ * configuration. */
+ program_invocation_name = ctx->name;
+ program_invocation_short_name = ctx->name;
+#endif
return true;
}