[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH V1 14/32] savevm: VMS_RESTART and cprsave restart
From: |
Steve Sistare |
Subject: |
[PATCH V1 14/32] savevm: VMS_RESTART and cprsave restart |
Date: |
Thu, 30 Jul 2020 08:14:18 -0700 |
Add the VMS_RESTART variant of vmstate, for use when upgrading qemu in place
on the same host without a reboot. Invoke it using:
cprsave <filename> restart
VMS_RESTART supports guest ram mapped by private anonymous memory, versus
VMS_REBOOT which requires that guest ram be mapped by persistent shared
memory. Subsequent patches complete its implementation.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
---
hmp-commands.hx | 4 +++-
include/migration/vmstate.h | 1 +
migration/savevm.c | 4 +++-
monitor/qmp-cmds.c | 2 +-
qapi/migration.json | 1 +
5 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/hmp-commands.hx b/hmp-commands.hx
index 7517876..11a2089 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -369,7 +369,7 @@ ERST
{
.name = "cprsave",
.args_type = "file:s,mode:s",
- .params = "file 'reboot'",
+ .params = "file 'restart'|'reboot'",
.help = "create a checkpoint of the VM in file",
.cmd = hmp_cprsave,
},
@@ -380,6 +380,8 @@ SRST
in *file*.
If *mode* is 'reboot', the checkpoint can be cprload'ed after a host kexec
reboot.
+ If *mode* is 'restart', the checkpoint can be cprload'ed after restarting
+ qemu.
exec() /usr/bin/qemu-exec if it exists, else exec
/usr/bin/qemu-system-x86_64,
passing all the original command line arguments. The VCPUs remain paused.
ERST
diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index c58551a..8239b84 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -162,6 +162,7 @@ typedef enum {
VMS_MIGRATE = (1U << 1),
VMS_SNAPSHOT = (1U << 2),
VMS_REBOOT = (1U << 3),
+ VMS_RESTART = (1U << 4),
VMS_MODE_ALL = ~0U
} VMStateMode;
diff --git a/migration/savevm.c b/migration/savevm.c
index 00f493b..38cc63a 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -2708,6 +2708,8 @@ void save_cpr_snapshot(const char *file, const char
*mode, Error **errp)
if (!strcmp(mode, "reboot")) {
op = VMS_REBOOT;
+ } else if (!strcmp(mode, "restart")) {
+ op = VMS_RESTART;
} else {
error_setg(errp, "cprsave: bad mode %s", mode);
return;
@@ -2973,7 +2975,7 @@ void load_cpr_snapshot(const char *file, Error **errp)
return;
}
- ret = qemu_loadvm_state(f, VMS_REBOOT);
+ ret = qemu_loadvm_state(f, VMS_REBOOT | VMS_RESTART);
qemu_fclose(f);
if (ret < 0) {
error_setg(errp, "Error %d while loading VM state", ret);
diff --git a/monitor/qmp-cmds.c b/monitor/qmp-cmds.c
index 8c400e6..8a74c6e 100644
--- a/monitor/qmp-cmds.c
+++ b/monitor/qmp-cmds.c
@@ -164,7 +164,7 @@ void qmp_cont(Error **errp)
char *qmp_cprinfo(Error **errp)
{
- return g_strdup("reboot");
+ return g_strdup("reboot restart");
}
void qmp_cprsave(const char *file, const char *mode, Error **errp)
diff --git a/qapi/migration.json b/qapi/migration.json
index 8190b16..d22992b 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -1639,6 +1639,7 @@
#
# @file: name of checkpoint file
# @mode: 'reboot' : checkpoint can be cprload'ed after a host kexec reboot.
+# 'restart': checkpoint can be cprload'ed after restarting qemu.
#
# Since 5.0
##
--
1.8.3.1
- [PATCH V1 01/32] savevm: add vmstate handler iterators, (continued)
- [PATCH V1 01/32] savevm: add vmstate handler iterators, Steve Sistare, 2020/07/30
- [PATCH V1 08/32] savevm: HMP command for cprinfo, Steve Sistare, 2020/07/30
- [PATCH V1 06/32] savevm: HMP Command for cprload, Steve Sistare, 2020/07/30
- [PATCH V1 11/32] cpu: disable ticks when suspended, Steve Sistare, 2020/07/30
- [PATCH V1 12/32] vl: pause option, Steve Sistare, 2020/07/30
- [PATCH V1 14/32] savevm: VMS_RESTART and cprsave restart,
Steve Sistare <=
- [PATCH V1 15/32] vl: QEMU_START_FREEZE env var, Steve Sistare, 2020/07/30
- [PATCH V1 16/32] oslib: add qemu_clr_cloexec, Steve Sistare, 2020/07/30
- [PATCH V1 17/32] util: env var helpers, Steve Sistare, 2020/07/30
- [PATCH V1 20/32] vl: add helper to request re-exec, Steve Sistare, 2020/07/30
- [PATCH V1 22/32] char: qio_channel_socket_accept reuse fd, Steve Sistare, 2020/07/30
- [PATCH V1 28/32] char: restore terminal on restart, Steve Sistare, 2020/07/30
- [PATCH V1 29/32] pci: export pci_update_mappings, Steve Sistare, 2020/07/30
- [PATCH V1 25/32] char: save/restore chardev pty fds, Steve Sistare, 2020/07/30