From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:38651) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qsffi-0001jj-E5 for qemu-devel@nongnu.org; Sun, 14 Aug 2011 14:44:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qsffh-0002Du-AJ for qemu-devel@nongnu.org; Sun, 14 Aug 2011 14:44:30 -0400 Received: from mail-pz0-f42.google.com ([209.85.210.42]:58789) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qsffh-0002Dp-18 for qemu-devel@nongnu.org; Sun, 14 Aug 2011 14:44:29 -0400 Received: by pzk37 with SMTP id 37so7526967pzk.29 for ; Sun, 14 Aug 2011 11:44:28 -0700 (PDT) Message-ID: <4E47FB66.7070509@codemonkey.ws> Date: Sun, 14 Aug 2011 11:44:22 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <1313008408-23161-1-git-send-email-lcapitulino@redhat.com> <1313008408-23161-8-git-send-email-lcapitulino@redhat.com> In-Reply-To: <1313008408-23161-8-git-send-email-lcapitulino@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 7/8] QMP: query-status: Introduce 'status' key List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: kwolf@redhat.com, jan.kiszka@siemens.com, qemu-devel@nongnu.org, armbru@redhat.com, avi@redhat.com, amit.shah@redhat.com On 08/10/2011 03:33 PM, Luiz Capitulino wrote: > 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 > --- > 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 82d19c0..c9e65fa 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -2622,8 +2622,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 }", > - vm_is_running(), singlestep); > + *ret_data = qobject_from_jsonf("{ 'running': %i, 'singlestep': %i, 'status': %s }", vm_is_running(), singlestep, runstate_get_name()); > } > > static qemu_acl *find_acl(Monitor *mon, const char *name) > diff --git a/qmp-commands.hx b/qmp-commands.hx > index 03f67da..cb73706 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 9a8ea78..60d882d 100644 > --- a/sysemu.h > +++ b/sysemu.h > @@ -38,6 +38,7 @@ int qemu_uuid_parse(const char *str, uint8_t *uuid); > > int vm_is_running(void); > RunState runstate_get(void); > +const char *runstate_get_name(void); > void runstate_set(RunState state); > typedef struct vm_change_state_entry VMChangeStateEntry; > typedef void VMChangeStateHandler(void *opaque, int running, RunState state); > diff --git a/vl.c b/vl.c > index 537c5fb..61c3743 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 runstate_name_tbl[RSTATE_MAX] = { > + [RSTATE_DEBUG] = "debug", > + [RSTATE_IN_MIGRATE] = "incoming-migration", > + [RSTATE_PANICKED] = "internal-error", > + [RSTATE_IO_ERROR] = "io-error", > + [RSTATE_PAUSED] = "paused", > + [RSTATE_POST_MIGRATE] = "post-migrate", > + [RSTATE_PRE_LAUNCH] = "prelaunch", > + [RSTATE_PRE_MIGRATE] = "finish-migrate", > + [RSTATE_RESTORE] = "restore-vm", > + [RSTATE_RESTORE_FAILED] = "restore-vm-failed", > + [RSTATE_RUNNING] = "running", > + [RSTATE_SAVEVM] = "save-vm", > + [RSTATE_SHUTDOWN] = "shutdown", > + [RSTATE_WATCHDOG] = "watchdog", > +}; > + > static RunState current_run_state = RSTATE_NO_STATE; > > RunState runstate_get(void) > @@ -334,6 +351,13 @@ void runstate_set(RunState state) > current_run_state = state; > } > > +const char *runstate_get_name(void) > +{ > + assert(current_run_state> RSTATE_NO_STATE&& > + current_run_state< RSTATE_MAX); > + return runstate_name_tbl[current_run_state]; > +} > + Minor suggestion: const char *runstate_as_string(void); Regards, Anthony Liguori > int vm_is_running(void) > { > return current_run_state == RSTATE_RUNNING;