[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH V3 09/22] cpr: HMP interfaces
From: |
Steve Sistare |
Subject: |
[PATCH V3 09/22] cpr: HMP interfaces |
Date: |
Fri, 7 May 2021 05:25:07 -0700 |
cprsave <file> <mode>
Call cprsave().
Arguments:
file : save vmstate to this file name
mode: "reboot" or "restart"
cprload <file>
Call cprload().
Arguments:
file : load vmstate from this file name
cprinfo
Print to stdout a space-delimited list of modes supported by cprsave.
Arguments: none
Signed-off-by: Mark Kanda <mark.kanda@oracle.com>
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
---
hmp-commands.hx | 44 ++++++++++++++++++++++++++++++++++++++++++++
include/monitor/hmp.h | 3 +++
monitor/hmp-cmds.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 95 insertions(+)
diff --git a/hmp-commands.hx b/hmp-commands.hx
index 435c591..5c79c5a 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -351,6 +351,50 @@ SRST
ERST
{
+ .name = "cprinfo",
+ .args_type = "",
+ .params = "",
+ .help = "return list of modes supported by cprsave",
+ .cmd = hmp_cprinfo,
+ },
+
+SRST
+``cprinfo``
+Return a space-delimited list of modes supported by cprsave.
+ERST
+
+ {
+ .name = "cprsave",
+ .args_type = "file:s,mode:s",
+ .params = "file 'restart'|'reboot'",
+ .help = "create a checkpoint of the VM in file",
+ .cmd = hmp_cprsave,
+ },
+
+SRST
+``cprsave`` *file* *mode*
+Create a checkpoint of the whole virtual machine and save it in *file*.
+If *mode* is 'reboot', the checkpoint remains valid after a host kexec
+reboot. Guest ram must be backed by persistant shared memory.
+If *mode* is 'restart', pause the VCPUs, exec /usr/bin/qemu-exec if it
+exists, else exec argv[0], passing all the original command line arguments.
+Guest ram must be allocated with the memfd-alloc machine option.
+ERST
+
+ {
+ .name = "cprload",
+ .args_type = "file:s",
+ .params = "file",
+ .help = "load VM checkpoint from file",
+ .cmd = hmp_cprload,
+ },
+
+SRST
+``cprload`` *file*
+Load a virtual machine from checkpoint file *file* and continue VCPUs.
+ERST
+
+ {
.name = "delvm",
.args_type = "name:s",
.params = "tag",
diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
index 605d572..e4ebdf1 100644
--- a/include/monitor/hmp.h
+++ b/include/monitor/hmp.h
@@ -58,6 +58,9 @@ void hmp_balloon(Monitor *mon, const QDict *qdict);
void hmp_loadvm(Monitor *mon, const QDict *qdict);
void hmp_savevm(Monitor *mon, const QDict *qdict);
void hmp_delvm(Monitor *mon, const QDict *qdict);
+void hmp_cprinfo(Monitor *mon, const QDict *qdict);
+void hmp_cprsave(Monitor *mon, const QDict *qdict);
+void hmp_cprload(Monitor *mon, const QDict *qdict);
void hmp_migrate_cancel(Monitor *mon, const QDict *qdict);
void hmp_migrate_continue(Monitor *mon, const QDict *qdict);
void hmp_migrate_incoming(Monitor *mon, const QDict *qdict);
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index 0ad5b77..e115a23 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -33,6 +33,7 @@
#include "qapi/qapi-commands-block.h"
#include "qapi/qapi-commands-char.h"
#include "qapi/qapi-commands-control.h"
+#include "qapi/qapi-commands-cpr.h"
#include "qapi/qapi-commands-machine.h"
#include "qapi/qapi-commands-migration.h"
#include "qapi/qapi-commands-misc.h"
@@ -1173,6 +1174,53 @@ void hmp_announce_self(Monitor *mon, const QDict *qdict)
qapi_free_AnnounceParameters(params);
}
+void hmp_cprinfo(Monitor *mon, const QDict *qdict)
+{
+ Error *err = NULL;
+ CprInfo *cprinfo;
+ CprModeList *mode;
+
+ cprinfo = qmp_cprinfo(&err);
+ if (err) {
+ goto out;
+ }
+
+ for (mode = cprinfo->modes; mode; mode = mode->next) {
+ monitor_printf(mon, "%s ", CprMode_str(mode->value));
+ }
+
+out:
+ hmp_handle_error(mon, err);
+ qapi_free_CprInfo(cprinfo);
+}
+
+void hmp_cprsave(Monitor *mon, const QDict *qdict)
+{
+ Error *err = NULL;
+ const char *mode;
+ int val;
+
+ mode = qdict_get_try_str(qdict, "mode");
+ val = qapi_enum_parse(&CprMode_lookup, mode, -1, &err);
+
+ if (val == -1) {
+ goto out;
+ }
+
+ qmp_cprsave(qdict_get_try_str(qdict, "file"), val, &err);
+
+out:
+ hmp_handle_error(mon, err);
+}
+
+void hmp_cprload(Monitor *mon, const QDict *qdict)
+{
+ Error *err = NULL;
+
+ qmp_cprload(qdict_get_try_str(qdict, "file"), &err);
+ hmp_handle_error(mon, err);
+}
+
void hmp_migrate_cancel(Monitor *mon, const QDict *qdict)
{
qmp_migrate_cancel(NULL);
--
1.8.3.1
- [PATCH V3 08/22] cpr: QMP interfaces, (continued)
- [PATCH V3 08/22] cpr: QMP interfaces, Steve Sistare, 2021/05/07
- [PATCH V3 17/22] chardev: cpr for simple devices, Steve Sistare, 2021/05/07
- [PATCH V3 19/22] chardev: cpr for sockets, Steve Sistare, 2021/05/07
- [PATCH V3 20/22] cpr: only-cpr-capable option, Steve Sistare, 2021/05/07
- [PATCH V3 18/22] chardev: cpr for pty, Steve Sistare, 2021/05/07
- [PATCH V3 16/22] chardev: cpr framework, Steve Sistare, 2021/05/07
- [PATCH V3 22/22] simplify savevm, Steve Sistare, 2021/05/07
- [PATCH V3 21/22] cpr: maintainers, Steve Sistare, 2021/05/07
- [PATCH V3 09/22] cpr: HMP interfaces,
Steve Sistare <=
- Re: [PATCH V3 00/22] Live Update, no-reply, 2021/05/07
- Re: [PATCH V3 00/22] Live Update, Stefan Hajnoczi, 2021/05/12
- Re: [PATCH V3 00/22] Live Update, Steven Sistare, 2021/05/13
- Re: [PATCH V3 00/22] Live Update, Stefan Hajnoczi, 2021/05/14
- Re: [PATCH V3 00/22] Live Update, Steven Sistare, 2021/05/14
- Re: [PATCH V3 00/22] Live Update, Stefan Hajnoczi, 2021/05/17
- Re: [PATCH V3 00/22] Live Update, Alex Williamson, 2021/05/17
- Re: [PATCH V3 00/22] Live Update, Stefan Hajnoczi, 2021/05/18
- Re: [PATCH V3 00/22] Live Update, Steven Sistare, 2021/05/18