diff options
| author | Steve Sistare <steven.sistare@oracle.com> | 2025-07-02 14:58:45 -0700 |
|---|---|---|
| committer | Cédric Le Goater <clg@redhat.com> | 2025-07-03 13:42:28 +0200 |
| commit | fb32965b6dd8a001815593642a5146fbd2e85651 (patch) | |
| tree | 5a851ce1c196bf3f6df67136ab33256b2bcbb59b /hw/vfio/container-base.c | |
| parent | d7ae4a740c8e49962ccfbbf41da0b3b8314518ce (diff) | |
| download | focaccia-qemu-fb32965b6dd8a001815593642a5146fbd2e85651.tar.gz focaccia-qemu-fb32965b6dd8a001815593642a5146fbd2e85651.zip | |
vfio/iommufd: use IOMMU_IOAS_MAP_FILE
Use IOMMU_IOAS_MAP_FILE when the mapped region is backed by a file. Such a mapping can be preserved without modification during CPR, because it depends on the file's address space, which does not change, rather than on the process's address space, which does change. Signed-off-by: Steve Sistare <steven.sistare@oracle.com> Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Link: https://lore.kernel.org/qemu-devel/1751493538-202042-9-git-send-email-steven.sistare@oracle.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
Diffstat (limited to 'hw/vfio/container-base.c')
| -rw-r--r-- | hw/vfio/container-base.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/hw/vfio/container-base.c b/hw/vfio/container-base.c index d834bd4822..56304978e1 100644 --- a/hw/vfio/container-base.c +++ b/hw/vfio/container-base.c @@ -78,7 +78,16 @@ int vfio_container_dma_map(VFIOContainerBase *bcontainer, void *vaddr, bool readonly, MemoryRegion *mr) { VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer); + RAMBlock *rb = mr->ram_block; + int mfd = rb ? qemu_ram_get_fd(rb) : -1; + if (mfd >= 0 && vioc->dma_map_file) { + unsigned long start = vaddr - qemu_ram_get_host_addr(rb); + unsigned long offset = qemu_ram_get_fd_offset(rb); + + return vioc->dma_map_file(bcontainer, iova, size, mfd, start + offset, + readonly); + } g_assert(vioc->dma_map); return vioc->dma_map(bcontainer, iova, size, vaddr, readonly, mr); } |