Message ID | 1383571848-30518-1-git-send-email-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
On 11/04/2013 06:30 AM, Paolo Bonzini wrote: > After reporting the GUEST_PANICKED monitor event, QEMU stops the VM. > The reason for this is that events are edge-triggered, and can be lost if > management dies at the wrong time. Stopping a panicked VM lets management > know of a panic even if it has crashed; management can learn about the > panic when it restarts and queries running QEMU processes. The downside > is of course that the VM will be paused while management is not running, > but that is acceptable if it only happens with explicit "-device pvpanic". > > Upon learning of a panic, management (if configured to do so) can pick a > variety of behaviors: leave the VM paused, reset it, destroy it. In > addition to all of these behaviors, it is possible to dump the VM core > from the host. > ... > --- > gdbstub.c | 3 --- > vl.c | 6 ++---- > 2 files changed, 2 insertions(+), 7 deletions(-) Reviewed-by: Eric Blake <eblake@redhat.com>
diff --git a/gdbstub.c b/gdbstub.c index 0e5a3f5..e8ab0b2 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -368,9 +368,6 @@ static inline void gdb_continue(GDBState *s) #ifdef CONFIG_USER_ONLY s->running_state = 1; #else - if (runstate_check(RUN_STATE_GUEST_PANICKED)) { - runstate_set(RUN_STATE_DEBUG); - } if (!runstate_needs_reset()) { vm_start(); } diff --git a/vl.c b/vl.c index b42ac67..16834bd 100644 --- a/vl.c +++ b/vl.c @@ -638,9 +638,8 @@ static const RunStateTransition runstate_transitions_def[] = { { RUN_STATE_WATCHDOG, RUN_STATE_RUNNING }, { RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE }, - { RUN_STATE_GUEST_PANICKED, RUN_STATE_PAUSED }, + { RUN_STATE_GUEST_PANICKED, RUN_STATE_RUNNING }, { RUN_STATE_GUEST_PANICKED, RUN_STATE_FINISH_MIGRATE }, - { RUN_STATE_GUEST_PANICKED, RUN_STATE_DEBUG }, { RUN_STATE_MAX, RUN_STATE_MAX }, }; @@ -686,8 +685,7 @@ int runstate_is_running(void) bool runstate_needs_reset(void) { return runstate_check(RUN_STATE_INTERNAL_ERROR) || - runstate_check(RUN_STATE_SHUTDOWN) || - runstate_check(RUN_STATE_GUEST_PANICKED); + runstate_check(RUN_STATE_SHUTDOWN); } StatusInfo *qmp_query_status(Error **errp)