Il 20/03/2013 09:58, Markus Armbruster ha scritto: > Let's examine the other transitions to RUN_STATE_PAUSED, and whether > they can now come from RUN_STATE_GUEST_PANICKED: > > * process_incoming_migration_co() > > No, because we're in RUN_STATE_INMIGRATE here, aren't we? Juan?
Yes. > * qmp_stop() > > No, because vm_stop() calls do_vm_stop() to do the actual state > transition, which protects it by runstate_is_running(). > > We can ignore the conditional, it merely punts the vm_stop() to the > main loop. > > Next question: RUN_STATE_INTERNAL_ERROR and RUN_STATE_SHUTDOWN may go to > RUN_STATE_FINISH_MIGRATE, but RUN_STATE_GUEST_PANICKED may not. Why? RUN_STATE_FINISH_MIGRATE is reached with vm_stop_force_state, so every state can go there. Next question: why doesn't the switch to RUN_STATE_SAVE_VM use vm_stop_force_state? Next question: almost all states go to RUN_STATE_FINISH_MIGRATE, the same would hold for RUN_STATE_SAVE_VM if it started using vm_stop_force_state. There are few exceptions, and I'm not even sure all of them are correct (why can't RUN_STATE_DEBUG go to RUN_STATE_FINISH_MIGRATE?). Should vm_stop_force_state override the runstate check (either directly, or by interposing a transition to RUN_STATE_PAUSED? The few outliers can be handled with manually-placed assertions. Paolo