On 19/01/2016 08:59, Denis V. Lunev wrote:
> @@ -612,8 +617,10 @@ static const RunStateTransition
> runstate_transitions_def[] = {
>
> { RUN_STATE_FINISH_MIGRATE, RUN_STATE_RUNNING },
> { RUN_STATE_FINISH_MIGRATE, RUN_STATE_POSTMIGRATE },
> + { RUN_STATE_FINISH_MIGRATE, RUN_STATE_PRELAUNCH },
>
> { RUN_STATE_RESTORE_VM, RUN_STATE_RUNNING },
> + { RUN_STATE_RESTORE_VM, RUN_STATE_PRELAUNCH },
>
> { RUN_STATE_RUNNING, RUN_STATE_DEBUG },
> { RUN_STATE_RUNNING, RUN_STATE_INTERNAL_ERROR },
> @@ -627,20 +634,25 @@ static const RunStateTransition
> runstate_transitions_def[] = {
> { RUN_STATE_RUNNING, RUN_STATE_GUEST_PANICKED },
>
> { RUN_STATE_SAVE_VM, RUN_STATE_RUNNING },
> + { RUN_STATE_SAVE_VM, RUN_STATE_PRELAUNCH },
This should not happen; thus I would remove this line.
> { RUN_STATE_SHUTDOWN, RUN_STATE_PAUSED },
> { RUN_STATE_SHUTDOWN, RUN_STATE_FINISH_MIGRATE },
> + { RUN_STATE_SHUTDOWN, RUN_STATE_PRELAUNCH },
>
> { RUN_STATE_DEBUG, RUN_STATE_SUSPENDED },
> { RUN_STATE_RUNNING, RUN_STATE_SUSPENDED },
> { RUN_STATE_SUSPENDED, RUN_STATE_RUNNING },
> { RUN_STATE_SUSPENDED, RUN_STATE_FINISH_MIGRATE },
> + { RUN_STATE_SUSPENDED, RUN_STATE_PRELAUNCH },
>
> { RUN_STATE_WATCHDOG, RUN_STATE_RUNNING },
> { RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE },
> + { RUN_STATE_WATCHDOG, RUN_STATE_PRELAUNCH },
>
> { RUN_STATE_GUEST_PANICKED, RUN_STATE_RUNNING },
> { RUN_STATE_GUEST_PANICKED, RUN_STATE_FINISH_MIGRATE },
> + { RUN_STATE_GUEST_PANICKED, RUN_STATE_PRELAUNCH },
>
> { RUN_STATE__MAX, RUN_STATE__MAX },
> };
> @@ -1886,8 +1899,10 @@ static bool main_loop_should_exit(void)
> cpu_synchronize_all_states();
> qemu_system_reset(VMRESET_REPORT);
> resume_all_vcpus();
> - if (runstate_needs_reset()) {
> - runstate_set(RUN_STATE_PAUSED);
> + if (!runstate_check(RUN_STATE_RUNNING) &&
> + !runstate_check(RUN_STATE_INMIGRATE) &&
> + !runstate_check(RUN_STATE_SAVE_VM)) {
Since SAVE_VM should not happen here, I would leave this check out too.
If it happens, the lack of a SAVE_VM->PRELAUNCH transition will cause
an assertion failure.
Thanks for the patch!
Paolo
> + runstate_set(RUN_STATE_PRELAUNCH);
> }
> }
> if (qemu_wakeup_requested()) {
>