The XIVE MMIO regions should be set on the destination before the XIVE
sources are restored. This is currently handled at the machine level
because it depends on the KVM initialization to be done before
anything else.
But it has ugly consequences on MMU, which seems broken after migration :
Oops: Exception in kernel mode, sig: 4 [#1]
LE SMP NR_CPUS=2048 NUMA pSeries
Modules linked in: ipmi_devintf ipmi_msghandler vmx_crypto crct10dif_vpmsum ...
CPU: 3 PID: 1 Comm: systemd Not tainted 4.16.0+ #2
NIP: c000000000079810 LR: c00000000033f720 CTR: 0000000000000000
REGS: c00000007a803880 TRAP: 0700 Not tainted (4.16.0+)
MSR: 8000000002049033 <SF,VEC,EE,ME,IR,DR,RI,LE> CR: 24048884 XER: 20040000
CFAR: c000000000079ae4 SOFTE: 0
GPR00: c00000000033f720 c00000007a803b00 c0000000015f8a00 c00000007bb1d800
GPR04: 00000000000000a0 c0000000017a2598 c00000007a803ba0 0000000000000002
GPR08: 8403bb74000000c0 0000000000000004 00000000000000c0 0000000000000060
GPR12: 0000000044048888 c000000007d80f00 00000594336eeaa0 0000000000000003
GPR16: 00007ffff732c410 00007ffff732c420 00000594336ec090 fffffffffffffffd
GPR20: 0000000000000000 c00000007bb1d800 0000059444690000 0000059444680000
GPR24: 0000059444680000 8603146e00000080 c00000007bb1d800 0000000000000001
GPR28: c0000000017a24e8 0000059444680000 0000000200000000 00000594446800a0
NIP [c000000000079810] radix__flush_tlb_page_psize+0x60/0x300
LR [c00000000033f720] ptep_clear_flush+0xe0/0x1e0
Call Trace:
[c00000007a803b00] [c00000007a803b80] 0xc00000007a803b80 (unreliable)
[c00000007a803b40] [c00000007a803b80] 0xc00000007a803b80
[c00000007a803b80] [c000000000325cc4] wp_page_copy+0x314/0x9a0
[c00000007a803c10] [c0000000003298b4] do_wp_page+0x1e4/0x860
[c00000007a803c60] [c00000000032f58c] __handle_mm_fault+0x10fc/0x1b10
[c00000007a803d40] [c0000000003300d8] handle_mm_fault+0x138/0x250
[c00000007a803d80] [c000000000069a24] __do_page_fault+0x224/0xa50
[c00000007a803e30] [c00000000000a534] handle_page_fault+0x18/0x38
Work in progress.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
hw/ppc/spapr.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index dea636f9befe..24b3ee2fe13d 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1916,6 +1916,7 @@ static const VMStateDescription vmstate_spapr = {
.pre_load = spapr_pre_load,
.post_load = spapr_post_load,
.pre_save = spapr_pre_save,
+ .priority = MIG_PRI_MAX,
.fields = (VMStateField[]) {
/* used to be @next_irq */
VMSTATE_UNUSED_BUFFER(version_before_3, 0, 4),
--
2.13.6