Commit e46883204c38 ("vfio/migration: Block migration with vIOMMU")
introduces a migration blocker when vIOMMU is enabled, because we need
to calculate the IOVA ranges for device dirty tracking. But this is
unnecessary for iommu dirty tracking.Limit the vfio_viommu_preset() check to those devices which use device dirty tracking. This allows live migration with VFIO devices which use iommu dirty tracking. Suggested-by: Jason Zeng <[email protected]> Co-developed-by: Joao Martins <[email protected]> Signed-off-by: Joao Martins <[email protected]> Signed-off-by: Zhenzhong Duan <[email protected]> Reviewed-by: Yi Liu <[email protected]> Tested-by: Xudong Hao <[email protected]> Tested-by: Giovannio Cabiddu <[email protected]> Tested-by: Rohith S R <[email protected]> --- hw/vfio/migration.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 0a1d8cac2c..40f337b798 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -1230,7 +1230,8 @@ bool vfio_migration_realize(VFIODevice *vbasedev, Error **errp) goto out_deinit; } - if (vfio_viommu_preset(vbasedev)) { + if (!vfio_device_dirty_pages_disabled(vbasedev) && + vfio_viommu_preset(vbasedev)) { error_setg(&err, "%s: Migration is currently not supported " "with vIOMMU enabled", vbasedev->name); goto add_blocker; -- 2.47.1
