All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiang XueQian <jiangxueqian@gmail.com>
To: qemu-devel@nongnu.org
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [PATCH] virtio-gpu-gl: Add 'serverfd' property
Date: Thu, 8 May 2025 19:06:15 +0800	[thread overview]
Message-ID: <36adc357-91d0-495f-afe0-7679e056eb98@gmail.com> (raw)
In-Reply-To: <20250403155129.3396821-1-jiangxueqian@gmail.com>

Ping.

On 4/3/25 11:51 PM, Jiang XueQian wrote:
> 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 {



  reply	other threads:[~2025-05-08 11:07 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-03 15:51 [PATCH] virtio-gpu-gl: Add 'serverfd' property Jiang XueQian
2025-05-08 11:06 ` Jiang XueQian [this message]
2025-05-08 12:00 ` Alex Bennée
2025-05-09 16:30   ` Jiang XueQian

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=36adc357-91d0-495f-afe0-7679e056eb98@gmail.com \
    --to=jiangxueqian@gmail.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.