summary refs log tree commit diff stats
path: root/backends
diff options
context:
space:
mode:
authorSteve Sistare <steven.sistare@oracle.com>2025-07-02 14:58:56 -0700
committerCédric Le Goater <clg@redhat.com>2025-07-03 13:42:28 +0200
commit6ff4cccd13155e718e630fe16a72d3cc9decde3b (patch)
tree7ea6fb44d7a0ba6bdc9fabc00c16137990707405 /backends
parent5c066c4be2328c46f03e9166ea720b13bf68ea5d (diff)
downloadfocaccia-qemu-6ff4cccd13155e718e630fe16a72d3cc9decde3b.tar.gz
focaccia-qemu-6ff4cccd13155e718e630fe16a72d3cc9decde3b.zip
iommufd: preserve DMA mappings
During cpr-transfer load in new QEMU, the vfio_memory_listener causes
spurious calls to map and unmap DMA regions, as devices are created and
the address space is built.  This memory was already already mapped by the
device in old QEMU, so suppress the map and unmap callbacks during incoming
CPR.

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-20-git-send-email-steven.sistare@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com>
Diffstat (limited to 'backends')
-rw-r--r--backends/iommufd.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/backends/iommufd.c b/backends/iommufd.c
index e0917923bf..2a33c7ab0b 100644
--- a/backends/iommufd.c
+++ b/backends/iommufd.c
@@ -245,6 +245,10 @@ int iommufd_backend_map_file_dma(IOMMUFDBackend *be, uint32_t ioas_id,
         .length = size,
     };
 
+    if (cpr_is_incoming()) {
+        return 0;
+    }
+
     if (!readonly) {
         map.flags |= IOMMU_IOAS_MAP_WRITEABLE;
     }
@@ -274,6 +278,10 @@ int iommufd_backend_unmap_dma(IOMMUFDBackend *be, uint32_t ioas_id,
         .length = size,
     };
 
+    if (cpr_is_incoming()) {
+        return 0;
+    }
+
     ret = ioctl(fd, IOMMU_IOAS_UNMAP, &unmap);
     /*
      * IOMMUFD takes mapping as some kind of object, unmapping