On Fri, Feb 27, 2026 at 11:09:31AM +0100, Christian König wrote:
When a DMA-buf just represents a linear piece of BAR which is map-able through the VFIO FD anyway then the right approach is to just re-direct the mapping to this VFIO FD.
I actually would like to go the other way and have VFIO always have a DMABUF under the VMA's it mmaps because that will make it easy to finish the type1 emulation which requires finding dmabufs for the VMAs.
It can be that you want additional checks (e.g. if the DMA-buf is revoked) in which case you would need to override the vma->vm_ops, but then just do the access checks and call the vfio_pci_mmap_ops to get the actually page fault handling done.
It isn't that simple, the vm_ops won't have a way to get back to the dmabuf from the vma to find the per-fd revoke flag to check it.
unmap_mapping_range(priv->dmabuf->file->f_mapping,0, priv->size, 1);When you need to use unmap_mapping_range() then you usually share the address space object between the file descriptor exporting the DMA-buf and the DMA-buf fd itself.
Yeah, this becomes problematic. Right now there is a single address space per vfio-device and the invalidation is global.
Possibly for this use case you can keep that and do a global unmap and rely on fault to restore the mmaps that were not revoked.
Jason