From patchwork Wed Aug 10 20:33:27 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Capitulino X-Patchwork-Id: 109462 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id C24FBB6F7A for ; Thu, 11 Aug 2011 07:29:50 +1000 (EST) Received: from localhost ([::1]:50803 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QrFTw-00026s-Q9 for incoming@patchwork.ozlabs.org; Wed, 10 Aug 2011 16:34:28 -0400 Received: from eggs.gnu.org ([140.186.70.92]:37928) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QrFTQ-00010z-R7 for qemu-devel@nongnu.org; Wed, 10 Aug 2011 16:34:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QrFTL-00087j-6D for qemu-devel@nongnu.org; Wed, 10 Aug 2011 16:33:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:32905) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QrFTK-00087b-TR for qemu-devel@nongnu.org; Wed, 10 Aug 2011 16:33:51 -0400 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p7AKXnVG005222 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 10 Aug 2011 16:33:50 -0400 Received: from localhost (ovpn-113-72.phx2.redhat.com [10.3.113.72]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p7AKXmRp030670; Wed, 10 Aug 2011 16:33:49 -0400 From: Luiz Capitulino To: qemu-devel@nongnu.org Date: Wed, 10 Aug 2011 17:33:27 -0300 Message-Id: <1313008408-23161-8-git-send-email-lcapitulino@redhat.com> In-Reply-To: <1313008408-23161-1-git-send-email-lcapitulino@redhat.com> References: <1313008408-23161-1-git-send-email-lcapitulino@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.132.183.28 Cc: kwolf@redhat.com, aliguori@us.ibm.com, jan.kiszka@siemens.com, armbru@redhat.com, avi@redhat.com, amit.shah@redhat.com Subject: [Qemu-devel] [PATCH 7/8] QMP: query-status: Introduce 'status' key X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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]; +} + int vm_is_running(void) { return current_run_state == RSTATE_RUNNING;