[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 16/21] intel_iommu: fix migration breakage on mr swit
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 16/21] intel_iommu: fix migration breakage on mr switch |
Date: |
Mon, 3 Jul 2017 22:45:41 +0300 |
From: Peter Xu <address@hidden>
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")
Reviewed-by: Jason Wang <address@hidden>
Signed-off-by: Peter Xu <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
hw/i386/intel_iommu.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index 2ddf3bd..88dc042 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -2337,11 +2337,26 @@ static void vtd_iommu_notify_flag_changed(MemoryRegion
*iommu,
}
}
+static int vtd_post_load(void *opaque, int version_id)
+{
+ IntelIOMMUState *iommu = opaque;
+
+ /*
+ * 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),
--
MST
- [Qemu-devel] [PULL 06/21] pci: Fix the wrong assertion., (continued)
- [Qemu-devel] [PULL 06/21] pci: Fix the wrong assertion., Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 07/21] pci: Make errp the last parameter of pci_add_capability(), Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 08/21] pci: Replace pci_add_capability2() with pci_add_capability(), Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 09/21] pci: Convert to realize, Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 10/21] pci: Convert shpc_init() to Error, Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 11/21] i386/kvm/pci-assign: Fix return type of verify_irqchip_kernel(), Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 12/21] i386/kvm/pci-assign: Use errp directly rather than local_err, Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 15/21] hw/acpi: remove dead acpi code, Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 14/21] fw_cfg: move setting of FW_CFG_VERSION_DMA bit to fw_cfg_init1(), Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 13/21] fw_cfg: don't map the fw_cfg IO ports in fw_cfg_io_realize(), Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 16/21] intel_iommu: fix migration breakage on mr switch,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 17/21] vhost: ensure vhost_ops are set before calling iotlb callback, Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 18/21] vhost-user: unregister slave req handler at cleanup time, Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 20/21] virtio-net: fix tx queue size for !vhost-user, Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 21/21] i386/acpi: update expected acpi files, Michael S. Tsirkin, 2017/07/03
- [Qemu-devel] [PULL 19/21] tests: Add unit tests for the VM Generation ID feature, Michael S. Tsirkin, 2017/07/03