Vivek,
On 11/9/25 06:33, 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 a dmabuf fd we would
> now call into vfio-pci driver to have a dmabuf fd created on the Host.
>
> Changelog:
> v1 -> v2:
> - Drop the patch that uses res->blob_size instead of res->blob to
> identify blob resources (Akihiko)
> - Remove the res->dmabuf_fd < 0 check while attaching backing to a
> resource (Akihiko)
> - Remove cmd->cmd_hdr.type != VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB
> check while attaching backing (Akihiko)
> - Improve vfio_get_region_index_from_mr() and add documentation (Cedric)
> - Remove rcu_read_lock/unlock around qemu_ram_block_from_host()
> (Akihiko, Cedric)
> - Improve, document and rename vfio_device_create_dmabuf() to
> vfio_device_create_dmabuf_fd() (Cedric)
> - Add a new helper to lookup VFIO device from memory region (Cedric)
> - Document vfio_device_get_region_info() (Cedric)
> - Ensure that info variable (in vfio_dmabuf_mmap()) is initialized
> before use (Cedric)
> - Rename udmabuf files and helpers to dmabuf (Akihiko)
> - Remove the redundant check for virtio_gpu_have_udmabuf() in
> virtio_gpu_init_dmabuf() (Akihiko)
> - Add a helper to check whether all the entries of a dmabuf belong
> to a single memory region or not (Akihiko)
>
> 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 (B60) by running Gnome Wayland
> (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/cover.1754311439.git.leon@kernel.org/
> Associated virtio-gpu kernel driver series (merged):
> https://lore.kernel.org/dri-devel/20241126031643.3490496-1-vivek.kasireddy@intel.com/
>
> ---
> Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
> Cc: Alex Bennée <alex.bennee@linaro.org>
> Cc: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
> Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com>
> Cc: Alex Williamson <alex.williamson@redhat.com>
Please adjust Alex's email :
Alex Williamson <alex@shazbot.org>
Thanks,
C.
> Cc: Cédric Le Goater <clg@redhat.com>
> Cc: Leon Romanovsky <leon@kernel.org>
> Cc: Leon Romanovsky <leonro@nvidia.com>
> Cc: Jason Gunthorpe <jgg@nvidia.com>
> Cc: Dongwon Kim <dongwon.kim@intel.com>
>
> Vivek Kasireddy (10):
> virtio-gpu: Recreate the resource's dmabuf if new backing is attached
> virtio-gpu: Find hva for Guest's DMA addr associated with a ram device
> vfio: Document vfio_device_get_region_info()
> vfio/region: Add a helper to get region index from memory region
> vfio/device: Add a helper to lookup VFIODevice 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: Rename udmabuf files and helpers to dmabuf
> virtio-gpu-dmabuf: Introduce qemu_iovec_same_memory_regions()
> virtio-gpu-dmabuf: Create dmabuf for blobs associated with VFIO
> devices
>
> hw/display/Kconfig | 5 +
> hw/display/meson.build | 4 +-
> ...abuf-stubs.c => virtio-gpu-dmabuf-stubs.c} | 4 +-
> ...rtio-gpu-udmabuf.c => virtio-gpu-dmabuf.c} | 149 ++++++++++++++++--
> hw/display/virtio-gpu.c | 34 +++-
> hw/vfio/device.c | 52 ++++++
> hw/vfio/region.c | 14 ++
> include/hw/vfio/vfio-device.h | 46 ++++++
> include/hw/virtio/virtio-gpu.h | 6 +-
> linux-headers/linux/vfio.h | 25 +++
> 10 files changed, 316 insertions(+), 23 deletions(-)
> rename hw/display/{virtio-gpu-udmabuf-stubs.c => virtio-gpu-dmabuf-stubs.c} (79%)
> rename hw/display/{virtio-gpu-udmabuf.c => virtio-gpu-dmabuf.c} (56%)
>