From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41149) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aJg5d-0005Go-HN for qemu-devel@nongnu.org; Thu, 14 Jan 2016 06:29:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aJg5Z-0007LN-V8 for qemu-devel@nongnu.org; Thu, 14 Jan 2016 06:29:17 -0500 Received: from mailhub.sw.ru ([195.214.232.25]:17417 helo=relay.sw.ru) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aJg5Z-0007LB-GW for qemu-devel@nongnu.org; Thu, 14 Jan 2016 06:29:13 -0500 From: "Denis V. Lunev" Date: Thu, 14 Jan 2016 14:28:58 +0300 Message-Id: <1452770941-21582-6-git-send-email-den@openvz.org> In-Reply-To: <1452770941-21582-1-git-send-email-den@openvz.org> References: <1452770941-21582-1-git-send-email-den@openvz.org> Subject: [Qemu-devel] [PATCH 5/8] qmp: create QMP implementation of loadvm command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Juan Quintela , qemu-devel@nongnu.org, Markus Armbruster , Amit Shah , "Denis V. Lunev" Unfortunately load_vmstate has a return code (int) and this code is checked in the other places. Thus we could not just rename it to qmp_loadvm as returns void. Signed-off-by: Denis V. Lunev CC: Juan Quintela CC: Amit Shah CC: Markus Armbruster CC: Eric Blake --- migration/savevm.c | 10 ++++++++++ monitor.c | 8 ++------ qapi-schema.json | 13 +++++++++++++ qmp-commands.hx | 23 +++++++++++++++++++++++ 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/migration/savevm.c b/migration/savevm.c index 3de917e..6b34017 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -2096,6 +2096,16 @@ int load_vmstate(const char *name, Error **errp) return 0; } +void qmp_loadvm(const char *name, Error **errp) +{ + int saved_vm_running = runstate_is_running(); + vm_stop(RUN_STATE_RESTORE_VM); + + if (load_vmstate(name, errp) == 0 && saved_vm_running) { + vm_start(); + } +} + void qmp_delvm(const char *name, Error **errp) { BlockDriverState *bs; diff --git a/monitor.c b/monitor.c index 2ddf6c1..c1e998c 100644 --- a/monitor.c +++ b/monitor.c @@ -1737,16 +1737,12 @@ void qmp_closefd(const char *fdname, Error **errp) static void hmp_loadvm(Monitor *mon, const QDict *qdict) { - int saved_vm_running = runstate_is_running(); const char *name = qdict_get_str(qdict, "name"); Error *local_err = NULL; - vm_stop(RUN_STATE_RESTORE_VM); - - if (load_vmstate(name, &local_err) < 0) { + qmp_loadvm(name, &local_err); + if (local_err != NULL) { error_report_err(local_err); - } else if (saved_vm_running) { - vm_start(); } } diff --git a/qapi-schema.json b/qapi-schema.json index 94a2764..7d48948 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -4080,3 +4080,16 @@ # Since 2.6 ## { 'command': 'delvm', 'data': {'name': 'str'} } + +## +# @loadvm +# +# Load a VM snapshot +# +# @name: identifier of a snapshot to be loaded +# +# Returns: Nothing on success +# +# Since 2.6 +## +{ 'command': 'loadvm', 'data': {'name': 'str'} } diff --git a/qmp-commands.hx b/qmp-commands.hx index 5e6f573..9cd1bfe 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -4843,3 +4843,26 @@ EQMP .args_type = "name:s", .mhandler.cmd_new = qmp_marshal_delvm, }, + +SQMP +loadvm +------ + +Load a VM snapshot + +Arguments: + +- "name": snapshot name + +Example: + +-> { "execute": "loadvm", "arguments": { "name": "snapshot1" } } +<- { "return": {} } + +EQMP + + { + .name = "loadvm", + .args_type = "name:s", + .mhandler.cmd_new = qmp_marshal_loadvm, + }, -- 2.5.0