586cba
From 8d45902b4884315ec090e607e9f03606b21001cf Mon Sep 17 00:00:00 2001
586cba
From: Zhenzhong Duan <zhenzhong.duan@intel.com>
586cba
Date: Fri, 24 Jun 2022 17:37:40 +0800
586cba
Subject: [PATCH 05/17] virtio-iommu: Fix migration regression
586cba
586cba
RH-Author: Eric Auger <eric.auger@redhat.com>
586cba
RH-MergeRequest: 105: virtio-iommu: Fix bypass mode for assigned devices
586cba
RH-Commit: [5/5] 9652c4aaaf88e24083fab1fbc3d1423260c93ca6 (eauger1/centos-qemu-kvm)
586cba
RH-Bugzilla: 2100106
586cba
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
586cba
RH-Acked-by: Peter Xu <peterx@redhat.com>
586cba
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
586cba
586cba
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2100106
586cba
586cba
We also need to switch to the right address space on dest side
586cba
after loading the device status. DMA to wrong address space is
586cba
destructive.
586cba
586cba
Fixes: 3facd774962fd ("virtio-iommu: Add bypass mode support to assigned device")
586cba
Suggested-by: Eric Auger <eric.auger@redhat.com>
586cba
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
586cba
Message-Id: <20220624093740.3525267-1-zhenzhong.duan@intel.com>
586cba
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
586cba
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
586cba
Reviewed-by: Eric Auger <eric.auger@redhat.com>
586cba
(cherry picked from commit d355566bd958e24e7e384da6ea89a9fc88d7bfed)
586cba
Signed-off-by: Eric Auger <eric.auger@redhat.com>
586cba
---
586cba
 hw/virtio/virtio-iommu.c | 8 ++++++++
586cba
 1 file changed, 8 insertions(+)
586cba
586cba
diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
586cba
index 44a041dec9..2012835554 100644
586cba
--- a/hw/virtio/virtio-iommu.c
586cba
+++ b/hw/virtio/virtio-iommu.c
586cba
@@ -1324,6 +1324,14 @@ static int iommu_post_load(void *opaque, int version_id)
586cba
     VirtIOIOMMU *s = opaque;
586cba
 
586cba
     g_tree_foreach(s->domains, reconstruct_endpoints, s);
586cba
+
586cba
+    /*
586cba
+     * Memory regions are dynamically turned on/off depending on
586cba
+     * 'config.bypass' and attached domain type if there is. After
586cba
+     * migration, we need to make sure the memory regions are
586cba
+     * still correct.
586cba
+     */
586cba
+    virtio_iommu_switch_address_space_all(s);
586cba
     return 0;
586cba
 }
586cba
 
586cba
-- 
586cba
2.31.1
586cba