[PATCH] hw/display/virtio-gpu: set share_handle for udmabuf blob resources

marcandre.lureau@redhat.com posted 1 patch 1 month ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20260827071013.2876553-1-marcandre.lureau@redhat.com
Maintainers: "Michael S. Tsirkin" <mst@redhat.com>, "Alex Bennée" <alex.bennee@linaro.org>, Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>, Dmitry Osipenko <dmitry.osipenko@collabora.com>
hw/display/virtio-gpu-udmabuf.c | 3 +++
1 file changed, 3 insertions(+)
[PATCH] hw/display/virtio-gpu: set share_handle for udmabuf blob resources
Posted by marcandre.lureau@redhat.com 1 month ago
From: Marc-André Lureau <marcandre.lureau@redhat.com>

When a blob resource is backed by udmabuf, the dmabuf fd was never
propagated to res->share_handle. This meant the D-Bus display
listener could not share the buffer mapping with remote clients,
falling back to copying pixel data instead.

Set share_handle to the dmabuf fd after successful udmabuf creation,
and reset it to SHAREABLE_NONE on teardown.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 hw/display/virtio-gpu-udmabuf.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/hw/display/virtio-gpu-udmabuf.c b/hw/display/virtio-gpu-udmabuf.c
index c230509852ff..5d6daa1f7afc 100644
--- a/hw/display/virtio-gpu-udmabuf.c
+++ b/hw/display/virtio-gpu-udmabuf.c
@@ -91,6 +91,7 @@ static void virtio_gpu_destroy_udmabuf(struct virtio_gpu_simple_resource *res)
     if (res->dmabuf_fd >= 0) {
         close(res->dmabuf_fd);
         res->dmabuf_fd = -1;
+        res->share_handle = SHAREABLE_NONE;
     }
 }
 
@@ -149,6 +150,7 @@ bool virtio_gpu_init_udmabuf(struct virtio_gpu_simple_resource *res)
             virtio_gpu_destroy_udmabuf(res);
             return false;
         }
+        res->share_handle = res->dmabuf_fd;
         pdata = res->remapped;
     }
 
@@ -182,6 +184,7 @@ void virtio_gpu_fini_udmabuf(VirtIOGPU *g, struct virtio_gpu_simple_resource *re
             res->dmabuf_fd != -1) {
             qemu_dmabuf_close(dmabuf->buf);
             res->dmabuf_fd = -1;
+            res->share_handle = SHAREABLE_NONE;
         }
     }
 
-- 
2.55.0.543.g5ebe2ebe4ea8


Re: [PATCH] hw/display/virtio-gpu: set share_handle for udmabuf blob resources
Posted by Akihiko Odaki 4 weeks, 1 day ago
On 2026/08/27 16:10, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> When a blob resource is backed by udmabuf, the dmabuf fd was never
> propagated to res->share_handle. This meant the D-Bus display
> listener could not share the buffer mapping with remote clients,
> falling back to copying pixel data instead.
> 
> Set share_handle to the dmabuf fd after successful udmabuf creation,
> and reset it to SHAREABLE_NONE on teardown.
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Please add:
Fixes: 5f899c34af1d ("virtio-gpu: allocate shareable 2d resources on 
!win32")

With the Fixes tag:

Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>

Regards,
Akihiko Odaki

> ---
>   hw/display/virtio-gpu-udmabuf.c | 3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/hw/display/virtio-gpu-udmabuf.c b/hw/display/virtio-gpu-udmabuf.c
> index c230509852ff..5d6daa1f7afc 100644
> --- a/hw/display/virtio-gpu-udmabuf.c
> +++ b/hw/display/virtio-gpu-udmabuf.c
> @@ -91,6 +91,7 @@ static void virtio_gpu_destroy_udmabuf(struct virtio_gpu_simple_resource *res)
>       if (res->dmabuf_fd >= 0) {
>           close(res->dmabuf_fd);
>           res->dmabuf_fd = -1;
> +        res->share_handle = SHAREABLE_NONE;
>       }
>   }
>   
> @@ -149,6 +150,7 @@ bool virtio_gpu_init_udmabuf(struct virtio_gpu_simple_resource *res)
>               virtio_gpu_destroy_udmabuf(res);
>               return false;
>           }
> +        res->share_handle = res->dmabuf_fd;
>           pdata = res->remapped;
>       }
>   
> @@ -182,6 +184,7 @@ void virtio_gpu_fini_udmabuf(VirtIOGPU *g, struct virtio_gpu_simple_resource *re
>               res->dmabuf_fd != -1) {
>               qemu_dmabuf_close(dmabuf->buf);
>               res->dmabuf_fd = -1;
> +            res->share_handle = SHAREABLE_NONE;
>           }
>       }
>   


Re: [PATCH] hw/display/virtio-gpu: set share_handle for udmabuf blob resources
Posted by Daniel P. Berrangé 1 month ago
On Thu, Aug 27, 2026 at 11:10:13AM +0400, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> When a blob resource is backed by udmabuf, the dmabuf fd was never
> propagated to res->share_handle. This meant the D-Bus display
> listener could not share the buffer mapping with remote clients,
> falling back to copying pixel data instead.
> 
> Set share_handle to the dmabuf fd after successful udmabuf creation,
> and reset it to SHAREABLE_NONE on teardown.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  hw/display/virtio-gpu-udmabuf.c | 3 +++
>  1 file changed, 3 insertions(+)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


With regards,
Daniel
-- 
|: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
|: https://libvirt.org          ~~          https://entangle-photo.org :|
|: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|