Vivek,

On 10/4/25 01:35, Vivek Kasireddy wrote:
The virtio-gpu driver running in the Guest VM can create Guest blob
resources (by importing dmabufs) that are backed by System RAM. This
is made possible by making use of memfd memory backend and udmabuf
driver on the Host side. However, in order to create Guest blobs
that are backed by vfio-pci device regions (which happens when
virtio-gpu imports dmabufs from devices that have local memory such
as dGPU VFs), we have to implement VFIO_DEVICE_FEATURE_DMA_BUF and
leverage it in virtio-gpu.

So, while creating the blobs we use memory_region_is_ram_device() to
figure out if the blob is backed by memfd or a vfio-pci device. If
it is determined that the blob is backed by vfio-pci device region,
instead of calling into udmabuf driver to create dmabuf we would
now call into vfio-pci driver to have a dmabuf created on the Host.

RFC -> v1:
- Create the CPU mapping using vfio device fd if the dmabuf exporter
   (vfio-pci) does not provide mmap() support (Akihiko)
- Log a warning with LOG_GUEST_ERROR instead of warn_report() when
   dmabuf cannot be created using Guest provided addresses (Akihiko)
- Use address_space_translate() instead of gpa2hva() to obtain the
   Host addresses (Akihiko)
- Rearrange the patches and improve the commit messages (Akihiko)
- Fix compilation error when VFIO is not enabled (Alex)
- Add a new helper to obtain VFIO region index from memory region
- Move vfio_device_create_dmabuf() to hw/vfio/device.c

Tested with an SRIOV enabled Intel dGPU by running Gnome Wayland

Could you please be more precise on the HW ?

(in the VM) and Qemu with the following (relevant) parameters:
-device vfio-pci,host=0000:03:00.1
-device virtio-vga,max_outputs=1,xres=1920,yres=1080,blob=true
-display gtk,gl=on

Associated vfio-pci kernel driver series:
https://lore.kernel.org/dri-devel/[email protected]/
Associated virtio-gpu kernel driver series (merged):
https://lore.kernel.org/dri-devel/[email protected]/

---
Cc: Marc-André Lureau <[email protected]>
Cc: Alex Bennée <[email protected]>
Cc: Akihiko Odaki <[email protected]>
Cc: Dmitry Osipenko <[email protected]>
Cc: Alex Williamson <[email protected]>
Cc: Cédric Le Goater <[email protected]>
Cc: Leon Romanovsky <[email protected]>
Cc: Leon Romanovsky <[email protected]>
Cc: Jason Gunthorpe <[email protected]>
Cc: Dongwon Kim <[email protected]>

Vivek Kasireddy (7):
   virtio-gpu: Recreate the resource's dmabuf if new backing is attached
   virtio-gpu: Don't rely on res->blob to identify blob resources
   virtio-gpu: Find hva for Guest's DMA addr associated with a ram device
   vfio/region: Add a helper to get region index from memory region
   linux-headers: Update vfio.h to include VFIO_DEVICE_FEATURE_DMA_BUF
   vfio/device: Add support for VFIO_DEVICE_FEATURE_DMA_BUF
   virtio-gpu-udmabuf: Create dmabuf for blobs associated with VFIO
     devices

  hw/display/Kconfig              |   5 ++
  hw/display/virtio-gpu-udmabuf.c | 143 ++++++++++++++++++++++++++++++--
  hw/display/virtio-gpu.c         |  53 +++++++++---
  hw/vfio/device.c                |  43 ++++++++++
  hw/vfio/region.c                |  14 ++++
  include/hw/vfio/vfio-device.h   |   5 ++
  linux-headers/linux/vfio.h      |  25 ++++++
  7 files changed, 270 insertions(+), 18 deletions(-)


Please cc: Alex and I on all patches.

Thanks,

C.


Reply via email to