virtio-iommu: Fix migration regression
authorZhenzhong Duan <zhenzhong.duan@intel.com>
Fri, 24 Jun 2022 09:37:40 +0000 (17:37 +0800)
committerMichael S. Tsirkin <mst@redhat.com>
Mon, 27 Jun 2022 22:53:18 +0000 (18:53 -0400)
We also need to switch to the right address space on dest side
after loading the device status. DMA to wrong address space is
destructive.

Fixes: 3facd774962fd ("virtio-iommu: Add bypass mode support to assigned device")
Suggested-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Message-Id: <20220624093740.3525267-1-zhenzhong.duan@intel.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
hw/virtio/virtio-iommu.c

index 08b227e828f89496fbc2a6f6ae4186af6bc129fd..281152d338f46d13a1daca641f6a166336f9eaab 100644 (file)
@@ -1322,6 +1322,14 @@ static int iommu_post_load(void *opaque, int version_id)
     VirtIOIOMMU *s = opaque;
 
     g_tree_foreach(s->domains, reconstruct_endpoints, s);
+
+    /*
+     * Memory regions are dynamically turned on/off depending on
+     * 'config.bypass' and attached domain type if there is. After
+     * migration, we need to make sure the memory regions are
+     * still correct.
+     */
+    virtio_iommu_switch_address_space_all(s);
     return 0;
 }