[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] Fix the vm state after vm migration when vm pan
From: |
hangaohuai |
Subject: |
Re: [Qemu-devel] [PATCH] Fix the vm state after vm migration when vm panic |
Date: |
Tue, 7 Mar 2017 14:54:06 +0800 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20120327 Thunderbird/11.0.1 |
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 <address@hidden>
>> ---
>> 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();
> .
>