This new key reports the current VM status to clients. Please, check the documentation being added in this commit for more details.
Signed-off-by: Luiz Capitulino <lcapitul...@redhat.com> --- monitor.c | 3 +-- qmp-commands.hx | 21 ++++++++++++++++++++- sysemu.h | 1 + vl.c | 24 ++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/monitor.c b/monitor.c index f1cb5af..a444924 100644 --- a/monitor.c +++ b/monitor.c @@ -2625,8 +2625,7 @@ static void do_info_status_print(Monitor *mon, const QObject *data) static void do_info_status(Monitor *mon, QObject **ret_data) { - *ret_data = qobject_from_jsonf("{ 'running': %i, 'singlestep': %i }", - qemu_is_running(), singlestep); + *ret_data = qobject_from_jsonf("{ 'running': %i, 'singlestep': %i, 'status': %s }", qemu_is_running(), singlestep, qemu_state_get_name()); } static qemu_acl *find_acl(Monitor *mon, const char *name) diff --git a/qmp-commands.hx b/qmp-commands.hx index 03f67da..87e042f 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -1547,11 +1547,30 @@ Return a json-object with the following information: - "running": true if the VM is running, or false if it is paused (json-bool) - "singlestep": true if the VM is in single step mode, false otherwise (json-bool) +- "status": one of the following values (json-string) + "debug" - QEMU is running on a debugger + "inmigrate" - guest is paused waiting for an incoming migration + "internal-error" - An internal error that prevents further guest + execution has occurred + "io-error" - the last IOP has failed and the device is configured + to pause on I/O errors + "paused" - guest has been paused via the 'stop' command + "postmigrate" - guest is paused following a successful 'migrate' + "prelaunch" - QEMU was started with -S and guest has not started + "finish-migrate" - guest is paused to finish the migration process + "restore-vm" - guest is paused to restore VM state + "restore-vm-failed" - guest is paused following a failed attempt to + restore the VM state + "running" - guest is actively running + "save-vm" - guest is paused to save the VM state + "shutdown" - guest is shut down (and -no-shutdown is in use) + "watchdog" - the watchdog action is configured to pause and + has been triggered Example: -> { "execute": "query-status" } -<- { "return": { "running": true, "singlestep": false } } +<- { "return": { "running": true, "singlestep": false, "status": "running" } } EQMP diff --git a/sysemu.h b/sysemu.h index 12a3f6a..6ae4db9 100644 --- a/sysemu.h +++ b/sysemu.h @@ -38,6 +38,7 @@ int qemu_uuid_parse(const char *str, uint8_t *uuid); int qemu_is_running(void); QemuState qemu_state_get(void); +const char *qemu_state_get_name(void); void qemu_state_set(QemuState state); typedef struct vm_change_state_entry VMChangeStateEntry; typedef void VMChangeStateHandler(void *opaque, int running, QemuState state); diff --git a/vl.c b/vl.c index 7fad355..e41c32f 100644 --- a/vl.c +++ b/vl.c @@ -321,6 +321,23 @@ static int default_driver_check(QemuOpts *opts, void *opaque) /***********************************************************/ /* QEMU state */ +static const char *const qemu_state_name_tbl[QSTATE_MAX] = { + [QSTATE_DEBUG] = "debug", + [QSTATE_INMIGRATE] = "incoming-migration", + [QSTATE_INTERROR] = "internal-error", + [QSTATE_IOERROR] = "io-error", + [QSTATE_PAUSED] = "paused", + [QSTATE_POSTMIGRATE] = "post-migrate", + [QSTATE_PRELAUNCH] = "prelaunch", + [QSTATE_PREMIGRATE] = "finish-migrate", + [QSTATE_RESTVM] = "restore-vm", + [QSTATE_RESTVMFAILED] = "restore-vm-failed", + [QSTATE_RUNNING] = "running", + [QSTATE_SAVEVM] = "save-vm", + [QSTATE_SHUTDOWN] = "shutdown", + [QSTATE_WATCHDOG] = "watchdog", +}; + static QemuState qemu_current_state = QSTATE_NOSTATE; QemuState qemu_state_get(void) @@ -334,6 +351,13 @@ void qemu_state_set(QemuState state) qemu_current_state = state; } +const char *qemu_state_get_name(void) +{ + assert(qemu_current_state > QSTATE_NOSTATE && + qemu_current_state < QSTATE_MAX); + return qemu_state_name_tbl[qemu_current_state]; +} + int qemu_is_running(void) { return qemu_current_state == QSTATE_RUNNING; -- 1.7.6.396.ge0613