On 2026/08/27 16:10, [email protected] wrote:
From: Marc-André Lureau <[email protected]>

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 <[email protected]>

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

With the Fixes tag:

Reviewed-by: Akihiko Odaki <[email protected]>

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;
          }
      }


Reply via email to