[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH V2 03/11] migration: save cpr mode
From: |
Steve Sistare |
Subject: |
[PATCH V2 03/11] migration: save cpr mode |
Date: |
Sun, 30 Jun 2024 12:40:26 -0700 |
Save the mode in CPR state, so the user does not need to explicitly specify
it for the target. Modify migrate_mode() so it returns the incoming mode on
the target.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
---
include/migration/cpr.h | 7 +++++++
migration/cpr.c | 23 ++++++++++++++++++++++-
migration/migration.c | 1 +
migration/options.c | 9 +++++++--
4 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/include/migration/cpr.h b/include/migration/cpr.h
index 8e7e705..42b4019 100644
--- a/include/migration/cpr.h
+++ b/include/migration/cpr.h
@@ -8,6 +8,13 @@
#ifndef MIGRATION_CPR_H
#define MIGRATION_CPR_H
+#include "qapi/qapi-types-migration.h"
+
+#define MIG_MODE_NONE MIG_MODE__MAX
+
+MigMode cpr_get_incoming_mode(void);
+void cpr_set_incoming_mode(MigMode mode);
+
typedef int (*cpr_walk_fd_cb)(int fd);
void cpr_save_fd(const char *name, int id, int fd);
void cpr_delete_fd(const char *name, int id);
diff --git a/migration/cpr.c b/migration/cpr.c
index 313e74e..1c296c6 100644
--- a/migration/cpr.c
+++ b/migration/cpr.c
@@ -21,10 +21,23 @@
typedef QLIST_HEAD(CprFdList, CprFd) CprFdList;
typedef struct CprState {
+ MigMode mode;
CprFdList fds;
} CprState;
-static CprState cpr_state;
+static CprState cpr_state = {
+ .mode = MIG_MODE_NONE,
+};
+
+MigMode cpr_get_incoming_mode(void)
+{
+ return cpr_state.mode;
+}
+
+void cpr_set_incoming_mode(MigMode mode)
+{
+ cpr_state.mode = mode;
+}
/****************************************************************************/
@@ -124,11 +137,19 @@ void cpr_resave_fd(const char *name, int id, int fd)
/*************************************************************************/
#define CPR_STATE "CprState"
+static int cpr_state_presave(void *opaque)
+{
+ cpr_state.mode = migrate_mode();
+ return 0;
+}
+
static const VMStateDescription vmstate_cpr_state = {
.name = CPR_STATE,
.version_id = 1,
.minimum_version_id = 1,
+ .pre_save = cpr_state_presave,
.fields = (VMStateField[]) {
+ VMSTATE_UINT32(mode, CprState),
VMSTATE_QLIST_V(fds, CprState, 1, vmstate_cpr_fd, CprFd, next),
VMSTATE_END_OF_LIST()
}
diff --git a/migration/migration.c b/migration/migration.c
index e394ad7..0f47765 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -411,6 +411,7 @@ void migration_incoming_state_destroy(void)
mis->postcopy_qemufile_dst = NULL;
}
+ cpr_set_incoming_mode(MIG_MODE_NONE);
yank_unregister_instance(MIGRATION_YANK_INSTANCE);
}
diff --git a/migration/options.c b/migration/options.c
index 645f550..305397a 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -22,6 +22,7 @@
#include "qapi/qmp/qnull.h"
#include "sysemu/runstate.h"
#include "migration/colo.h"
+#include "migration/cpr.h"
#include "migration/misc.h"
#include "migration.h"
#include "migration-stats.h"
@@ -758,8 +759,12 @@ uint64_t migrate_max_postcopy_bandwidth(void)
MigMode migrate_mode(void)
{
- MigrationState *s = migrate_get_current();
- MigMode mode = s->parameters.mode;
+ MigMode mode = cpr_get_incoming_mode();
+
+ if (mode == MIG_MODE_NONE) {
+ MigrationState *s = migrate_get_current();
+ mode = s->parameters.mode;
+ }
assert(mode >= 0 && mode < MIG_MODE__MAX);
return mode;
--
1.8.3.1
- [PATCH V2 00/11] Live update: cpr-exec, Steve Sistare, 2024/06/30
- [PATCH V2 03/11] migration: save cpr mode,
Steve Sistare <=
- [PATCH V2 01/11] machine: alloc-anon option, Steve Sistare, 2024/06/30
- [PATCH V2 02/11] migration: cpr-state, Steve Sistare, 2024/06/30
- [PATCH V2 04/11] migration: stop vm earlier for cpr, Steve Sistare, 2024/06/30
- [PATCH V2 08/11] vl: helper to request exec, Steve Sistare, 2024/06/30
- [PATCH V2 06/11] migration: fix mismatched GPAs during cpr, Steve Sistare, 2024/06/30
- [PATCH V2 07/11] oslib: qemu_clear_cloexec, Steve Sistare, 2024/06/30
- [PATCH V2 10/11] migration: cpr-exec save and load, Steve Sistare, 2024/06/30
- [PATCH V2 09/11] migration: cpr-exec-command parameter, Steve Sistare, 2024/06/30
- [PATCH V2 11/11] migration: cpr-exec mode, Steve Sistare, 2024/06/30
- [PATCH V2 05/11] physmem: preserve ram blocks for cpr, Steve Sistare, 2024/06/30