Skip to content

Commit

Permalink
add a new runstate: RUN_STATE_GUEST_PANICKED
Browse files Browse the repository at this point in the history
The guest will be in this state when it is panicked.

Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-id: 0255f263ffdc2a3716f73e89098b96fd79a235b3.1366945969.git.hutao@cn.fujitsu.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
  • Loading branch information
Hu Tao authored and Anthony Liguori committed Apr 30, 2013
1 parent cffc511 commit ede085b
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 5 deletions.
1 change: 1 addition & 0 deletions include/sysemu/sysemu.h
Expand Up @@ -22,6 +22,7 @@ int qemu_uuid_parse(const char *str, uint8_t *uuid);
bool runstate_check(RunState state);
void runstate_set(RunState new_state);
int runstate_is_running(void);
bool runstate_needs_reset(void);
typedef struct vm_change_state_entry VMChangeStateEntry;
typedef void VMChangeStateHandler(void *opaque, int running, RunState state);

Expand Down
5 changes: 4 additions & 1 deletion qapi-schema.json
Expand Up @@ -174,11 +174,14 @@
# @suspended: guest is suspended (ACPI S3)
#
# @watchdog: the watchdog action is configured to pause and has been triggered
#
# @guest-panicked: guest has been panicked as a result of guest OS panic
##
{ 'enum': 'RunState',
'data': [ 'debug', 'inmigrate', 'internal-error', 'io-error', 'paused',
'postmigrate', 'prelaunch', 'finish-migrate', 'restore-vm',
'running', 'save-vm', 'shutdown', 'suspended', 'watchdog' ] }
'running', 'save-vm', 'shutdown', 'suspended', 'watchdog',
'guest-panicked' ] }

##
# @SnapshotInfo
Expand Down
3 changes: 1 addition & 2 deletions qmp.c
Expand Up @@ -149,8 +149,7 @@ void qmp_cont(Error **errp)
{
Error *local_err = NULL;

if (runstate_check(RUN_STATE_INTERNAL_ERROR) ||
runstate_check(RUN_STATE_SHUTDOWN)) {
if (runstate_needs_reset()) {
error_set(errp, QERR_RESET_REQUIRED);
return;
} else if (runstate_check(RUN_STATE_SUSPENDED)) {
Expand Down
13 changes: 11 additions & 2 deletions vl.c
Expand Up @@ -594,6 +594,7 @@ static const RunStateTransition runstate_transitions_def[] = {
{ RUN_STATE_RUNNING, RUN_STATE_SAVE_VM },
{ RUN_STATE_RUNNING, RUN_STATE_SHUTDOWN },
{ RUN_STATE_RUNNING, RUN_STATE_WATCHDOG },
{ RUN_STATE_RUNNING, RUN_STATE_GUEST_PANICKED },

{ RUN_STATE_SAVE_VM, RUN_STATE_RUNNING },

Expand All @@ -608,6 +609,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_MAX, RUN_STATE_MAX },
};

Expand Down Expand Up @@ -649,6 +652,13 @@ int runstate_is_running(void)
return runstate_check(RUN_STATE_RUNNING);
}

bool runstate_needs_reset(void)
{
return runstate_check(RUN_STATE_INTERNAL_ERROR) ||
runstate_check(RUN_STATE_SHUTDOWN) ||
runstate_check(RUN_STATE_GUEST_PANICKED);
}

StatusInfo *qmp_query_status(Error **errp)
{
StatusInfo *info = g_malloc0(sizeof(*info));
Expand Down Expand Up @@ -1984,8 +1994,7 @@ static bool main_loop_should_exit(void)
cpu_synchronize_all_states();
qemu_system_reset(VMRESET_REPORT);
resume_all_vcpus();
if (runstate_check(RUN_STATE_INTERNAL_ERROR) ||
runstate_check(RUN_STATE_SHUTDOWN)) {
if (runstate_needs_reset()) {
runstate_set(RUN_STATE_PAUSED);
}
}
Expand Down

0 comments on commit ede085b

Please sign in to comment.