mirror of https://github.com/xemu-project/xemu.git
add a new runstate: RUN_STATE_GUEST_PANICKED
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>
This commit is contained in:
parent
cffc5113a4
commit
ede085b3fe
|
@ -22,6 +22,7 @@ int qemu_uuid_parse(const char *str, uint8_t *uuid);
|
||||||
bool runstate_check(RunState state);
|
bool runstate_check(RunState state);
|
||||||
void runstate_set(RunState new_state);
|
void runstate_set(RunState new_state);
|
||||||
int runstate_is_running(void);
|
int runstate_is_running(void);
|
||||||
|
bool runstate_needs_reset(void);
|
||||||
typedef struct vm_change_state_entry VMChangeStateEntry;
|
typedef struct vm_change_state_entry VMChangeStateEntry;
|
||||||
typedef void VMChangeStateHandler(void *opaque, int running, RunState state);
|
typedef void VMChangeStateHandler(void *opaque, int running, RunState state);
|
||||||
|
|
||||||
|
|
|
@ -174,11 +174,14 @@
|
||||||
# @suspended: guest is suspended (ACPI S3)
|
# @suspended: guest is suspended (ACPI S3)
|
||||||
#
|
#
|
||||||
# @watchdog: the watchdog action is configured to pause and has been triggered
|
# @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',
|
{ 'enum': 'RunState',
|
||||||
'data': [ 'debug', 'inmigrate', 'internal-error', 'io-error', 'paused',
|
'data': [ 'debug', 'inmigrate', 'internal-error', 'io-error', 'paused',
|
||||||
'postmigrate', 'prelaunch', 'finish-migrate', 'restore-vm',
|
'postmigrate', 'prelaunch', 'finish-migrate', 'restore-vm',
|
||||||
'running', 'save-vm', 'shutdown', 'suspended', 'watchdog' ] }
|
'running', 'save-vm', 'shutdown', 'suspended', 'watchdog',
|
||||||
|
'guest-panicked' ] }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @SnapshotInfo
|
# @SnapshotInfo
|
||||||
|
|
3
qmp.c
3
qmp.c
|
@ -149,8 +149,7 @@ void qmp_cont(Error **errp)
|
||||||
{
|
{
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
if (runstate_check(RUN_STATE_INTERNAL_ERROR) ||
|
if (runstate_needs_reset()) {
|
||||||
runstate_check(RUN_STATE_SHUTDOWN)) {
|
|
||||||
error_set(errp, QERR_RESET_REQUIRED);
|
error_set(errp, QERR_RESET_REQUIRED);
|
||||||
return;
|
return;
|
||||||
} else if (runstate_check(RUN_STATE_SUSPENDED)) {
|
} else if (runstate_check(RUN_STATE_SUSPENDED)) {
|
||||||
|
|
13
vl.c
13
vl.c
|
@ -594,6 +594,7 @@ static const RunStateTransition runstate_transitions_def[] = {
|
||||||
{ RUN_STATE_RUNNING, RUN_STATE_SAVE_VM },
|
{ RUN_STATE_RUNNING, RUN_STATE_SAVE_VM },
|
||||||
{ RUN_STATE_RUNNING, RUN_STATE_SHUTDOWN },
|
{ RUN_STATE_RUNNING, RUN_STATE_SHUTDOWN },
|
||||||
{ RUN_STATE_RUNNING, RUN_STATE_WATCHDOG },
|
{ RUN_STATE_RUNNING, RUN_STATE_WATCHDOG },
|
||||||
|
{ RUN_STATE_RUNNING, RUN_STATE_GUEST_PANICKED },
|
||||||
|
|
||||||
{ RUN_STATE_SAVE_VM, RUN_STATE_RUNNING },
|
{ RUN_STATE_SAVE_VM, RUN_STATE_RUNNING },
|
||||||
|
|
||||||
|
@ -608,6 +609,8 @@ static const RunStateTransition runstate_transitions_def[] = {
|
||||||
{ RUN_STATE_WATCHDOG, RUN_STATE_RUNNING },
|
{ RUN_STATE_WATCHDOG, RUN_STATE_RUNNING },
|
||||||
{ RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE },
|
{ RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE },
|
||||||
|
|
||||||
|
{ RUN_STATE_GUEST_PANICKED, RUN_STATE_PAUSED },
|
||||||
|
|
||||||
{ RUN_STATE_MAX, RUN_STATE_MAX },
|
{ RUN_STATE_MAX, RUN_STATE_MAX },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -649,6 +652,13 @@ int runstate_is_running(void)
|
||||||
return runstate_check(RUN_STATE_RUNNING);
|
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 *qmp_query_status(Error **errp)
|
||||||
{
|
{
|
||||||
StatusInfo *info = g_malloc0(sizeof(*info));
|
StatusInfo *info = g_malloc0(sizeof(*info));
|
||||||
|
@ -1984,8 +1994,7 @@ static bool main_loop_should_exit(void)
|
||||||
cpu_synchronize_all_states();
|
cpu_synchronize_all_states();
|
||||||
qemu_system_reset(VMRESET_REPORT);
|
qemu_system_reset(VMRESET_REPORT);
|
||||||
resume_all_vcpus();
|
resume_all_vcpus();
|
||||||
if (runstate_check(RUN_STATE_INTERNAL_ERROR) ||
|
if (runstate_needs_reset()) {
|
||||||
runstate_check(RUN_STATE_SHUTDOWN)) {
|
|
||||||
runstate_set(RUN_STATE_PAUSED);
|
runstate_set(RUN_STATE_PAUSED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue