After cprload, the guest console misbehaves. You must type 8 characters before any are echoed to the terminal. Qemu was not sending interrupts to the guest because the QEMU_CLOCK_VIRTUAL timers_state.cpu_clock_offset was bad. The offset is usually updated at cprsave time by the path
save_cpr_snapshot() vm_stop() do_vm_stop() if (runstate_is_running()) cpu_disable_ticks(); timers_state.cpu_clock_offset = cpu_get_clock_locked(); However, if the guest is in RUN_STATE_SUSPENDED, then cpu_disable_ticks is not called. Further, the earlier transition to suspended in qemu_system_suspend did not disable ticks. To fix, call cpu_disable_ticks from save_cpr_snapshot. Signed-off-by: Steve Sistare <steven.sist...@oracle.com> --- migration/savevm.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/migration/savevm.c b/migration/savevm.c index f101039..00f493b 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -2729,6 +2729,11 @@ void save_cpr_snapshot(const char *file, const char *mode, Error **errp) return; } + /* Update timers_state before saving. Suspend did not so do. */ + if (runstate_check(RUN_STATE_SUSPENDED)) { + cpu_disable_ticks(); + } + vm_stop(RUN_STATE_SAVE_VM); ret = qemu_savevm_state(f, op, errp); -- 1.8.3.1