[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH 06/13] spapr/xive: fix migration of the XiveTCTX under
From: |
Cédric Le Goater |
Subject: |
[Qemu-ppc] [PATCH 06/13] spapr/xive: fix migration of the XiveTCTX under TCG |
Date: |
Mon, 7 Jan 2019 19:39:39 +0100 |
When the thread interrupt management state is retrieved from the KVM
VCPU, word2 is saved under the QEMU XIVE thread context to print out
the OS CAM line under the QEMU monitor.
This breaks the migration of a TCG guest (and with KVM when
kernel_irqchip=off) because the matching algorithm of the presenter
relies on the OS CAM value. Fix with an extra reset of the thread
contexts to restore the expected value.
Signed-off-by: Cédric Le Goater <address@hidden>
---
hw/ppc/spapr_irq.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c
index 233c97c5ecd9..ba27d9d8e972 100644
--- a/hw/ppc/spapr_irq.c
+++ b/hw/ppc/spapr_irq.c
@@ -363,7 +363,31 @@ static void
spapr_irq_cpu_intc_create_xive(sPAPRMachineState *spapr,
static int spapr_irq_post_load_xive(sPAPRMachineState *spapr, int version_id)
{
- return spapr_xive_post_load(spapr->xive, version_id);
+ CPUState *cs;
+ int ret;
+
+ ret = spapr_xive_post_load(spapr->xive, version_id);
+ if (ret) {
+ return ret;
+ }
+
+ /*
+ * When the states are collected from the KVM XIVE device, word2
+ * of the XiveTCTX is set to print out the OS CAM line under the
+ * QEMU monitor.
+ *
+ * This breaks the migration on a TCG guest (or on KVM with
+ * kernel_irqchip=off) because the matching algorithm of the
+ * presenter relies on the OS CAM value. Fix with an extra reset
+ * of the thread contexts to restore the expected value.
+ */
+ CPU_FOREACH(cs) {
+ PowerPCCPU *cpu = POWERPC_CPU(cs);
+
+ /* (TCG) Set the OS CAM line of the thread interrupt context. */
+ spapr_xive_set_tctx_os_cam(cpu->tctx);
+ }
+ return 0;
}
static void spapr_irq_reset_xive(sPAPRMachineState *spapr, Error **errp)
--
2.20.1
- [Qemu-ppc] [PATCH 00/13] spapr: add KVM support to the XIVE interrupt mode, Cédric Le Goater, 2019/01/07
- [Qemu-ppc] [PATCH 01/13] linux-headers: update to 5.0, Cédric Le Goater, 2019/01/07
- [Qemu-ppc] [PATCH 02/13] spapr/xive: add KVM support, Cédric Le Goater, 2019/01/07
- [Qemu-ppc] [PATCH 06/13] spapr/xive: fix migration of the XiveTCTX under TCG,
Cédric Le Goater <=
- [Qemu-ppc] [PATCH 04/13] spapr/xive: introduce a VM state change handler, Cédric Le Goater, 2019/01/07
- [Qemu-ppc] [PATCH 03/13] spapr/xive: add state synchronization with KVM, Cédric Le Goater, 2019/01/07
- [Qemu-ppc] [PATCH 05/13] spapr/xive: add migration support for KVM, Cédric Le Goater, 2019/01/07
- [Qemu-ppc] [PATCH 07/13] ppc/xics: introduce a icp_kvm_connect() routine, Cédric Le Goater, 2019/01/07
- [Qemu-ppc] [PATCH 08/13] spapr/rtas: modify spapr_rtas_register() to remove RTAS handlers, Cédric Le Goater, 2019/01/07
- [Qemu-ppc] [PATCH 09/13] sysbus: add a sysbus_mmio_unmap() helper, Cédric Le Goater, 2019/01/07
- [Qemu-ppc] [PATCH 12/13] spapr/xics: ignore the lower 4K in the IRQ number space, Cédric Le Goater, 2019/01/07
- [Qemu-ppc] [PATCH 11/13] spapr: check for the activation of the KVM IRQ device, Cédric Le Goater, 2019/01/07