diff options
| author | John Levon <john.levon@nutanix.com> | 2025-05-07 16:20:13 +0100 |
|---|---|---|
| committer | Cédric Le Goater <clg@redhat.com> | 2025-05-09 12:42:28 +0200 |
| commit | 5a22b505914bcb1d19a533eb5a36c907169b5ee3 (patch) | |
| tree | f50aa633ff5b708955ab3c694b7b17fb7a6e282a /hw/vfio/container.c | |
| parent | cae04b56347be59718f1a778d0ad588a205bf409 (diff) | |
| download | focaccia-qemu-5a22b505914bcb1d19a533eb5a36c907169b5ee3.tar.gz focaccia-qemu-5a22b505914bcb1d19a533eb5a36c907169b5ee3.zip | |
vfio: add unmap_all flag to DMA unmap callback
We'll use this parameter shortly; this just adds the plumbing. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/qemu-devel/20250507152020.1254632-9-john.levon@nutanix.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
Diffstat (limited to 'hw/vfio/container.c')
| -rw-r--r-- | hw/vfio/container.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/hw/vfio/container.c b/hw/vfio/container.c index cf23aa799f..d5f4e66f1c 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -124,7 +124,7 @@ unmap_exit: */ static int vfio_legacy_dma_unmap(const VFIOContainerBase *bcontainer, hwaddr iova, ram_addr_t size, - IOMMUTLBEntry *iotlb) + IOMMUTLBEntry *iotlb, bool unmap_all) { const VFIOContainer *container = container_of(bcontainer, VFIOContainer, bcontainer); @@ -138,6 +138,10 @@ static int vfio_legacy_dma_unmap(const VFIOContainerBase *bcontainer, int ret; Error *local_err = NULL; + if (unmap_all) { + return -ENOTSUP; + } + if (iotlb && vfio_container_dirty_tracking_is_started(bcontainer)) { if (!vfio_container_devices_dirty_tracking_is_supported(bcontainer) && bcontainer->dirty_pages_supported) { @@ -205,7 +209,7 @@ static int vfio_legacy_dma_map(const VFIOContainerBase *bcontainer, hwaddr iova, */ if (ioctl(container->fd, VFIO_IOMMU_MAP_DMA, &map) == 0 || (errno == EBUSY && - vfio_legacy_dma_unmap(bcontainer, iova, size, NULL) == 0 && + vfio_legacy_dma_unmap(bcontainer, iova, size, NULL, false) == 0 && ioctl(container->fd, VFIO_IOMMU_MAP_DMA, &map) == 0)) { return 0; } |