[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH V5 04/25] cpr: HMP interfaces for reboot
From: |
Zheng Chuan |
Subject: |
Re: [PATCH V5 04/25] cpr: HMP interfaces for reboot |
Date: |
Wed, 28 Jul 2021 12:55:44 +0800 |
User-agent: |
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 |
Hi
On 2021/7/8 1:20, Steve Sistare wrote:
> cprsave <file> <mode>
> Call cprsave().
> Arguments:
> file : save vmstate to this file name
> mode: must be "reboot"
>
> 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 8e45bce..11827ae 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 'reboot'",
> + .help = "create a checkpoint of the VM in file",
> + .cmd = hmp_cprsave,
> + },
> +
> +SRST
> +``cprsave`` *file* *mode*
> +Pause the VCPUs,
> +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, and guest ram must be backed by persistant shared memory. To
Should be persistent.
> +resume from the checkpoint, issue the quit command, reboot the system,
> +and issue the cprload command.
> +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 3baa105..98bb775 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 0942027..8e80581 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"
> @@ -1177,6 +1178,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);
>
--
Regards.
Chuan
- [PATCH V5 06/25] oslib: qemu_clr_cloexec, (continued)
- [PATCH V5 06/25] oslib: qemu_clr_cloexec, Steve Sistare, 2021/07/07
- [PATCH V5 03/25] cpr: QMP interfaces for reboot, Steve Sistare, 2021/07/07
- [PATCH V5 01/25] qemu_ram_volatile, Steve Sistare, 2021/07/07
- [PATCH V5 04/25] cpr: HMP interfaces for reboot, Steve Sistare, 2021/07/07
- Re: [PATCH V5 04/25] cpr: HMP interfaces for reboot,
Zheng Chuan <=
- [PATCH V5 07/25] machine: memfd-alloc option, Steve Sistare, 2021/07/07
- [PATCH V5 12/25] cpr: QMP interfaces for restart, Steve Sistare, 2021/07/07
- [PATCH V5 13/25] cpr: HMP interfaces for restart, Steve Sistare, 2021/07/07
- [PATCH V5 09/25] string to strList, Steve Sistare, 2021/07/07