qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] virtio-gpu-gl: Add 'serverfd' property
@ 2025-04-03 15:51 Jiang XueQian
  2025-05-08 11:06 ` Jiang XueQian
  2025-05-08 12:00 ` Alex Bennée
  0 siblings, 2 replies; 4+ messages in thread
From: Jiang XueQian @ 2025-04-03 15:51 UTC (permalink / raw)
  To: qemu-devel; +Cc: Michael S. Tsirkin, Jiang XueQian

This property passes socket of a externally started virgl_render_server
to virglrenderer, so that it won't try to spawn new process and get
killed by seccomp, allowing virtio-gpu-gl venus and sandbox to enable
at the same time.

Signed-off-by: Jiang XueQian <jiangxueqian@gmail.com>
---
 hw/display/virtio-gpu-gl.c     | 15 +++++++++++++++
 hw/display/virtio-gpu-virgl.c  | 17 +++++++++++++++++
 include/hw/virtio/virtio-gpu.h |  2 ++
 3 files changed, 34 insertions(+)

diff --git a/hw/display/virtio-gpu-gl.c b/hw/display/virtio-gpu-gl.c
index 683fad3bf8..e7c89f7c29 100644
--- a/hw/display/virtio-gpu-gl.c
+++ b/hw/display/virtio-gpu-gl.c
@@ -22,6 +22,7 @@
 #include "hw/virtio/virtio-gpu-bswap.h"
 #include "hw/virtio/virtio-gpu-pixman.h"
 #include "hw/qdev-properties.h"
+#include "monitor/monitor.h"
 
 #include <virglrenderer.h>
 
@@ -143,6 +144,17 @@ static void virtio_gpu_gl_device_realize(DeviceState *qdev, Error **errp)
         return;
     }
 
+#if VIRGL_RENDERER_CALLBACKS_VERSION >= 3
+    if (g->parent_obj.conf.serverfd) {
+        g->parent_obj.conf.serverfd_parsed =
+            monitor_fd_param(monitor_cur(), g->parent_obj.conf.serverfd, errp);
+        if (g->parent_obj.conf.serverfd_parsed < 0) {
+            error_prepend(errp, "unable to parse serverfd: ");
+            return;
+        }
+    }
+#endif
+
     g->parent_obj.conf.flags |= (1 << VIRTIO_GPU_FLAG_VIRGL_ENABLED);
     g->capset_ids = virtio_gpu_virgl_get_capsets(g);
     VIRTIO_GPU_BASE(g)->virtio_config.num_capsets = g->capset_ids->len;
@@ -159,6 +171,9 @@ static const Property virtio_gpu_gl_properties[] = {
                     VIRTIO_GPU_FLAG_STATS_ENABLED, false),
     DEFINE_PROP_BIT("venus", VirtIOGPU, parent_obj.conf.flags,
                     VIRTIO_GPU_FLAG_VENUS_ENABLED, false),
+#if VIRGL_RENDERER_CALLBACKS_VERSION >= 3
+    DEFINE_PROP_STRING("serverfd", VirtIOGPU, parent_obj.conf.serverfd),
+#endif
 };
 
 static void virtio_gpu_gl_device_unrealize(DeviceState *qdev)
diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
index 145a0b3879..420aae3b05 100644
--- a/hw/display/virtio-gpu-virgl.c
+++ b/hw/display/virtio-gpu-virgl.c
@@ -1030,6 +1030,19 @@ static int virgl_make_context_current(void *opaque, int scanout_idx,
                                    qctx);
 }
 
+#if VIRGL_RENDERER_CALLBACKS_VERSION >= 3
+static int virgl_get_server_fd(void *opaque, uint32_t version)
+{
+    VirtIOGPU *g = opaque;
+
+    if (g->parent_obj.conf.serverfd) {
+        return g->parent_obj.conf.serverfd_parsed;
+    }
+
+    return -1;
+}
+#endif
+
 static struct virgl_renderer_callbacks virtio_gpu_3d_cbs = {
     .version             = 1,
     .write_fence         = virgl_write_fence,
@@ -1097,6 +1110,10 @@ int virtio_gpu_virgl_init(VirtIOGPU *g)
     uint32_t flags = 0;
     VirtIOGPUGL *gl = VIRTIO_GPU_GL(g);
 
+#if VIRGL_RENDERER_CALLBACKS_VERSION >= 3
+    virtio_gpu_3d_cbs.version = 3;
+    virtio_gpu_3d_cbs.get_server_fd = virgl_get_server_fd;
+#endif
 #if VIRGL_RENDERER_CALLBACKS_VERSION >= 4
     if (qemu_egl_display) {
         virtio_gpu_3d_cbs.version = 4;
diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h
index a42957c4e2..40a81f500c 100644
--- a/include/hw/virtio/virtio-gpu.h
+++ b/include/hw/virtio/virtio-gpu.h
@@ -128,6 +128,8 @@ struct virtio_gpu_base_conf {
     uint32_t xres;
     uint32_t yres;
     uint64_t hostmem;
+    char *serverfd;
+    int serverfd_parsed;
 };
 
 struct virtio_gpu_ctrl_command {
-- 
2.49.0



^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-05-09 16:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-03 15:51 [PATCH] virtio-gpu-gl: Add 'serverfd' property Jiang XueQian
2025-05-08 11:06 ` Jiang XueQian
2025-05-08 12:00 ` Alex Bennée
2025-05-09 16:30   ` Jiang XueQian

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).