qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] intel_iommu: fix migration breakage on mr switc


From: Jason Wang
Subject: Re: [Qemu-devel] [PATCH] intel_iommu: fix migration breakage on mr switch
Date: Fri, 30 Jun 2017 11:12:20 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1



On 2017年06月29日 12:26, Peter Xu wrote:
Migration is broken after the vfio integration work:

qemu-kvm: AHCI: Failed to start FIS receive engine: bad FIS receive buffer 
address
qemu-kvm: Failed to load ich9_ahci:ahci
qemu-kvm: error while loading state for instance 0x0 of device 
'0000:00:1f.2/ich9_ahci'
qemu-kvm: load of migration failed: Operation not permitted

The problem is that vfio work introduced dynamic memory region
switching (actually it is also used for future PT mode), and this memory
region layout is not properly delivered to destination when migration
happens. Solution is to rebuild the layout in post_load.

Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1459906
Fixes: 558e0024 ("intel_iommu: allow dynamic switch of IOMMU region")
Signed-off-by: Peter Xu <address@hidden>
---
  hw/i386/intel_iommu.c | 17 +++++++++++++++++
  1 file changed, 17 insertions(+)

diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index a9b59bd..36b231d 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -2332,11 +2332,28 @@ static void vtd_iommu_notify_flag_changed(MemoryRegion 
*iommu,
      }
  }
+static int vtd_post_load(void *opaque, int version_id)
+{
+    IntelIOMMUState *iommu = opaque;
+
+    /*
+     * Since commit 558e00 ("intel_iommu: allow dynamic switch of
+     * IOMMU region"), memory regions are dynamically turned on/off
+     * depending on context entry configurations from the guest. After
+     * migration, we need to make sure the memory regions are still
+     * correct.
+     */
+    vtd_switch_address_space_all(iommu);
+
+    return 0;
+}
+
  static const VMStateDescription vtd_vmstate = {
      .name = "iommu-intel",
      .version_id = 1,
      .minimum_version_id = 1,
      .priority = MIG_PRI_IOMMU,
+    .post_load = vtd_post_load,
      .fields = (VMStateField[]) {
          VMSTATE_UINT64(root, IntelIOMMUState),
          VMSTATE_UINT64(intr_root, IntelIOMMUState),

Reviewed-by: Jason Wang <address@hidden>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]