debugging the migration step with the same steps. with libvirt version:1.3.4 qemu version:2.8.50
I found qemu held the right state. But libvirt will send cont at the end of the migration, it will rewrite the vm's state. after migration HOSTA | HOSTB virsh list vm crashed -> virsh list vm running I will check the new libvirt about handling the state. Thanks On 2017/3/7 2:11, Paolo Bonzini wrote: > > On 06/03/2017 15:05, hangaohuai wrote: >> Bug steps: >> 1. windows VM with pvpanic device:<panic model='isa'/>in xml >> 2. inject the panic in windows, the vm state is paused (guest-panicked) >> 3. migrate the vm to other host, vm state is running >> >> Check the vmstate before runstate_set(RUN_STATE_RUNNING) > What's the backtrace for runstate_set(RUN_STATE_RUNNING)? > > This should be triggered: > > if (!global_state_received() || > global_state_get_runstate() == RUN_STATE_RUNNING) { > if (autostart) { > vm_start(); > } else { > runstate_set(RUN_STATE_PAUSED); > } > } else { > runstate_set(global_state_get_runstate()); /* <<<< */ > } > > I also suggest a testcase to tests/pvpanic-test.c. > > Paolo > >> Signed-off-by: hangaohuai <hangaoh...@huawei.com> >> --- >> cpus.c | 3 +++ >> include/sysemu/sysemu.h | 1 + >> vl.c | 5 +++++ >> 3 files changed, 9 insertions(+) >> >> diff --git a/cpus.c b/cpus.c >> index c857ad2..37b93aa 100644 >> --- a/cpus.c >> +++ b/cpus.c >> @@ -1734,6 +1734,9 @@ int vm_prepare_start(void) >> if (runstate_is_running()) { >> qapi_event_send_stop(&error_abort); >> res = -1; >> + } else if (runstate_is_paniced()) { >> + qemu_system_guest_panicked(NULL); >> + res = -1; >> } else { >> replay_enable_events(); >> cpu_enable_ticks(); > . >