* [PATCH 00/43] Migration: Create options.c for capabilities/params/properties
@ 2023-03-02 16:33 Juan Quintela
2023-03-02 16:33 ` [PATCH 01/43] migration: rename enabled_capabilities to capabilities Juan Quintela
` (43 more replies)
0 siblings, 44 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Hi
This series move to options.c:
- all migration capabilities code
- all migration parameters code
- all properties code
- all qmp commands that only touch the previous
And once there:
- sort of functions
- make consistent and coherent all the functions naming/typing
- create accessors for the parameters/capabilties that don't exist
- more cleanups here and there.
Todo:
- There is still capabilities code on savevm.c, but I want this in
before moving that code to options.c, but still needs more thought
for my part. I.e. should I put vmstate sections in options.c, or
should I create new functions to access the capabilities in savevm.c.
Please review.
Juan Quintela (43):
migration: rename enabled_capabilities to capabilities
migration: Pass migrate_caps_check() the old and new caps
migration: Create migration_cap_set()
migration: create options.c
migration: Move migrate_colo_enabled() to options.c
migration: Move migrate_use_compression() to options.c
migration: Move migrate_use_events() to options.c
migration: Move migrate_use_multifd() to options.c
migration: Move migrate_use_zero_copy_send() to options.c
migration: Move migrate_use_xbzrle() to options.c
migration: Move migrate_use_block() to options.c
migration: Move migrate_use_return() to options.c
migration: Create migrate_rdma_pin_all() function
migration: Move migrate_caps_check() to options.c
migration: Move qmp_query_migrate_capabilities() to options.c
migration: Move qmp_migrate_set_capabilities() to options.c
migration: Move migrate_cap_set() to options.c
migration: Move parameters functions to option.c
migration: Use migrate_max_postcopy_bandwidth()
migration: Move migrate_use_block_incremental() to option.c
migration: Create migrate_throttle_trigger_threshold()
migration: Create migrate_checkpoint_delay()
migration: Create migrate_max_cpu_throttle()
migration: Move migrate_announce_params() to option.c
migration: Create migrate_cpu_throttle_initial() to option.c
migration: Create migrate_cpu_throttle_increment() function
migration: Create migrate_cpu_throttle_tailslow() function
migration: Move migrate_use_tls() to options.c
migration: Move migrate_postcopy() to options.c
migration: Create migrate_max_bandwidth() function
migration: Move qmp_query_migrate_parameters() to options.c
migration: Move qmp_migrate_set_parameters() to options.c
migration: Create migrate_params_init() function
migration: Make all functions check have the same format
migration: Create migrate_downtime_limit() function
migration: Move migrate_set_block_incremental() to options.c
migration: Move block_cleanup_parameters() to options.c
migration: Remove MigrationState from block_cleanup_parameters()
migration: Create migrate_tls_creds() function
migration: Create migrate_tls_authz() function
migration: Create migrate_tls_hostname() function
migration: Create migrate_block_bitmap_mapping() function
migration: Move migration_properties to options.c
migration/migration.h | 44 +-
migration/options.h | 108 +++
hw/virtio/virtio-balloon.c | 1 +
migration/block-dirty-bitmap.c | 15 +-
migration/block.c | 5 +-
migration/colo.c | 6 +-
migration/migration.c | 1325 +-------------------------------
migration/multifd-zlib.c | 1 +
migration/multifd-zstd.c | 1 +
migration/multifd.c | 24 +-
migration/options.c | 1318 +++++++++++++++++++++++++++++++
migration/postcopy-ram.c | 1 +
migration/ram.c | 43 +-
migration/rdma.c | 6 +-
migration/savevm.c | 9 +-
migration/socket.c | 5 +-
migration/tls.c | 23 +-
migration/meson.build | 1 +
18 files changed, 1529 insertions(+), 1407 deletions(-)
create mode 100644 migration/options.h
create mode 100644 migration/options.c
--
2.39.2
^ permalink raw reply [flat|nested] 62+ messages in thread
* [PATCH 01/43] migration: rename enabled_capabilities to capabilities
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-06 14:27 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 02/43] migration: Pass migrate_caps_check() the old and new caps Juan Quintela
` (42 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
It is clear from the context what that means, and such a long name
with the extra long names of the capabilities make very difficilut to
stay inside the 80 columns limit.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 2 +-
migration/migration.c | 52 +++++++++++++++++++++----------------------
migration/rdma.c | 4 ++--
migration/savevm.c | 6 ++---
4 files changed, 31 insertions(+), 33 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 2da2f8a164..b07efaf259 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -299,7 +299,7 @@ struct MigrationState {
int64_t downtime_start;
int64_t downtime;
int64_t expected_downtime;
- bool enabled_capabilities[MIGRATION_CAPABILITY__MAX];
+ bool capabilities[MIGRATION_CAPABILITY__MAX];
int64_t setup_time;
/*
* Whether guest was running when we enter the completion stage.
diff --git a/migration/migration.c b/migration/migration.c
index 67799f0958..f7e7c4f2b3 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -363,8 +363,7 @@ static bool migrate_late_block_activate(void)
s = migrate_get_current();
- return s->enabled_capabilities[
- MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
+ return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
}
/*
@@ -943,7 +942,7 @@ MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
#endif
caps = g_malloc0(sizeof(*caps));
caps->capability = i;
- caps->state = s->enabled_capabilities[i];
+ caps->state = s->capabilities[i];
QAPI_LIST_APPEND(tail, caps);
}
@@ -1462,13 +1461,13 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
return;
}
- memcpy(cap_list, s->enabled_capabilities, sizeof(cap_list));
+ memcpy(cap_list, s->capabilities, sizeof(cap_list));
if (!migrate_caps_check(cap_list, params, errp)) {
return;
}
for (cap = params; cap; cap = cap->next) {
- s->enabled_capabilities[cap->value->capability] = cap->value->state;
+ s->capabilities[cap->value->capability] = cap->value->state;
}
}
@@ -2537,7 +2536,7 @@ bool migrate_release_ram(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
+ return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
}
bool migrate_postcopy_ram(void)
@@ -2546,7 +2545,7 @@ bool migrate_postcopy_ram(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
+ return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
}
bool migrate_postcopy(void)
@@ -2560,7 +2559,7 @@ bool migrate_auto_converge(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
+ return s->capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
}
bool migrate_zero_blocks(void)
@@ -2569,7 +2568,7 @@ bool migrate_zero_blocks(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
+ return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
}
bool migrate_postcopy_blocktime(void)
@@ -2578,7 +2577,7 @@ bool migrate_postcopy_blocktime(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME];
+ return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME];
}
bool migrate_use_compression(void)
@@ -2587,7 +2586,7 @@ bool migrate_use_compression(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_COMPRESS];
+ return s->capabilities[MIGRATION_CAPABILITY_COMPRESS];
}
int migrate_compress_level(void)
@@ -2632,7 +2631,7 @@ bool migrate_dirty_bitmaps(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
+ return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
}
bool migrate_ignore_shared(void)
@@ -2641,7 +2640,7 @@ bool migrate_ignore_shared(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED];
+ return s->capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED];
}
bool migrate_validate_uuid(void)
@@ -2650,7 +2649,7 @@ bool migrate_validate_uuid(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
+ return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
}
bool migrate_use_events(void)
@@ -2659,7 +2658,7 @@ bool migrate_use_events(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_EVENTS];
+ return s->capabilities[MIGRATION_CAPABILITY_EVENTS];
}
bool migrate_use_multifd(void)
@@ -2668,7 +2667,7 @@ bool migrate_use_multifd(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_MULTIFD];
+ return s->capabilities[MIGRATION_CAPABILITY_MULTIFD];
}
bool migrate_pause_before_switchover(void)
@@ -2677,8 +2676,7 @@ bool migrate_pause_before_switchover(void)
s = migrate_get_current();
- return s->enabled_capabilities[
- MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER];
+ return s->capabilities[MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER];
}
int migrate_multifd_channels(void)
@@ -2725,7 +2723,7 @@ bool migrate_use_zero_copy_send(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
+ return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
}
#endif
@@ -2744,7 +2742,7 @@ int migrate_use_xbzrle(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_XBZRLE];
+ return s->capabilities[MIGRATION_CAPABILITY_XBZRLE];
}
uint64_t migrate_xbzrle_cache_size(void)
@@ -2771,7 +2769,7 @@ bool migrate_use_block(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_BLOCK];
+ return s->capabilities[MIGRATION_CAPABILITY_BLOCK];
}
bool migrate_use_return_path(void)
@@ -2780,7 +2778,7 @@ bool migrate_use_return_path(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_RETURN_PATH];
+ return s->capabilities[MIGRATION_CAPABILITY_RETURN_PATH];
}
bool migrate_use_block_incremental(void)
@@ -2798,7 +2796,7 @@ bool migrate_background_snapshot(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
+ return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
}
bool migrate_postcopy_preempt(void)
@@ -2807,7 +2805,7 @@ bool migrate_postcopy_preempt(void)
s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT];
+ return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT];
}
/* migration thread support */
@@ -3546,7 +3544,7 @@ fail:
bool migrate_colo_enabled(void)
{
MigrationState *s = migrate_get_current();
- return s->enabled_capabilities[MIGRATION_CAPABILITY_X_COLO];
+ return s->capabilities[MIGRATION_CAPABILITY_X_COLO];
}
typedef enum MigThrError {
@@ -4381,7 +4379,7 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
}
#define DEFINE_PROP_MIG_CAP(name, x) \
- DEFINE_PROP_BOOL(name, MigrationState, enabled_capabilities[x], false)
+ DEFINE_PROP_BOOL(name, MigrationState, capabilities[x], false)
static Property migration_properties[] = {
DEFINE_PROP_BOOL("store-global-state", MigrationState,
@@ -4578,7 +4576,7 @@ static bool migration_object_check(MigrationState *ms, Error **errp)
}
for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
- if (ms->enabled_capabilities[i]) {
+ if (ms->capabilities[i]) {
QAPI_LIST_PREPEND(head, migrate_cap_add(i, true));
}
}
diff --git a/migration/rdma.c b/migration/rdma.c
index 288eadc2d2..35f3d6bebe 100644
--- a/migration/rdma.c
+++ b/migration/rdma.c
@@ -4178,7 +4178,7 @@ void rdma_start_outgoing_migration(void *opaque,
}
ret = qemu_rdma_source_init(rdma,
- s->enabled_capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL], errp);
+ s->capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL], errp);
if (ret) {
goto err;
@@ -4200,7 +4200,7 @@ void rdma_start_outgoing_migration(void *opaque,
}
ret = qemu_rdma_source_init(rdma_return_path,
- s->enabled_capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL], errp);
+ s->capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL], errp);
if (ret) {
goto return_path_err;
diff --git a/migration/savevm.c b/migration/savevm.c
index aa54a67fda..589ef926ab 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -253,7 +253,7 @@ static uint32_t get_validatable_capabilities_count(void)
uint32_t result = 0;
int i;
for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
- if (should_validate_capability(i) && s->enabled_capabilities[i]) {
+ if (should_validate_capability(i) && s->capabilities[i]) {
result++;
}
}
@@ -275,7 +275,7 @@ static int configuration_pre_save(void *opaque)
state->capabilities = g_renew(MigrationCapability, state->capabilities,
state->caps_count);
for (i = j = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
- if (should_validate_capability(i) && s->enabled_capabilities[i]) {
+ if (should_validate_capability(i) && s->capabilities[i]) {
state->capabilities[j++] = i;
}
}
@@ -325,7 +325,7 @@ static bool configuration_validate_capabilities(SaveState *state)
continue;
}
source_state = test_bit(i, source_caps_bm);
- target_state = s->enabled_capabilities[i];
+ target_state = s->capabilities[i];
if (source_state != target_state) {
error_report("Capability %s is %s, but received capability is %s",
MigrationCapability_str(i),
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 02/43] migration: Pass migrate_caps_check() the old and new caps
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
2023-03-02 16:33 ` [PATCH 01/43] migration: rename enabled_capabilities to capabilities Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-06 14:40 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 03/43] migration: Create migration_cap_set() Juan Quintela
` (41 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
We used to pass the old capabilities array and the new
capabilities as a list.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 80 +++++++++++++++++--------------------------
1 file changed, 31 insertions(+), 49 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index f7e7c4f2b3..119027a656 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1267,30 +1267,20 @@ WriteTrackingSupport migrate_query_write_tracking(void)
}
/**
- * @migration_caps_check - check capability validity
+ * @migration_caps_check - check capability compatibility
*
- * @cap_list: old capability list, array of bool
- * @params: new capabilities to be applied soon
+ * @old_caps: old capability list
+ * @new_caps: new capability list
* @errp: set *errp if the check failed, with reason
*
* Returns true if check passed, otherwise false.
*/
-static bool migrate_caps_check(bool *cap_list,
- MigrationCapabilityStatusList *params,
- Error **errp)
+static bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
{
- MigrationCapabilityStatusList *cap;
- bool old_postcopy_cap;
MigrationIncomingState *mis = migration_incoming_get_current();
- old_postcopy_cap = cap_list[MIGRATION_CAPABILITY_POSTCOPY_RAM];
-
- for (cap = params; cap; cap = cap->next) {
- cap_list[cap->value->capability] = cap->value->state;
- }
-
#ifndef CONFIG_LIVE_BLOCK_MIGRATION
- if (cap_list[MIGRATION_CAPABILITY_BLOCK]) {
+ if (new_caps[MIGRATION_CAPABILITY_BLOCK]) {
error_setg(errp, "QEMU compiled without old-style (blk/-b, inc/-i) "
"block migration");
error_append_hint(errp, "Use drive_mirror+NBD instead.\n");
@@ -1299,7 +1289,7 @@ static bool migrate_caps_check(bool *cap_list,
#endif
#ifndef CONFIG_REPLICATION
- if (cap_list[MIGRATION_CAPABILITY_X_COLO]) {
+ if (new_caps[MIGRATION_CAPABILITY_X_COLO]) {
error_setg(errp, "QEMU compiled without replication module"
" can't enable COLO");
error_append_hint(errp, "Please enable replication before COLO.\n");
@@ -1307,12 +1297,13 @@ static bool migrate_caps_check(bool *cap_list,
}
#endif
- if (cap_list[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
+ if (new_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
/* This check is reasonably expensive, so only when it's being
* set the first time, also it's only the destination that needs
* special support.
*/
- if (!old_postcopy_cap && runstate_check(RUN_STATE_INMIGRATE) &&
+ if (!old_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM] &&
+ runstate_check(RUN_STATE_INMIGRATE) &&
!postcopy_ram_supported_by_host(mis)) {
/* postcopy_ram_supported_by_host will have emitted a more
* detailed message
@@ -1321,13 +1312,13 @@ static bool migrate_caps_check(bool *cap_list,
return false;
}
- if (cap_list[MIGRATION_CAPABILITY_X_IGNORE_SHARED]) {
+ if (new_caps[MIGRATION_CAPABILITY_X_IGNORE_SHARED]) {
error_setg(errp, "Postcopy is not compatible with ignore-shared");
return false;
}
}
- if (cap_list[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]) {
+ if (new_caps[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]) {
WriteTrackingSupport wt_support;
int idx;
/*
@@ -1351,7 +1342,7 @@ static bool migrate_caps_check(bool *cap_list,
*/
for (idx = 0; idx < check_caps_background_snapshot.size; idx++) {
int incomp_cap = check_caps_background_snapshot.caps[idx];
- if (cap_list[incomp_cap]) {
+ if (new_caps[incomp_cap]) {
error_setg(errp,
"Background-snapshot is not compatible with %s",
MigrationCapability_str(incomp_cap));
@@ -1361,10 +1352,10 @@ static bool migrate_caps_check(bool *cap_list,
}
#ifdef CONFIG_LINUX
- if (cap_list[MIGRATION_CAPABILITY_ZERO_COPY_SEND] &&
- (!cap_list[MIGRATION_CAPABILITY_MULTIFD] ||
- cap_list[MIGRATION_CAPABILITY_COMPRESS] ||
- cap_list[MIGRATION_CAPABILITY_XBZRLE] ||
+ if (new_caps[MIGRATION_CAPABILITY_ZERO_COPY_SEND] &&
+ (!new_caps[MIGRATION_CAPABILITY_MULTIFD] ||
+ new_caps[MIGRATION_CAPABILITY_COMPRESS] ||
+ new_caps[MIGRATION_CAPABILITY_XBZRLE] ||
migrate_multifd_compression() ||
migrate_use_tls())) {
error_setg(errp,
@@ -1372,15 +1363,15 @@ static bool migrate_caps_check(bool *cap_list,
return false;
}
#else
- if (cap_list[MIGRATION_CAPABILITY_ZERO_COPY_SEND]) {
+ if (new_caps[MIGRATION_CAPABILITY_ZERO_COPY_SEND]) {
error_setg(errp,
"Zero copy currently only available on Linux");
return false;
}
#endif
- if (cap_list[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT]) {
- if (!cap_list[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
+ if (new_caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT]) {
+ if (!new_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
error_setg(errp, "Postcopy preempt requires postcopy-ram");
return false;
}
@@ -1391,14 +1382,14 @@ static bool migrate_caps_check(bool *cap_list,
* different compression channels, which is not compatible with the
* preempt assumptions on channel assignments.
*/
- if (cap_list[MIGRATION_CAPABILITY_COMPRESS]) {
+ if (new_caps[MIGRATION_CAPABILITY_COMPRESS]) {
error_setg(errp, "Postcopy preempt not compatible with compress");
return false;
}
}
- if (cap_list[MIGRATION_CAPABILITY_MULTIFD]) {
- if (cap_list[MIGRATION_CAPABILITY_COMPRESS]) {
+ if (new_caps[MIGRATION_CAPABILITY_MULTIFD]) {
+ if (new_caps[MIGRATION_CAPABILITY_COMPRESS]) {
error_setg(errp, "Multifd is not compatible with compress");
return false;
}
@@ -1454,15 +1445,19 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
{
MigrationState *s = migrate_get_current();
MigrationCapabilityStatusList *cap;
- bool cap_list[MIGRATION_CAPABILITY__MAX];
+ bool new_caps[MIGRATION_CAPABILITY__MAX];
if (migration_is_running(s->state)) {
error_setg(errp, QERR_MIGRATION_ACTIVE);
return;
}
- memcpy(cap_list, s->capabilities, sizeof(cap_list));
- if (!migrate_caps_check(cap_list, params, errp)) {
+ memcpy(new_caps, s->capabilities, sizeof(new_caps));
+ for (cap = params; cap; cap = cap->next) {
+ new_caps[cap->value->capability] = cap->value->state;
+ }
+
+ if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
return;
}
@@ -4566,27 +4561,14 @@ static void migration_instance_init(Object *obj)
*/
static bool migration_object_check(MigrationState *ms, Error **errp)
{
- MigrationCapabilityStatusList *head = NULL;
/* Assuming all off */
- bool cap_list[MIGRATION_CAPABILITY__MAX] = { 0 }, ret;
- int i;
+ bool old_caps[MIGRATION_CAPABILITY__MAX] = { 0 };
if (!migrate_params_check(&ms->parameters, errp)) {
return false;
}
- for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
- if (ms->capabilities[i]) {
- QAPI_LIST_PREPEND(head, migrate_cap_add(i, true));
- }
- }
-
- ret = migrate_caps_check(cap_list, head, errp);
-
- /* It works with head == NULL */
- qapi_free_MigrationCapabilityStatusList(head);
-
- return ret;
+ return migrate_caps_check(old_caps, ms->capabilities, errp);
}
static const TypeInfo migration_type = {
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 03/43] migration: Create migration_cap_set()
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
2023-03-02 16:33 ` [PATCH 01/43] migration: rename enabled_capabilities to capabilities Juan Quintela
2023-03-02 16:33 ` [PATCH 02/43] migration: Pass migrate_caps_check() the old and new caps Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-08 10:47 ` Dr. David Alan Gilbert
2023-03-02 16:33 ` [PATCH 04/43] migration: create options.c Juan Quintela
` (40 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
And remove the convoluted use of qmp_migrate_set_capabilities() to
enable disable MIGRATION_CAPABILITY_BLOCK.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 34 ++++++++++++++++------------------
1 file changed, 16 insertions(+), 18 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 119027a656..e3062530f0 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1910,25 +1910,24 @@ void migrate_set_state(int *state, int old_state, int new_state)
}
}
-static MigrationCapabilityStatus *migrate_cap_add(MigrationCapability index,
- bool state)
+static bool migrate_cap_set(int cap, bool value, Error **errp)
{
- MigrationCapabilityStatus *cap;
+ MigrationState *s = migrate_get_current();
+ bool new_caps[MIGRATION_CAPABILITY__MAX];
- cap = g_new0(MigrationCapabilityStatus, 1);
- cap->capability = index;
- cap->state = state;
+ if (migration_is_running(s->state)) {
+ error_setg(errp, QERR_MIGRATION_ACTIVE);
+ return false;
+ }
- return cap;
-}
+ memcpy(new_caps, s->capabilities, sizeof(new_caps));
+ new_caps[cap] = value;
-void migrate_set_block_enabled(bool value, Error **errp)
-{
- MigrationCapabilityStatusList *cap = NULL;
-
- QAPI_LIST_PREPEND(cap, migrate_cap_add(MIGRATION_CAPABILITY_BLOCK, value));
- qmp_migrate_set_capabilities(cap, errp);
- qapi_free_MigrationCapabilityStatusList(cap);
+ if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
+ return false;
+ }
+ s->capabilities[cap] = value;
+ return true;
}
static void migrate_set_block_incremental(MigrationState *s, bool value)
@@ -1940,7 +1939,7 @@ static void block_cleanup_parameters(MigrationState *s)
{
if (s->must_remove_block_options) {
/* setting to false can never fail */
- migrate_set_block_enabled(false, &error_abort);
+ migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, false, &error_abort);
migrate_set_block_incremental(s, false);
s->must_remove_block_options = false;
}
@@ -2427,8 +2426,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc,
"current migration capabilities");
return false;
}
- migrate_set_block_enabled(true, &local_err);
- if (local_err) {
+ if (!migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, true, &local_err)) {
error_propagate(errp, local_err);
return false;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 04/43] migration: create options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (2 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 03/43] migration: Create migration_cap_set() Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-08 9:46 ` Dr. David Alan Gilbert
2023-03-02 16:33 ` [PATCH 05/43] migration: Move migrate_colo_enabled() to options.c Juan Quintela
` (39 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
We move there all capabilities helpers from migration.c.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 12 ----
migration/options.h | 34 +++++++++
hw/virtio/virtio-balloon.c | 1 +
migration/block-dirty-bitmap.c | 1 +
migration/block.c | 1 +
migration/colo.c | 1 +
migration/migration.c | 109 +---------------------------
migration/options.c | 126 +++++++++++++++++++++++++++++++++
migration/postcopy-ram.c | 1 +
migration/ram.c | 1 +
migration/savevm.c | 1 +
migration/socket.c | 1 +
migration/meson.build | 1 +
13 files changed, 170 insertions(+), 120 deletions(-)
create mode 100644 migration/options.h
create mode 100644 migration/options.c
diff --git a/migration/migration.h b/migration/migration.h
index b07efaf259..68851e485d 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -410,16 +410,7 @@ MigrationState *migrate_get_current(void);
bool migrate_postcopy(void);
-bool migrate_release_ram(void);
-bool migrate_postcopy_ram(void);
-bool migrate_zero_blocks(void);
-bool migrate_dirty_bitmaps(void);
-bool migrate_ignore_shared(void);
-bool migrate_validate_uuid(void);
-
-bool migrate_auto_converge(void);
bool migrate_use_multifd(void);
-bool migrate_pause_before_switchover(void);
int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
@@ -448,9 +439,6 @@ int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
int migrate_decompress_threads(void);
bool migrate_use_events(void);
-bool migrate_postcopy_blocktime(void);
-bool migrate_background_snapshot(void);
-bool migrate_postcopy_preempt(void);
/* Sending on the return path - generic and then for each message type */
void migrate_send_rp_shut(MigrationIncomingState *mis,
diff --git a/migration/options.h b/migration/options.h
new file mode 100644
index 0000000000..bae032375a
--- /dev/null
+++ b/migration/options.h
@@ -0,0 +1,34 @@
+/*
+ * QEMU migration options
+ *
+ * Copyright IBM, Corp. 2008
+ *
+ * Authors:
+ * Anthony Liguori <aliguori@us.ibm.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ *
+ * Contributions after 2012-01-13 are licensed under the terms of the
+ * GNU GPL, version 2 or (at your option) any later version.
+ */
+
+#ifndef QEMU_MIGRATION_OPTIONS_H
+#define QEMU_MIGRATION_OPTIONS_H
+
+/* capabilities */
+
+bool migrate_auto_converge(void);
+bool migrate_background_snapshot(void);
+bool migrate_dirty_bitmaps(void);
+bool migrate_ignore_shared(void);
+bool migrate_late_block_activate(void);
+bool migrate_pause_before_switchover(void);
+bool migrate_postcopy_blocktime(void);
+bool migrate_postcopy_preempt(void);
+bool migrate_postcopy_ram(void);
+bool migrate_release_ram(void);
+bool migrate_validate_uuid(void);
+bool migrate_zero_blocks(void);
+
+#endif
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index 746f07c4d2..43092aa634 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -32,6 +32,7 @@
#include "qemu/error-report.h"
#include "migration/misc.h"
#include "migration/migration.h"
+#include "migration/options.h"
#include "hw/virtio/virtio-bus.h"
#include "hw/virtio/virtio-access.h"
diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
index fe73aa94b1..a6ffae0002 100644
--- a/migration/block-dirty-bitmap.c
+++ b/migration/block-dirty-bitmap.c
@@ -79,6 +79,7 @@
#include "qapi/qapi-visit-migration.h"
#include "qapi/clone-visitor.h"
#include "trace.h"
+#include "options.h"
#define CHUNK_SIZE (1 << 10)
diff --git a/migration/block.c b/migration/block.c
index 426a25bb19..c4fe9fea56 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -28,6 +28,7 @@
#include "migration/vmstate.h"
#include "sysemu/block-backend.h"
#include "trace.h"
+#include "options.h"
#define BLK_MIG_BLOCK_SIZE (1ULL << 20)
#define BDRV_SECTORS_PER_DIRTY_CHUNK (BLK_MIG_BLOCK_SIZE >> BDRV_SECTOR_BITS)
diff --git a/migration/colo.c b/migration/colo.c
index 0716e64689..93b78c9270 100644
--- a/migration/colo.c
+++ b/migration/colo.c
@@ -36,6 +36,7 @@
#include "sysemu/cpus.h"
#include "sysemu/runstate.h"
#include "net/filter.h"
+#include "options.h"
static bool vmstate_loading;
static Notifier packets_compare_notifier;
diff --git a/migration/migration.c b/migration/migration.c
index e3062530f0..790848ef1c 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -63,6 +63,7 @@
#include "sysemu/cpus.h"
#include "yank_functions.h"
#include "sysemu/qtest.h"
+#include "options.h"
#define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttling */
@@ -357,15 +358,6 @@ static void migrate_generate_event(int new_state)
}
}
-static bool migrate_late_block_activate(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
-}
-
/*
* Send a message on the return channel back to the source
* of the migration.
@@ -2523,56 +2515,11 @@ void qmp_migrate_continue(MigrationStatus state, Error **errp)
qemu_sem_post(&s->pause_sem);
}
-bool migrate_release_ram(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
-}
-
-bool migrate_postcopy_ram(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
-}
-
bool migrate_postcopy(void)
{
return migrate_postcopy_ram() || migrate_dirty_bitmaps();
}
-bool migrate_auto_converge(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
-}
-
-bool migrate_zero_blocks(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
-}
-
-bool migrate_postcopy_blocktime(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME];
-}
-
bool migrate_use_compression(void)
{
MigrationState *s;
@@ -2618,33 +2565,6 @@ int migrate_decompress_threads(void)
return s->parameters.decompress_threads;
}
-bool migrate_dirty_bitmaps(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
-}
-
-bool migrate_ignore_shared(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED];
-}
-
-bool migrate_validate_uuid(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
-}
-
bool migrate_use_events(void)
{
MigrationState *s;
@@ -2663,15 +2583,6 @@ bool migrate_use_multifd(void)
return s->capabilities[MIGRATION_CAPABILITY_MULTIFD];
}
-bool migrate_pause_before_switchover(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER];
-}
-
int migrate_multifd_channels(void)
{
MigrationState *s;
@@ -2783,24 +2694,6 @@ bool migrate_use_block_incremental(void)
return s->parameters.block_incremental;
}
-bool migrate_background_snapshot(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
-}
-
-bool migrate_postcopy_preempt(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT];
-}
-
/* migration thread support */
/*
* Something bad happened to the RP stream, mark an error
diff --git a/migration/options.c b/migration/options.c
new file mode 100644
index 0000000000..47337a9a29
--- /dev/null
+++ b/migration/options.c
@@ -0,0 +1,126 @@
+/*
+ * QEMU migration capabilities
+ *
+ * Copyright IBM, Corp. 2008
+ *
+ * Authors:
+ * Anthony Liguori <aliguori@us.ibm.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ *
+ * Contributions after 2012-01-13 are licensed under the terms of the
+ * GNU GPL, version 2 or (at your option) any later version.
+ */
+
+#include "qemu/osdep.h"
+#include "migration.h"
+#include "options.h"
+
+bool migrate_auto_converge(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
+}
+
+bool migrate_background_snapshot(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
+}
+
+bool migrate_dirty_bitmaps(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
+}
+
+bool migrate_ignore_shared(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED];
+}
+
+bool migrate_late_block_activate(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
+}
+
+bool migrate_pause_before_switchover(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER];
+}
+
+bool migrate_postcopy_blocktime(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME];
+}
+
+bool migrate_postcopy_preempt(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT];
+}
+
+bool migrate_postcopy_ram(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
+}
+
+bool migrate_release_ram(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
+}
+
+bool migrate_validate_uuid(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
+}
+
+bool migrate_zero_blocks(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
+}
diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
index f54f44d899..ce41670466 100644
--- a/migration/postcopy-ram.c
+++ b/migration/postcopy-ram.c
@@ -36,6 +36,7 @@
#include "yank_functions.h"
#include "tls.h"
#include "qemu/userfaultfd.h"
+#include "options.h"
/* Arbitrary limit on size of each discard command,
* keeps them around ~200 bytes
diff --git a/migration/ram.c b/migration/ram.c
index af749b369b..1c786eb8f4 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -57,6 +57,7 @@
#include "qemu/iov.h"
#include "multifd.h"
#include "sysemu/runstate.h"
+#include "options.h"
#include "hw/boards.h" /* for machine_dump_guest_core() */
diff --git a/migration/savevm.c b/migration/savevm.c
index 589ef926ab..ebcf571e37 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -67,6 +67,7 @@
#include "qemu/yank.h"
#include "yank_functions.h"
#include "sysemu/qtest.h"
+#include "options.h"
const unsigned int postcopy_ram_discard_version;
diff --git a/migration/socket.c b/migration/socket.c
index e6fdf3c5e1..ebf9ac41af 100644
--- a/migration/socket.c
+++ b/migration/socket.c
@@ -27,6 +27,7 @@
#include "io/net-listener.h"
#include "trace.h"
#include "postcopy-ram.h"
+#include "options.h"
struct SocketOutgoingArgs {
SocketAddress *saddr;
diff --git a/migration/meson.build b/migration/meson.build
index 0d1bb9f96e..480ff6854a 100644
--- a/migration/meson.build
+++ b/migration/meson.build
@@ -22,6 +22,7 @@ softmmu_ss.add(files(
'migration.c',
'multifd.c',
'multifd-zlib.c',
+ 'options.c',
'postcopy-ram.c',
'savevm.c',
'socket.c',
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 05/43] migration: Move migrate_colo_enabled() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (3 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 04/43] migration: create options.c Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-04-20 12:54 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 06/43] migration: Move migrate_use_compression() " Juan Quintela
` (38 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Once that we are there, we rename the function to migrate_colo() to be
consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 1 -
migration/options.h | 1 +
migration/migration.c | 16 +++++-----------
migration/options.c | 6 ++++++
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 68851e485d..1ac11fdba9 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -424,7 +424,6 @@ bool migrate_use_zero_copy_send(void);
int migrate_use_tls(void);
int migrate_use_xbzrle(void);
uint64_t migrate_xbzrle_cache_size(void);
-bool migrate_colo_enabled(void);
bool migrate_use_block(void);
bool migrate_use_block_incremental(void);
diff --git a/migration/options.h b/migration/options.h
index bae032375a..5d2d4298cd 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -20,6 +20,7 @@
bool migrate_auto_converge(void);
bool migrate_background_snapshot(void);
+bool migrate_colo(void);
bool migrate_dirty_bitmaps(void);
bool migrate_ignore_shared(void);
bool migrate_late_block_activate(void);
diff --git a/migration/migration.c b/migration/migration.c
index 790848ef1c..03884f2f73 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2409,7 +2409,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc,
}
if (blk || blk_inc) {
- if (migrate_colo_enabled()) {
+ if (migrate_colo()) {
error_setg(errp, "No disk migration is required in COLO mode");
return false;
}
@@ -3290,7 +3290,7 @@ static void migration_completion(MigrationState *s)
ret = global_state_store();
if (!ret) {
- bool inactivate = !migrate_colo_enabled();
+ bool inactivate = !migrate_colo();
ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
trace_migration_completion_vm_stop(ret);
if (ret >= 0) {
@@ -3349,7 +3349,7 @@ static void migration_completion(MigrationState *s)
goto fail_invalidate;
}
- if (migrate_colo_enabled() && s->state == MIGRATION_STATUS_ACTIVE) {
+ if (migrate_colo() && s->state == MIGRATION_STATUS_ACTIVE) {
/* COLO does not support postcopy */
migrate_set_state(&s->state, MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_COLO);
@@ -3427,12 +3427,6 @@ fail:
MIGRATION_STATUS_FAILED);
}
-bool migrate_colo_enabled(void)
-{
- MigrationState *s = migrate_get_current();
- return s->capabilities[MIGRATION_CAPABILITY_X_COLO];
-}
-
typedef enum MigThrError {
/* No error detected */
MIG_THR_ERR_NONE = 0,
@@ -3763,7 +3757,7 @@ static void migration_iteration_finish(MigrationState *s)
runstate_set(RUN_STATE_POSTMIGRATE);
break;
case MIGRATION_STATUS_COLO:
- if (!migrate_colo_enabled()) {
+ if (!migrate_colo()) {
error_report("%s: critical error: calling COLO code without "
"COLO enabled", __func__);
}
@@ -3959,7 +3953,7 @@ static void *migration_thread(void *opaque)
qemu_savevm_send_postcopy_advise(s->to_dst_file);
}
- if (migrate_colo_enabled()) {
+ if (migrate_colo()) {
/* Notify migration destination that we enable COLO */
qemu_savevm_send_colo_enable(s->to_dst_file);
}
diff --git a/migration/options.c b/migration/options.c
index 47337a9a29..6904d054a9 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -35,6 +35,12 @@ bool migrate_background_snapshot(void)
return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
}
+bool migrate_colo(void)
+{
+ MigrationState *s = migrate_get_current();
+ return s->capabilities[MIGRATION_CAPABILITY_X_COLO];
+}
+
bool migrate_dirty_bitmaps(void)
{
MigrationState *s;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 06/43] migration: Move migrate_use_compression() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (4 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 05/43] migration: Move migrate_colo_enabled() to options.c Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-04-20 12:58 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 07/43] migration: Move migrate_use_events() " Juan Quintela
` (37 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Once that we are there, we rename the function to migrate_compress()
to be consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 1 -
migration/options.h | 1 +
migration/migration.c | 11 +----------
migration/options.c | 9 +++++++++
migration/ram.c | 16 ++++++++--------
5 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 1ac11fdba9..394728dd44 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -432,7 +432,6 @@ bool migrate_use_return_path(void);
uint64_t ram_get_total_transferred_pages(void);
-bool migrate_use_compression(void);
int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
diff --git a/migration/options.h b/migration/options.h
index 5d2d4298cd..aa9c165c94 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -21,6 +21,7 @@
bool migrate_auto_converge(void);
bool migrate_background_snapshot(void);
bool migrate_colo(void);
+bool migrate_compress(void);
bool migrate_dirty_bitmaps(void);
bool migrate_ignore_shared(void);
bool migrate_late_block_activate(void);
diff --git a/migration/migration.c b/migration/migration.c
index 03884f2f73..661c7c33d8 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1131,7 +1131,7 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
info->xbzrle_cache->overflow = xbzrle_counters.overflow;
}
- if (migrate_use_compression()) {
+ if (migrate_compress()) {
info->compression = g_malloc0(sizeof(*info->compression));
info->compression->pages = compression_counters.pages;
info->compression->busy = compression_counters.busy;
@@ -2520,15 +2520,6 @@ bool migrate_postcopy(void)
return migrate_postcopy_ram() || migrate_dirty_bitmaps();
}
-bool migrate_use_compression(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_COMPRESS];
-}
-
int migrate_compress_level(void)
{
MigrationState *s;
diff --git a/migration/options.c b/migration/options.c
index 6904d054a9..d1c44462c5 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -41,6 +41,15 @@ bool migrate_colo(void)
return s->capabilities[MIGRATION_CAPABILITY_X_COLO];
}
+bool migrate_compress(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_COMPRESS];
+}
+
bool migrate_dirty_bitmaps(void)
{
MigrationState *s;
diff --git a/migration/ram.c b/migration/ram.c
index 1c786eb8f4..fb868312f4 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -591,7 +591,7 @@ static void compress_threads_save_cleanup(void)
{
int i, thread_count;
- if (!migrate_use_compression() || !comp_param) {
+ if (!migrate_compress() || !comp_param) {
return;
}
@@ -630,7 +630,7 @@ static int compress_threads_save_setup(void)
{
int i, thread_count;
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
return 0;
}
thread_count = migrate_compress_threads();
@@ -1161,7 +1161,7 @@ static void migration_update_rates(RAMState *rs, int64_t end_time)
rs->xbzrle_bytes_prev = xbzrle_counters.bytes;
}
- if (migrate_use_compression()) {
+ if (migrate_compress()) {
compression_counters.busy_rate = (double)(compression_counters.busy -
rs->compress_thread_busy_prev) / page_count;
rs->compress_thread_busy_prev = compression_counters.busy;
@@ -2276,7 +2276,7 @@ int ram_save_queue_pages(const char *rbname, ram_addr_t start, ram_addr_t len)
static bool save_page_use_compression(RAMState *rs)
{
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
return false;
}
@@ -3739,7 +3739,7 @@ static int wait_for_decompress_done(void)
{
int idx, thread_count;
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
return 0;
}
@@ -3758,7 +3758,7 @@ static void compress_threads_load_cleanup(void)
{
int i, thread_count;
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
return;
}
thread_count = migrate_decompress_threads();
@@ -3799,7 +3799,7 @@ static int compress_threads_load_setup(QEMUFile *f)
{
int i, thread_count;
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
return 0;
}
@@ -4265,7 +4265,7 @@ static int ram_load_precopy(QEMUFile *f)
int flags = 0, ret = 0, invalid_flags = 0, len = 0, i = 0;
/* ADVISE is earlier, it shows the source has the postcopy capability on */
bool postcopy_advised = migration_incoming_postcopy_advised();
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
invalid_flags |= RAM_SAVE_FLAG_COMPRESS_PAGE;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 07/43] migration: Move migrate_use_events() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (5 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 06/43] migration: Move migrate_use_compression() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-04-20 13:00 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 08/43] migration: Move migrate_use_multifd() " Juan Quintela
` (36 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Once that we are there, we rename the function to migrate_events()
to be consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 1 -
migration/options.h | 1 +
migration/migration.c | 11 +----------
migration/options.c | 9 +++++++++
migration/ram.c | 2 +-
5 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 394728dd44..9d0b1fa45b 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -436,7 +436,6 @@ int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
int migrate_decompress_threads(void);
-bool migrate_use_events(void);
/* Sending on the return path - generic and then for each message type */
void migrate_send_rp_shut(MigrationIncomingState *mis,
diff --git a/migration/options.h b/migration/options.h
index aa9c165c94..caf3b3aa69 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -23,6 +23,7 @@ bool migrate_background_snapshot(void);
bool migrate_colo(void);
bool migrate_compress(void);
bool migrate_dirty_bitmaps(void);
+bool migrate_events(void);
bool migrate_ignore_shared(void);
bool migrate_late_block_activate(void);
bool migrate_pause_before_switchover(void);
diff --git a/migration/migration.c b/migration/migration.c
index 661c7c33d8..6c87aab8af 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -353,7 +353,7 @@ void migration_incoming_state_destroy(void)
static void migrate_generate_event(int new_state)
{
- if (migrate_use_events()) {
+ if (migrate_events()) {
qapi_event_send_migration(new_state);
}
}
@@ -2556,15 +2556,6 @@ int migrate_decompress_threads(void)
return s->parameters.decompress_threads;
}
-bool migrate_use_events(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_EVENTS];
-}
-
bool migrate_use_multifd(void)
{
MigrationState *s;
diff --git a/migration/options.c b/migration/options.c
index d1c44462c5..507b71631e 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -59,6 +59,15 @@ bool migrate_dirty_bitmaps(void)
return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
}
+bool migrate_events(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_EVENTS];
+}
+
bool migrate_ignore_shared(void)
{
MigrationState *s;
diff --git a/migration/ram.c b/migration/ram.c
index fb868312f4..98ad8e0130 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1252,7 +1252,7 @@ static void migration_bitmap_sync(RAMState *rs)
rs->num_dirty_pages_period = 0;
rs->bytes_xfer_prev = stat64_get(&ram_counters.transferred);
}
- if (migrate_use_events()) {
+ if (migrate_events()) {
qapi_event_send_migration_pass(ram_counters.dirty_sync_count);
}
}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 08/43] migration: Move migrate_use_multifd() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (6 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 07/43] migration: Move migrate_use_events() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-04-20 13:01 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 09/43] migration: Move migrate_use_zero_copy_send() " Juan Quintela
` (35 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Once that we are there, we rename the function to migrate_multifd()
to be consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 1 -
migration/options.h | 1 +
migration/migration.c | 19 +++++--------------
migration/multifd.c | 16 ++++++++--------
migration/options.c | 9 +++++++++
migration/ram.c | 2 +-
migration/socket.c | 2 +-
7 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 9d0b1fa45b..19008fae0b 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -410,7 +410,6 @@ MigrationState *migrate_get_current(void);
bool migrate_postcopy(void);
-bool migrate_use_multifd(void);
int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
diff --git a/migration/options.h b/migration/options.h
index caf3b3aa69..a4f05a5e13 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -26,6 +26,7 @@ bool migrate_dirty_bitmaps(void);
bool migrate_events(void);
bool migrate_ignore_shared(void);
bool migrate_late_block_activate(void);
+bool migrate_multifd(void);
bool migrate_pause_before_switchover(void);
bool migrate_postcopy_blocktime(void);
bool migrate_postcopy_preempt(void);
diff --git a/migration/migration.c b/migration/migration.c
index 6c87aab8af..97daab9fd4 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -186,7 +186,7 @@ static void migrate_fd_cancel(MigrationState *s);
static bool migration_needs_multiple_sockets(void)
{
- return migrate_use_multifd() || migrate_postcopy_preempt();
+ return migrate_multifd() || migrate_postcopy_preempt();
}
static bool uri_supports_multi_channels(const char *uri)
@@ -732,7 +732,7 @@ void migration_fd_process_incoming(QEMUFile *f, Error **errp)
static bool migration_should_start_incoming(bool main_channel)
{
/* Multifd doesn't start unless all channels are established */
- if (migrate_use_multifd()) {
+ if (migrate_multifd()) {
return migration_has_all_channels();
}
@@ -759,7 +759,7 @@ void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp)
uint32_t channel_magic = 0;
int ret = 0;
- if (migrate_use_multifd() && !migrate_postcopy_ram() &&
+ if (migrate_multifd() && !migrate_postcopy_ram() &&
qio_channel_has_feature(ioc, QIO_CHANNEL_FEATURE_READ_MSG_PEEK)) {
/*
* With multiple channels, it is possible that we receive channels
@@ -798,7 +798,7 @@ void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp)
} else {
/* Multiple connections */
assert(migration_needs_multiple_sockets());
- if (migrate_use_multifd()) {
+ if (migrate_multifd()) {
multifd_recv_new_channel(ioc, &local_err);
} else {
assert(migrate_postcopy_preempt());
@@ -834,7 +834,7 @@ bool migration_has_all_channels(void)
return false;
}
- if (migrate_use_multifd()) {
+ if (migrate_multifd()) {
return multifd_recv_all_channels_created();
}
@@ -2556,15 +2556,6 @@ int migrate_decompress_threads(void)
return s->parameters.decompress_threads;
}
-bool migrate_use_multifd(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_MULTIFD];
-}
-
int migrate_multifd_channels(void)
{
MigrationState *s;
diff --git a/migration/multifd.c b/migration/multifd.c
index 91552d33bf..95127feb8b 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -516,7 +516,7 @@ void multifd_save_cleanup(void)
{
int i;
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return;
}
multifd_send_terminate_threads(NULL);
@@ -587,7 +587,7 @@ int multifd_send_sync_main(QEMUFile *f)
int i;
bool flush_zero_copy;
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return 0;
}
if (multifd_send_state->pages->num) {
@@ -910,7 +910,7 @@ int multifd_save_setup(Error **errp)
uint32_t page_count = MULTIFD_PACKET_SIZE / qemu_target_page_size();
uint8_t i;
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return 0;
}
@@ -1015,7 +1015,7 @@ static void multifd_recv_terminate_threads(Error *err)
void multifd_load_shutdown(void)
{
- if (migrate_use_multifd()) {
+ if (migrate_multifd()) {
multifd_recv_terminate_threads(NULL);
}
}
@@ -1024,7 +1024,7 @@ void multifd_load_cleanup(void)
{
int i;
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return;
}
multifd_recv_terminate_threads(NULL);
@@ -1071,7 +1071,7 @@ void multifd_recv_sync_main(void)
{
int i;
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return;
}
for (i = 0; i < migrate_multifd_channels(); i++) {
@@ -1169,7 +1169,7 @@ int multifd_load_setup(Error **errp)
* Return successfully if multiFD recv state is already initialised
* or multiFD is not enabled.
*/
- if (multifd_recv_state || !migrate_use_multifd()) {
+ if (multifd_recv_state || !migrate_multifd()) {
return 0;
}
@@ -1215,7 +1215,7 @@ bool multifd_recv_all_channels_created(void)
{
int thread_count = migrate_multifd_channels();
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return true;
}
diff --git a/migration/options.c b/migration/options.c
index 507b71631e..59663c460e 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -86,6 +86,15 @@ bool migrate_late_block_activate(void)
return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
}
+bool migrate_multifd(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_MULTIFD];
+}
+
bool migrate_pause_before_switchover(void)
{
MigrationState *s;
diff --git a/migration/ram.c b/migration/ram.c
index 98ad8e0130..59a624f59a 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -2368,7 +2368,7 @@ static int ram_save_target_page_legacy(RAMState *rs, PageSearchStatus *pss)
* if host page size == guest page size the dest guest during run may
* still see partially copied pages which is data corruption.
*/
- if (migrate_use_multifd() && !migration_in_postcopy()) {
+ if (migrate_multifd() && !migration_in_postcopy()) {
return ram_save_multifd_page(pss->pss_channel, block, offset);
}
diff --git a/migration/socket.c b/migration/socket.c
index ebf9ac41af..f4835a256a 100644
--- a/migration/socket.c
+++ b/migration/socket.c
@@ -183,7 +183,7 @@ socket_start_incoming_migration_internal(SocketAddress *saddr,
qio_net_listener_set_name(listener, "migration-socket-listener");
- if (migrate_use_multifd()) {
+ if (migrate_multifd()) {
num = migrate_multifd_channels();
} else if (migrate_postcopy_preempt()) {
num = RAM_CHANNEL_MAX;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 09/43] migration: Move migrate_use_zero_copy_send() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (7 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 08/43] migration: Move migrate_use_multifd() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-04-20 13:06 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 10/43] migration: Move migrate_use_xbzrle() " Juan Quintela
` (34 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Once that we are there, we rename the function to
migrate_zero_copy_send() to be consistent with all other capabilities.
We can remove the CONFIG_LINUX guard. We already check that we can't
setup this capability in migrate_caps_check().
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 5 -----
migration/options.h | 1 +
migration/migration.c | 13 +------------
migration/multifd.c | 8 ++++----
migration/options.c | 9 +++++++++
migration/socket.c | 2 +-
6 files changed, 16 insertions(+), 22 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 19008fae0b..7b82913c62 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -415,11 +415,6 @@ MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
int migrate_multifd_zstd_level(void);
-#ifdef CONFIG_LINUX
-bool migrate_use_zero_copy_send(void);
-#else
-#define migrate_use_zero_copy_send() (false)
-#endif
int migrate_use_tls(void);
int migrate_use_xbzrle(void);
uint64_t migrate_xbzrle_cache_size(void);
diff --git a/migration/options.h b/migration/options.h
index a4f05a5e13..413ef29a2a 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -34,5 +34,6 @@ bool migrate_postcopy_ram(void);
bool migrate_release_ram(void);
bool migrate_validate_uuid(void);
bool migrate_zero_blocks(void);
+bool migrate_zero_copy_send(void);
#endif
diff --git a/migration/migration.c b/migration/migration.c
index 97daab9fd4..48cffab413 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1607,7 +1607,7 @@ static bool migrate_params_check(MigrationParameters *params, Error **errp)
}
#ifdef CONFIG_LINUX
- if (migrate_use_zero_copy_send() &&
+ if (migrate_zero_copy_send() &&
((params->has_multifd_compression && params->multifd_compression) ||
(params->tls_creds && *params->tls_creds))) {
error_setg(errp,
@@ -2593,17 +2593,6 @@ int migrate_multifd_zstd_level(void)
return s->parameters.multifd_zstd_level;
}
-#ifdef CONFIG_LINUX
-bool migrate_use_zero_copy_send(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
-}
-#endif
-
int migrate_use_tls(void)
{
MigrationState *s;
diff --git a/migration/multifd.c b/migration/multifd.c
index 95127feb8b..29d66f5860 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -25,7 +25,7 @@
#include "trace.h"
#include "multifd.h"
#include "threadinfo.h"
-
+#include "options.h"
#include "qemu/yank.h"
#include "io/channel-socket.h"
#include "yank_functions.h"
@@ -608,7 +608,7 @@ int multifd_send_sync_main(QEMUFile *f)
* all the dirty bitmaps.
*/
- flush_zero_copy = migrate_use_zero_copy_send();
+ flush_zero_copy = migrate_zero_copy_send();
for (i = 0; i < migrate_multifd_channels(); i++) {
MultiFDSendParams *p = &multifd_send_state->params[i];
@@ -653,7 +653,7 @@ static void *multifd_send_thread(void *opaque)
MigrationThread *thread = NULL;
Error *local_err = NULL;
int ret = 0;
- bool use_zero_copy_send = migrate_use_zero_copy_send();
+ bool use_zero_copy_send = migrate_zero_copy_send();
thread = MigrationThreadAdd(p->name, qemu_get_thread_id());
@@ -944,7 +944,7 @@ int multifd_save_setup(Error **errp)
p->page_size = qemu_target_page_size();
p->page_count = page_count;
- if (migrate_use_zero_copy_send()) {
+ if (migrate_zero_copy_send()) {
p->write_flags = QIO_CHANNEL_WRITE_FLAG_ZERO_COPY;
} else {
p->write_flags = 0;
diff --git a/migration/options.c b/migration/options.c
index 59663c460e..2e00609b7b 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -157,3 +157,12 @@ bool migrate_zero_blocks(void)
return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
}
+
+bool migrate_zero_copy_send(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
+}
diff --git a/migration/socket.c b/migration/socket.c
index f4835a256a..1b6f5baefb 100644
--- a/migration/socket.c
+++ b/migration/socket.c
@@ -98,7 +98,7 @@ static void socket_outgoing_migration(QIOTask *task,
trace_migration_socket_outgoing_connected(data->hostname);
- if (migrate_use_zero_copy_send() &&
+ if (migrate_zero_copy_send() &&
!qio_channel_has_feature(sioc, QIO_CHANNEL_FEATURE_WRITE_ZERO_COPY)) {
error_setg(&err, "Zero copy send feature not detected in host kernel");
}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 10/43] migration: Move migrate_use_xbzrle() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (8 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 09/43] migration: Move migrate_use_zero_copy_send() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-04-20 13:07 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 11/43] migration: Move migrate_use_block() " Juan Quintela
` (33 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Once that we are there, we rename the function to migrate_xbzrle()
to be consistent with all other capabilities.
We change the type to return bool also for consistency.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 1 -
migration/options.h | 1 +
migration/migration.c | 11 +----------
migration/options.c | 9 +++++++++
migration/ram.c | 10 +++++-----
5 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 7b82913c62..13d5c7f149 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -416,7 +416,6 @@ int migrate_multifd_zlib_level(void);
int migrate_multifd_zstd_level(void);
int migrate_use_tls(void);
-int migrate_use_xbzrle(void);
uint64_t migrate_xbzrle_cache_size(void);
bool migrate_use_block(void);
diff --git a/migration/options.h b/migration/options.h
index 413ef29a2a..e4e7879f40 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -33,6 +33,7 @@ bool migrate_postcopy_preempt(void);
bool migrate_postcopy_ram(void);
bool migrate_release_ram(void);
bool migrate_validate_uuid(void);
+bool migrate_xbzrle(void);
bool migrate_zero_blocks(void);
bool migrate_zero_copy_send(void);
diff --git a/migration/migration.c b/migration/migration.c
index 48cffab413..e1a8972c0b 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1120,7 +1120,7 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
info->ram->downtime_bytes = ram_counters.downtime_bytes;
info->ram->postcopy_bytes = stat64_get(&ram_counters.postcopy_bytes);
- if (migrate_use_xbzrle()) {
+ if (migrate_xbzrle()) {
info->xbzrle_cache = g_malloc0(sizeof(*info->xbzrle_cache));
info->xbzrle_cache->cache_size = migrate_xbzrle_cache_size();
info->xbzrle_cache->bytes = xbzrle_counters.bytes;
@@ -2602,15 +2602,6 @@ int migrate_use_tls(void)
return s->parameters.tls_creds && *s->parameters.tls_creds;
}
-int migrate_use_xbzrle(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_XBZRLE];
-}
-
uint64_t migrate_xbzrle_cache_size(void)
{
MigrationState *s;
diff --git a/migration/options.c b/migration/options.c
index 2e00609b7b..a5b1b1dfda 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -149,6 +149,15 @@ bool migrate_validate_uuid(void)
return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
}
+bool migrate_xbzrle(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_XBZRLE];
+}
+
bool migrate_zero_blocks(void)
{
MigrationState *s;
diff --git a/migration/ram.c b/migration/ram.c
index 59a624f59a..93c9d016c4 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -156,14 +156,14 @@ static struct {
static void XBZRLE_cache_lock(void)
{
- if (migrate_use_xbzrle()) {
+ if (migrate_xbzrle()) {
qemu_mutex_lock(&XBZRLE.lock);
}
}
static void XBZRLE_cache_unlock(void)
{
- if (migrate_use_xbzrle()) {
+ if (migrate_xbzrle()) {
qemu_mutex_unlock(&XBZRLE.lock);
}
}
@@ -1143,7 +1143,7 @@ static void migration_update_rates(RAMState *rs, int64_t end_time)
return;
}
- if (migrate_use_xbzrle()) {
+ if (migrate_xbzrle()) {
double encoded_size, unencoded_size;
xbzrle_counters.cache_miss_rate = (double)(xbzrle_counters.cache_miss -
@@ -1632,7 +1632,7 @@ static int find_dirty_block(RAMState *rs, PageSearchStatus *pss)
/* Flag that we've looped */
pss->complete_round = true;
/* After the first round, enable XBZRLE. */
- if (migrate_use_xbzrle()) {
+ if (migrate_xbzrle()) {
rs->xbzrle_enabled = true;
}
}
@@ -2985,7 +2985,7 @@ static int xbzrle_init(void)
{
Error *local_err = NULL;
- if (!migrate_use_xbzrle()) {
+ if (!migrate_xbzrle()) {
return 0;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 11/43] migration: Move migrate_use_block() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (9 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 10/43] migration: Move migrate_use_xbzrle() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-04-20 13:08 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 12/43] migration: Move migrate_use_return() " Juan Quintela
` (32 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Once that we are there, we rename the function to migrate_block()
to be consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 1 -
migration/options.h | 1 +
migration/block.c | 2 +-
migration/migration.c | 11 +----------
migration/options.c | 9 +++++++++
migration/savevm.c | 2 +-
6 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 13d5c7f149..ecd6f7658d 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -418,7 +418,6 @@ int migrate_multifd_zstd_level(void);
int migrate_use_tls(void);
uint64_t migrate_xbzrle_cache_size(void);
-bool migrate_use_block(void);
bool migrate_use_block_incremental(void);
int migrate_max_cpu_throttle(void);
bool migrate_use_return_path(void);
diff --git a/migration/options.h b/migration/options.h
index e4e7879f40..541a4a2026 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -20,6 +20,7 @@
bool migrate_auto_converge(void);
bool migrate_background_snapshot(void);
+bool migrate_block(void);
bool migrate_colo(void);
bool migrate_compress(void);
bool migrate_dirty_bitmaps(void);
diff --git a/migration/block.c b/migration/block.c
index c4fe9fea56..2cacd5a184 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -1002,7 +1002,7 @@ static int block_load(QEMUFile *f, void *opaque, int version_id)
static bool block_is_active(void *opaque)
{
- return migrate_use_block();
+ return migrate_block();
}
static SaveVMHandlers savevm_block_handlers = {
diff --git a/migration/migration.c b/migration/migration.c
index e1a8972c0b..66847e52cc 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2413,7 +2413,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc,
error_setg(errp, "No disk migration is required in COLO mode");
return false;
}
- if (migrate_use_block() || migrate_use_block_incremental()) {
+ if (migrate_block() || migrate_use_block_incremental()) {
error_setg(errp, "Command options are incompatible with "
"current migration capabilities");
return false;
@@ -2620,15 +2620,6 @@ static int64_t migrate_max_postcopy_bandwidth(void)
return s->parameters.max_postcopy_bandwidth;
}
-bool migrate_use_block(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_BLOCK];
-}
-
bool migrate_use_return_path(void)
{
MigrationState *s;
diff --git a/migration/options.c b/migration/options.c
index a5b1b1dfda..66735c1cd9 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -35,6 +35,15 @@ bool migrate_background_snapshot(void)
return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
}
+bool migrate_block(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_BLOCK];
+}
+
bool migrate_colo(void)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/savevm.c b/migration/savevm.c
index ebcf571e37..9671211339 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1612,7 +1612,7 @@ static int qemu_savevm_state(QEMUFile *f, Error **errp)
return -EINVAL;
}
- if (migrate_use_block()) {
+ if (migrate_block()) {
error_setg(errp, "Block migration and snapshots are incompatible");
return -EINVAL;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 12/43] migration: Move migrate_use_return() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (10 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 11/43] migration: Move migrate_use_block() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-04-20 13:09 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 13/43] migration: Create migrate_rdma_pin_all() function Juan Quintela
` (31 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Once that we are there, we rename the function to migrate_return_path()
to be consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 1 -
migration/options.h | 1 +
migration/migration.c | 11 +----------
migration/options.c | 9 +++++++++
4 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index ecd6f7658d..34fbaa15a3 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -420,7 +420,6 @@ uint64_t migrate_xbzrle_cache_size(void);
bool migrate_use_block_incremental(void);
int migrate_max_cpu_throttle(void);
-bool migrate_use_return_path(void);
uint64_t ram_get_total_transferred_pages(void);
diff --git a/migration/options.h b/migration/options.h
index 541a4a2026..51c7f2a043 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -33,6 +33,7 @@ bool migrate_postcopy_blocktime(void);
bool migrate_postcopy_preempt(void);
bool migrate_postcopy_ram(void);
bool migrate_release_ram(void);
+bool migrate_return_path(void);
bool migrate_validate_uuid(void);
bool migrate_xbzrle(void);
bool migrate_zero_blocks(void);
diff --git a/migration/migration.c b/migration/migration.c
index 66847e52cc..8424eaf2e2 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2620,15 +2620,6 @@ static int64_t migrate_max_postcopy_bandwidth(void)
return s->parameters.max_postcopy_bandwidth;
}
-bool migrate_use_return_path(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_RETURN_PATH];
-}
-
bool migrate_use_block_incremental(void)
{
MigrationState *s;
@@ -4167,7 +4158,7 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
* precopy, only if user specified "return-path" capability would
* QEMU uses the return path.
*/
- if (migrate_postcopy_ram() || migrate_use_return_path()) {
+ if (migrate_postcopy_ram() || migrate_return_path()) {
if (open_return_path_on_source(s, !resume)) {
error_report("Unable to open return-path for postcopy");
migrate_set_state(&s->state, s->state, MIGRATION_STATUS_FAILED);
diff --git a/migration/options.c b/migration/options.c
index 66735c1cd9..c1182bf01a 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -149,6 +149,15 @@ bool migrate_release_ram(void)
return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
}
+bool migrate_return_path(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_RETURN_PATH];
+}
+
bool migrate_validate_uuid(void)
{
MigrationState *s;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 13/43] migration: Create migrate_rdma_pin_all() function
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (11 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 12/43] migration: Move migrate_use_return() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-04-20 13:12 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 14/43] migration: Move migrate_caps_check() to options.c Juan Quintela
` (30 subsequent siblings)
43 siblings, 1 reply; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/options.c | 7 +++++++
migration/rdma.c | 6 +++---
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 51c7f2a043..eaa2b6d2cb 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -32,6 +32,7 @@ bool migrate_pause_before_switchover(void);
bool migrate_postcopy_blocktime(void);
bool migrate_postcopy_preempt(void);
bool migrate_postcopy_ram(void);
+bool migrate_rdma_pin_all(void);
bool migrate_release_ram(void);
bool migrate_return_path(void);
bool migrate_validate_uuid(void);
diff --git a/migration/options.c b/migration/options.c
index c1182bf01a..ddf23ede6f 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -140,6 +140,13 @@ bool migrate_postcopy_ram(void)
return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
}
+bool migrate_rdma_pin_all(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL];
+}
+
bool migrate_release_ram(void)
{
MigrationState *s;
diff --git a/migration/rdma.c b/migration/rdma.c
index 35f3d6bebe..a13578318c 100644
--- a/migration/rdma.c
+++ b/migration/rdma.c
@@ -35,6 +35,7 @@
#include <rdma/rdma_cma.h>
#include "trace.h"
#include "qom/object.h"
+#include "options.h"
#include <poll.h>
/*
@@ -4177,8 +4178,7 @@ void rdma_start_outgoing_migration(void *opaque,
goto err;
}
- ret = qemu_rdma_source_init(rdma,
- s->capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL], errp);
+ ret = qemu_rdma_source_init(rdma,migrate_rdma_pin_all(), errp);
if (ret) {
goto err;
@@ -4200,7 +4200,7 @@ void rdma_start_outgoing_migration(void *opaque,
}
ret = qemu_rdma_source_init(rdma_return_path,
- s->capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL], errp);
+ migrate_rdma_pin_all(), errp);
if (ret) {
goto return_path_err;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 14/43] migration: Move migrate_caps_check() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (12 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 13/43] migration: Create migrate_rdma_pin_all() function Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 15/43] migration: Move qmp_query_migrate_capabilities() " Juan Quintela
` (29 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 4 +
migration/migration.c | 190 -----------------------------------------
migration/options.c | 192 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 196 insertions(+), 190 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index eaa2b6d2cb..2f928eb563 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -40,4 +40,8 @@ bool migrate_xbzrle(void);
bool migrate_zero_blocks(void);
bool migrate_zero_copy_send(void);
+/* capabilities helpers */
+
+bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp);
+
#endif
diff --git a/migration/migration.c b/migration/migration.c
index 8424eaf2e2..dd8df53684 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -136,39 +136,6 @@ enum mig_rp_message_type {
MIG_RP_MSG_MAX
};
-/* Migration capabilities set */
-struct MigrateCapsSet {
- int size; /* Capability set size */
- MigrationCapability caps[]; /* Variadic array of capabilities */
-};
-typedef struct MigrateCapsSet MigrateCapsSet;
-
-/* Define and initialize MigrateCapsSet */
-#define INITIALIZE_MIGRATE_CAPS_SET(_name, ...) \
- MigrateCapsSet _name = { \
- .size = sizeof((int []) { __VA_ARGS__ }) / sizeof(int), \
- .caps = { __VA_ARGS__ } \
- }
-
-/* Background-snapshot compatibility check list */
-static const
-INITIALIZE_MIGRATE_CAPS_SET(check_caps_background_snapshot,
- MIGRATION_CAPABILITY_POSTCOPY_RAM,
- MIGRATION_CAPABILITY_DIRTY_BITMAPS,
- MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME,
- MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE,
- MIGRATION_CAPABILITY_RETURN_PATH,
- MIGRATION_CAPABILITY_MULTIFD,
- MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER,
- MIGRATION_CAPABILITY_AUTO_CONVERGE,
- MIGRATION_CAPABILITY_RELEASE_RAM,
- MIGRATION_CAPABILITY_RDMA_PIN_ALL,
- MIGRATION_CAPABILITY_COMPRESS,
- MIGRATION_CAPABILITY_XBZRLE,
- MIGRATION_CAPABILITY_X_COLO,
- MIGRATION_CAPABILITY_VALIDATE_UUID,
- MIGRATION_CAPABILITY_ZERO_COPY_SEND);
-
/* When we add fault tolerance, we could have several
migrations at once. For now we don't need to add
dynamic creation of migration */
@@ -1233,163 +1200,6 @@ static void fill_source_migration_info(MigrationInfo *info)
info->status = state;
}
-typedef enum WriteTrackingSupport {
- WT_SUPPORT_UNKNOWN = 0,
- WT_SUPPORT_ABSENT,
- WT_SUPPORT_AVAILABLE,
- WT_SUPPORT_COMPATIBLE
-} WriteTrackingSupport;
-
-static
-WriteTrackingSupport migrate_query_write_tracking(void)
-{
- /* Check if kernel supports required UFFD features */
- if (!ram_write_tracking_available()) {
- return WT_SUPPORT_ABSENT;
- }
- /*
- * Check if current memory configuration is
- * compatible with required UFFD features.
- */
- if (!ram_write_tracking_compatible()) {
- return WT_SUPPORT_AVAILABLE;
- }
-
- return WT_SUPPORT_COMPATIBLE;
-}
-
-/**
- * @migration_caps_check - check capability compatibility
- *
- * @old_caps: old capability list
- * @new_caps: new capability list
- * @errp: set *errp if the check failed, with reason
- *
- * Returns true if check passed, otherwise false.
- */
-static bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
-{
- MigrationIncomingState *mis = migration_incoming_get_current();
-
-#ifndef CONFIG_LIVE_BLOCK_MIGRATION
- if (new_caps[MIGRATION_CAPABILITY_BLOCK]) {
- error_setg(errp, "QEMU compiled without old-style (blk/-b, inc/-i) "
- "block migration");
- error_append_hint(errp, "Use drive_mirror+NBD instead.\n");
- return false;
- }
-#endif
-
-#ifndef CONFIG_REPLICATION
- if (new_caps[MIGRATION_CAPABILITY_X_COLO]) {
- error_setg(errp, "QEMU compiled without replication module"
- " can't enable COLO");
- error_append_hint(errp, "Please enable replication before COLO.\n");
- return false;
- }
-#endif
-
- if (new_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
- /* This check is reasonably expensive, so only when it's being
- * set the first time, also it's only the destination that needs
- * special support.
- */
- if (!old_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM] &&
- runstate_check(RUN_STATE_INMIGRATE) &&
- !postcopy_ram_supported_by_host(mis)) {
- /* postcopy_ram_supported_by_host will have emitted a more
- * detailed message
- */
- error_setg(errp, "Postcopy is not supported");
- return false;
- }
-
- if (new_caps[MIGRATION_CAPABILITY_X_IGNORE_SHARED]) {
- error_setg(errp, "Postcopy is not compatible with ignore-shared");
- return false;
- }
- }
-
- if (new_caps[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]) {
- WriteTrackingSupport wt_support;
- int idx;
- /*
- * Check if 'background-snapshot' capability is supported by
- * host kernel and compatible with guest memory configuration.
- */
- wt_support = migrate_query_write_tracking();
- if (wt_support < WT_SUPPORT_AVAILABLE) {
- error_setg(errp, "Background-snapshot is not supported by host kernel");
- return false;
- }
- if (wt_support < WT_SUPPORT_COMPATIBLE) {
- error_setg(errp, "Background-snapshot is not compatible "
- "with guest memory configuration");
- return false;
- }
-
- /*
- * Check if there are any migration capabilities
- * incompatible with 'background-snapshot'.
- */
- for (idx = 0; idx < check_caps_background_snapshot.size; idx++) {
- int incomp_cap = check_caps_background_snapshot.caps[idx];
- if (new_caps[incomp_cap]) {
- error_setg(errp,
- "Background-snapshot is not compatible with %s",
- MigrationCapability_str(incomp_cap));
- return false;
- }
- }
- }
-
-#ifdef CONFIG_LINUX
- if (new_caps[MIGRATION_CAPABILITY_ZERO_COPY_SEND] &&
- (!new_caps[MIGRATION_CAPABILITY_MULTIFD] ||
- new_caps[MIGRATION_CAPABILITY_COMPRESS] ||
- new_caps[MIGRATION_CAPABILITY_XBZRLE] ||
- migrate_multifd_compression() ||
- migrate_use_tls())) {
- error_setg(errp,
- "Zero copy only available for non-compressed non-TLS multifd migration");
- return false;
- }
-#else
- if (new_caps[MIGRATION_CAPABILITY_ZERO_COPY_SEND]) {
- error_setg(errp,
- "Zero copy currently only available on Linux");
- return false;
- }
-#endif
-
- if (new_caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT]) {
- if (!new_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
- error_setg(errp, "Postcopy preempt requires postcopy-ram");
- return false;
- }
-
- /*
- * Preempt mode requires urgent pages to be sent in separate
- * channel, OTOH compression logic will disorder all pages into
- * different compression channels, which is not compatible with the
- * preempt assumptions on channel assignments.
- */
- if (new_caps[MIGRATION_CAPABILITY_COMPRESS]) {
- error_setg(errp, "Postcopy preempt not compatible with compress");
- return false;
- }
- }
-
- if (new_caps[MIGRATION_CAPABILITY_MULTIFD]) {
- if (new_caps[MIGRATION_CAPABILITY_COMPRESS]) {
- error_setg(errp, "Multifd is not compatible with compress");
- return false;
- }
- }
-
- return true;
-}
-
static void fill_destination_migration_info(MigrationInfo *info)
{
MigrationIncomingState *mis = migration_incoming_get_current();
diff --git a/migration/options.c b/migration/options.c
index ddf23ede6f..2cae0b8f08 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -14,7 +14,10 @@
*/
#include "qemu/osdep.h"
+#include "qapi/error.h"
+#include "sysemu/runstate.h"
#include "migration.h"
+#include "ram.h"
#include "options.h"
bool migrate_auto_converge(void)
@@ -200,3 +203,192 @@ bool migrate_zero_copy_send(void)
return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
}
+typedef enum WriteTrackingSupport {
+ WT_SUPPORT_UNKNOWN = 0,
+ WT_SUPPORT_ABSENT,
+ WT_SUPPORT_AVAILABLE,
+ WT_SUPPORT_COMPATIBLE
+} WriteTrackingSupport;
+
+static
+WriteTrackingSupport migrate_query_write_tracking(void)
+{
+ /* Check if kernel supports required UFFD features */
+ if (!ram_write_tracking_available()) {
+ return WT_SUPPORT_ABSENT;
+ }
+ /*
+ * Check if current memory configuration is
+ * compatible with required UFFD features.
+ */
+ if (!ram_write_tracking_compatible()) {
+ return WT_SUPPORT_AVAILABLE;
+ }
+
+ return WT_SUPPORT_COMPATIBLE;
+}
+
+/* Migration capabilities set */
+struct MigrateCapsSet {
+ int size; /* Capability set size */
+ MigrationCapability caps[]; /* Variadic array of capabilities */
+};
+typedef struct MigrateCapsSet MigrateCapsSet;
+
+/* Define and initialize MigrateCapsSet */
+#define INITIALIZE_MIGRATE_CAPS_SET(_name, ...) \
+ MigrateCapsSet _name = { \
+ .size = sizeof((int []) { __VA_ARGS__ }) / sizeof(int), \
+ .caps = { __VA_ARGS__ } \
+ }
+
+/* Background-snapshot compatibility check list */
+static const
+INITIALIZE_MIGRATE_CAPS_SET(check_caps_background_snapshot,
+ MIGRATION_CAPABILITY_POSTCOPY_RAM,
+ MIGRATION_CAPABILITY_DIRTY_BITMAPS,
+ MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME,
+ MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE,
+ MIGRATION_CAPABILITY_RETURN_PATH,
+ MIGRATION_CAPABILITY_MULTIFD,
+ MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER,
+ MIGRATION_CAPABILITY_AUTO_CONVERGE,
+ MIGRATION_CAPABILITY_RELEASE_RAM,
+ MIGRATION_CAPABILITY_RDMA_PIN_ALL,
+ MIGRATION_CAPABILITY_COMPRESS,
+ MIGRATION_CAPABILITY_XBZRLE,
+ MIGRATION_CAPABILITY_X_COLO,
+ MIGRATION_CAPABILITY_VALIDATE_UUID,
+ MIGRATION_CAPABILITY_ZERO_COPY_SEND);
+
+/**
+ * @migration_caps_check - check capability compatibility
+ *
+ * @old_caps: old capability list
+ * @new_caps: new capability list
+ * @errp: set *errp if the check failed, with reason
+ *
+ * Returns true if check passed, otherwise false.
+ */
+bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
+{
+ MigrationIncomingState *mis = migration_incoming_get_current();
+
+#ifndef CONFIG_LIVE_BLOCK_MIGRATION
+ if (new_caps[MIGRATION_CAPABILITY_BLOCK]) {
+ error_setg(errp, "QEMU compiled without old-style (blk/-b, inc/-i) "
+ "block migration");
+ error_append_hint(errp, "Use drive_mirror+NBD instead.\n");
+ return false;
+ }
+#endif
+
+#ifndef CONFIG_REPLICATION
+ if (new_caps[MIGRATION_CAPABILITY_X_COLO]) {
+ error_setg(errp, "QEMU compiled without replication module"
+ " can't enable COLO");
+ error_append_hint(errp, "Please enable replication before COLO.\n");
+ return false;
+ }
+#endif
+
+ if (new_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
+ /* This check is reasonably expensive, so only when it's being
+ * set the first time, also it's only the destination that needs
+ * special support.
+ */
+ if (!old_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM] &&
+ runstate_check(RUN_STATE_INMIGRATE) &&
+ !postcopy_ram_supported_by_host(mis)) {
+ /* postcopy_ram_supported_by_host will have emitted a more
+ * detailed message
+ */
+ error_setg(errp, "Postcopy is not supported");
+ return false;
+ }
+
+ if (new_caps[MIGRATION_CAPABILITY_X_IGNORE_SHARED]) {
+ error_setg(errp, "Postcopy is not compatible with ignore-shared");
+ return false;
+ }
+ }
+
+ if (new_caps[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]) {
+ WriteTrackingSupport wt_support;
+ int idx;
+ /*
+ * Check if 'background-snapshot' capability is supported by
+ * host kernel and compatible with guest memory configuration.
+ */
+ wt_support = migrate_query_write_tracking();
+ if (wt_support < WT_SUPPORT_AVAILABLE) {
+ error_setg(errp, "Background-snapshot is not supported by host kernel");
+ return false;
+ }
+ if (wt_support < WT_SUPPORT_COMPATIBLE) {
+ error_setg(errp, "Background-snapshot is not compatible "
+ "with guest memory configuration");
+ return false;
+ }
+
+ /*
+ * Check if there are any migration capabilities
+ * incompatible with 'background-snapshot'.
+ */
+ for (idx = 0; idx < check_caps_background_snapshot.size; idx++) {
+ int incomp_cap = check_caps_background_snapshot.caps[idx];
+ if (new_caps[incomp_cap]) {
+ error_setg(errp,
+ "Background-snapshot is not compatible with %s",
+ MigrationCapability_str(incomp_cap));
+ return false;
+ }
+ }
+ }
+
+#ifdef CONFIG_LINUX
+ if (new_caps[MIGRATION_CAPABILITY_ZERO_COPY_SEND] &&
+ (!new_caps[MIGRATION_CAPABILITY_MULTIFD] ||
+ new_caps[MIGRATION_CAPABILITY_COMPRESS] ||
+ new_caps[MIGRATION_CAPABILITY_XBZRLE] ||
+ migrate_multifd_compression() ||
+ migrate_use_tls())) {
+ error_setg(errp,
+ "Zero copy only available for non-compressed non-TLS multifd migration");
+ return false;
+ }
+#else
+ if (new_caps[MIGRATION_CAPABILITY_ZERO_COPY_SEND]) {
+ error_setg(errp,
+ "Zero copy currently only available on Linux");
+ return false;
+ }
+#endif
+
+ if (new_caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT]) {
+ if (!new_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
+ error_setg(errp, "Postcopy preempt requires postcopy-ram");
+ return false;
+ }
+
+ /*
+ * Preempt mode requires urgent pages to be sent in separate
+ * channel, OTOH compression logic will disorder all pages into
+ * different compression channels, which is not compatible with the
+ * preempt assumptions on channel assignments.
+ */
+ if (new_caps[MIGRATION_CAPABILITY_COMPRESS]) {
+ error_setg(errp, "Postcopy preempt not compatible with compress");
+ return false;
+ }
+ }
+
+ if (new_caps[MIGRATION_CAPABILITY_MULTIFD]) {
+ if (new_caps[MIGRATION_CAPABILITY_COMPRESS]) {
+ error_setg(errp, "Multifd is not compatible with compress");
+ return false;
+ }
+ }
+
+ return true;
+}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 15/43] migration: Move qmp_query_migrate_capabilities() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (13 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 14/43] migration: Move migrate_caps_check() to options.c Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 16/43] migration: Move qmp_migrate_set_capabilities() " Juan Quintela
` (28 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 22 ----------------------
migration/options.c | 23 +++++++++++++++++++++++
2 files changed, 23 insertions(+), 22 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index dd8df53684..5c70bb3153 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -886,28 +886,6 @@ void migrate_send_rp_resume_ack(MigrationIncomingState *mis, uint32_t value)
migrate_send_rp_message(mis, MIG_RP_MSG_RESUME_ACK, sizeof(buf), &buf);
}
-MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
-{
- MigrationCapabilityStatusList *head = NULL, **tail = &head;
- MigrationCapabilityStatus *caps;
- MigrationState *s = migrate_get_current();
- int i;
-
- for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
-#ifndef CONFIG_LIVE_BLOCK_MIGRATION
- if (i == MIGRATION_CAPABILITY_BLOCK) {
- continue;
- }
-#endif
- caps = g_malloc0(sizeof(*caps));
- caps->capability = i;
- caps->state = s->capabilities[i];
- QAPI_LIST_APPEND(tail, caps);
- }
-
- return head;
-}
-
MigrationParameters *qmp_query_migrate_parameters(Error **errp)
{
MigrationParameters *params;
diff --git a/migration/options.c b/migration/options.c
index 2cae0b8f08..ac9098fbfb 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -15,6 +15,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
+#include "qapi/qapi-commands-migration.h"
#include "sysemu/runstate.h"
#include "migration.h"
#include "ram.h"
@@ -392,3 +393,25 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
return true;
}
+
+MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
+{
+ MigrationCapabilityStatusList *head = NULL, **tail = &head;
+ MigrationCapabilityStatus *caps;
+ MigrationState *s = migrate_get_current();
+ int i;
+
+ for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
+#ifndef CONFIG_LIVE_BLOCK_MIGRATION
+ if (i == MIGRATION_CAPABILITY_BLOCK) {
+ continue;
+ }
+#endif
+ caps = g_malloc0(sizeof(*caps));
+ caps->capability = i;
+ caps->state = s->capabilities[i];
+ QAPI_LIST_APPEND(tail, caps);
+ }
+
+ return head;
+}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 16/43] migration: Move qmp_migrate_set_capabilities() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (14 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 15/43] migration: Move qmp_query_migrate_capabilities() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 17/43] migration: Move migrate_cap_set() " Juan Quintela
` (27 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 26 --------------------------
migration/options.c | 26 ++++++++++++++++++++++++++
2 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 5c70bb3153..1dd2ccf9ee 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1220,32 +1220,6 @@ MigrationInfo *qmp_query_migrate(Error **errp)
return info;
}
-void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
- Error **errp)
-{
- MigrationState *s = migrate_get_current();
- MigrationCapabilityStatusList *cap;
- bool new_caps[MIGRATION_CAPABILITY__MAX];
-
- if (migration_is_running(s->state)) {
- error_setg(errp, QERR_MIGRATION_ACTIVE);
- return;
- }
-
- memcpy(new_caps, s->capabilities, sizeof(new_caps));
- for (cap = params; cap; cap = cap->next) {
- new_caps[cap->value->capability] = cap->value->state;
- }
-
- if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
- return;
- }
-
- for (cap = params; cap; cap = cap->next) {
- s->capabilities[cap->value->capability] = cap->value->state;
- }
-}
-
/*
* Check whether the parameters are valid. Error will be put into errp
* (if provided). Return true if valid, otherwise false.
diff --git a/migration/options.c b/migration/options.c
index ac9098fbfb..1436bf42c2 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -415,3 +415,29 @@ MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
return head;
}
+
+void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
+ Error **errp)
+{
+ MigrationState *s = migrate_get_current();
+ MigrationCapabilityStatusList *cap;
+ bool new_caps[MIGRATION_CAPABILITY__MAX];
+
+ if (migration_is_running(s->state)) {
+ error_setg(errp, QERR_MIGRATION_ACTIVE);
+ return;
+ }
+
+ memcpy(new_caps, s->capabilities, sizeof(new_caps));
+ for (cap = params; cap; cap = cap->next) {
+ new_caps[cap->value->capability] = cap->value->state;
+ }
+
+ if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
+ return;
+ }
+
+ for (cap = params; cap; cap = cap->next) {
+ s->capabilities[cap->value->capability] = cap->value->state;
+ }
+}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 17/43] migration: Move migrate_cap_set() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (15 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 16/43] migration: Move qmp_migrate_set_capabilities() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 18/43] migration: Move parameters functions to option.c Juan Quintela
` (26 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/migration.c | 20 --------------------
migration/options.c | 21 +++++++++++++++++++++
3 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 2f928eb563..c4ca321b98 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -43,5 +43,6 @@ bool migrate_zero_copy_send(void);
/* capabilities helpers */
bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp);
+bool migrate_cap_set(int cap, bool value, Error **errp);
#endif
diff --git a/migration/migration.c b/migration/migration.c
index 1dd2ccf9ee..219ca3d37a 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1664,26 +1664,6 @@ void migrate_set_state(int *state, int old_state, int new_state)
}
}
-static bool migrate_cap_set(int cap, bool value, Error **errp)
-{
- MigrationState *s = migrate_get_current();
- bool new_caps[MIGRATION_CAPABILITY__MAX];
-
- if (migration_is_running(s->state)) {
- error_setg(errp, QERR_MIGRATION_ACTIVE);
- return false;
- }
-
- memcpy(new_caps, s->capabilities, sizeof(new_caps));
- new_caps[cap] = value;
-
- if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
- return false;
- }
- s->capabilities[cap] = value;
- return true;
-}
-
static void migrate_set_block_incremental(MigrationState *s, bool value)
{
s->parameters.block_incremental = value;
diff --git a/migration/options.c b/migration/options.c
index 1436bf42c2..cd0ffb8a20 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -16,6 +16,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
#include "qapi/qapi-commands-migration.h"
+#include "qapi/qmp/qerror.h"
#include "sysemu/runstate.h"
#include "migration.h"
#include "ram.h"
@@ -394,6 +395,26 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
return true;
}
+bool migrate_cap_set(int cap, bool value, Error **errp)
+{
+ MigrationState *s = migrate_get_current();
+ bool new_caps[MIGRATION_CAPABILITY__MAX];
+
+ if (migration_is_running(s->state)) {
+ error_setg(errp, QERR_MIGRATION_ACTIVE);
+ return false;
+ }
+
+ memcpy(new_caps, s->capabilities, sizeof(new_caps));
+ new_caps[cap] = value;
+
+ if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
+ return false;
+ }
+ s->capabilities[cap] = value;
+ return true;
+}
+
MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
{
MigrationCapabilityStatusList *head = NULL, **tail = &head;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 18/43] migration: Move parameters functions to option.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (16 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 17/43] migration: Move migrate_cap_set() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 19/43] migration: Use migrate_max_postcopy_bandwidth() Juan Quintela
` (25 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 11 -----
migration/options.h | 13 ++++++
migration/migration.c | 91 ---------------------------------------
migration/multifd-zlib.c | 1 +
migration/multifd-zstd.c | 1 +
migration/options.c | 93 ++++++++++++++++++++++++++++++++++++++++
6 files changed, 108 insertions(+), 102 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 34fbaa15a3..5509924c57 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -410,24 +410,13 @@ MigrationState *migrate_get_current(void);
bool migrate_postcopy(void);
-int migrate_multifd_channels(void);
-MultiFDCompression migrate_multifd_compression(void);
-int migrate_multifd_zlib_level(void);
-int migrate_multifd_zstd_level(void);
-
int migrate_use_tls(void);
-uint64_t migrate_xbzrle_cache_size(void);
bool migrate_use_block_incremental(void);
int migrate_max_cpu_throttle(void);
uint64_t ram_get_total_transferred_pages(void);
-int migrate_compress_level(void);
-int migrate_compress_threads(void);
-int migrate_compress_wait_thread(void);
-int migrate_decompress_threads(void);
-
/* Sending on the return path - generic and then for each message type */
void migrate_send_rp_shut(MigrationIncomingState *mis,
uint32_t value);
diff --git a/migration/options.h b/migration/options.h
index c4ca321b98..1c1f1a6d47 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -45,4 +45,17 @@ bool migrate_zero_copy_send(void);
bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp);
bool migrate_cap_set(int cap, bool value, Error **errp);
+/* parameters */
+
+int migrate_compress_level(void);
+int migrate_compress_threads(void);
+int migrate_compress_wait_thread(void);
+int migrate_decompress_threads(void);
+int64_t migrate_max_postcopy_bandwidth(void);
+int migrate_multifd_channels(void);
+MultiFDCompression migrate_multifd_compression(void);
+int migrate_multifd_zlib_level(void);
+int migrate_multifd_zstd_level(void);
+uint64_t migrate_xbzrle_cache_size(void);
+
#endif
diff --git a/migration/migration.c b/migration/migration.c
index 219ca3d37a..a04b323fc7 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2262,79 +2262,6 @@ bool migrate_postcopy(void)
return migrate_postcopy_ram() || migrate_dirty_bitmaps();
}
-int migrate_compress_level(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.compress_level;
-}
-
-int migrate_compress_threads(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.compress_threads;
-}
-
-int migrate_compress_wait_thread(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.compress_wait_thread;
-}
-
-int migrate_decompress_threads(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.decompress_threads;
-}
-
-int migrate_multifd_channels(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.multifd_channels;
-}
-
-MultiFDCompression migrate_multifd_compression(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- assert(s->parameters.multifd_compression < MULTIFD_COMPRESSION__MAX);
- return s->parameters.multifd_compression;
-}
-
-int migrate_multifd_zlib_level(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.multifd_zlib_level;
-}
-
-int migrate_multifd_zstd_level(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.multifd_zstd_level;
-}
-
int migrate_use_tls(void)
{
MigrationState *s;
@@ -2344,24 +2271,6 @@ int migrate_use_tls(void)
return s->parameters.tls_creds && *s->parameters.tls_creds;
}
-uint64_t migrate_xbzrle_cache_size(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.xbzrle_cache_size;
-}
-
-static int64_t migrate_max_postcopy_bandwidth(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.max_postcopy_bandwidth;
-}
-
bool migrate_use_block_incremental(void)
{
MigrationState *s;
diff --git a/migration/multifd-zlib.c b/migration/multifd-zlib.c
index 37770248e1..81701250ad 100644
--- a/migration/multifd-zlib.c
+++ b/migration/multifd-zlib.c
@@ -18,6 +18,7 @@
#include "qapi/error.h"
#include "migration.h"
#include "trace.h"
+#include "options.h"
#include "multifd.h"
struct zlib_data {
diff --git a/migration/multifd-zstd.c b/migration/multifd-zstd.c
index f4a8e1ed1f..d1d29e76cc 100644
--- a/migration/multifd-zstd.c
+++ b/migration/multifd-zstd.c
@@ -18,6 +18,7 @@
#include "qapi/error.h"
#include "migration.h"
#include "trace.h"
+#include "options.h"
#include "multifd.h"
struct zstd_data {
diff --git a/migration/options.c b/migration/options.c
index cd0ffb8a20..cd5a131c69 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -462,3 +462,96 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
s->capabilities[cap->value->capability] = cap->value->state;
}
}
+
+/* parameters */
+
+int migrate_compress_level(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.compress_level;
+}
+
+int migrate_compress_threads(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.compress_threads;
+}
+
+int migrate_compress_wait_thread(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.compress_wait_thread;
+}
+
+int migrate_decompress_threads(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.decompress_threads;
+}
+
+int64_t migrate_max_postcopy_bandwidth(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.max_postcopy_bandwidth;
+}
+
+int migrate_multifd_channels(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.multifd_channels;
+}
+
+MultiFDCompression migrate_multifd_compression(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ assert(s->parameters.multifd_compression < MULTIFD_COMPRESSION__MAX);
+ return s->parameters.multifd_compression;
+}
+
+int migrate_multifd_zlib_level(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.multifd_zlib_level;
+}
+
+int migrate_multifd_zstd_level(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.multifd_zstd_level;
+}
+
+uint64_t migrate_xbzrle_cache_size(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.xbzrle_cache_size;
+}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 19/43] migration: Use migrate_max_postcopy_bandwidth()
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (17 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 18/43] migration: Move parameters functions to option.c Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 20/43] migration: Move migrate_use_block_incremental() to option.c Juan Quintela
` (24 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/migration/migration.c b/migration/migration.c
index a04b323fc7..713eba06ac 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3791,7 +3791,7 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
if (resume) {
/* This is a resumed migration */
- rate_limit = s->parameters.max_postcopy_bandwidth /
+ rate_limit = migrate_max_postcopy_bandwidth() /
XFER_LIMIT_RATIO;
} else {
/* This is a fresh new migration */
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 20/43] migration: Move migrate_use_block_incremental() to option.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (18 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 19/43] migration: Use migrate_max_postcopy_bandwidth() Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 21/43] migration: Create migrate_throttle_trigger_threshold() Juan Quintela
` (23 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
To be consistent with every other parameter, rename to migrate_block_incremental().
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 1 -
migration/options.h | 1 +
migration/block.c | 2 +-
migration/migration.c | 11 +----------
migration/options.c | 9 +++++++++
5 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 5509924c57..bf24a0d471 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -412,7 +412,6 @@ bool migrate_postcopy(void);
int migrate_use_tls(void);
-bool migrate_use_block_incremental(void);
int migrate_max_cpu_throttle(void);
uint64_t ram_get_total_transferred_pages(void);
diff --git a/migration/options.h b/migration/options.h
index 1c1f1a6d47..ea45c87cfe 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -47,6 +47,7 @@ bool migrate_cap_set(int cap, bool value, Error **errp);
/* parameters */
+bool migrate_block_incremental(void);
int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
diff --git a/migration/block.c b/migration/block.c
index 2cacd5a184..11541a28ff 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -418,7 +418,7 @@ static int init_blk_migration(QEMUFile *f)
bmds->bulk_completed = 0;
bmds->total_sectors = sectors;
bmds->completed_sectors = 0;
- bmds->shared_base = migrate_use_block_incremental();
+ bmds->shared_base = migrate_block_incremental();
assert(i < num_bs);
bmds_bs[i].bmds = bmds;
diff --git a/migration/migration.c b/migration/migration.c
index 713eba06ac..62478ac8c1 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2155,7 +2155,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc,
error_setg(errp, "No disk migration is required in COLO mode");
return false;
}
- if (migrate_block() || migrate_use_block_incremental()) {
+ if (migrate_block() || migrate_block_incremental()) {
error_setg(errp, "Command options are incompatible with "
"current migration capabilities");
return false;
@@ -2271,15 +2271,6 @@ int migrate_use_tls(void)
return s->parameters.tls_creds && *s->parameters.tls_creds;
}
-bool migrate_use_block_incremental(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.block_incremental;
-}
-
/* migration thread support */
/*
* Something bad happened to the RP stream, mark an error
diff --git a/migration/options.c b/migration/options.c
index cd5a131c69..b2f15eda6c 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -465,6 +465,15 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
/* parameters */
+bool migrate_block_incremental(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.block_incremental;
+}
+
int migrate_compress_level(void)
{
MigrationState *s;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 21/43] migration: Create migrate_throttle_trigger_threshold()
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (19 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 20/43] migration: Move migrate_use_block_incremental() to option.c Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 22/43] migration: Create migrate_checkpoint_delay() Juan Quintela
` (22 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/options.c | 9 +++++++++
migration/ram.c | 3 +--
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index ea45c87cfe..c9955e87f8 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -57,6 +57,7 @@ int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
int migrate_multifd_zstd_level(void);
+uint8_t migrate_throttle_trigger_threshold(void);
uint64_t migrate_xbzrle_cache_size(void);
#endif
diff --git a/migration/options.c b/migration/options.c
index b2f15eda6c..50d982673c 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -556,6 +556,15 @@ int migrate_multifd_zstd_level(void)
return s->parameters.multifd_zstd_level;
}
+uint8_t migrate_throttle_trigger_threshold(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.throttle_trigger_threshold;
+}
+
uint64_t migrate_xbzrle_cache_size(void)
{
MigrationState *s;
diff --git a/migration/ram.c b/migration/ram.c
index 93c9d016c4..fc456074ee 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1184,8 +1184,7 @@ static void migration_update_rates(RAMState *rs, int64_t end_time)
static void migration_trigger_throttle(RAMState *rs)
{
- MigrationState *s = migrate_get_current();
- uint64_t threshold = s->parameters.throttle_trigger_threshold;
+ uint64_t threshold = migrate_throttle_trigger_threshold();
uint64_t bytes_xfer_period =
stat64_get(&ram_counters.transferred) - rs->bytes_xfer_prev;
uint64_t bytes_dirty_period = rs->num_dirty_pages_period * TARGET_PAGE_SIZE;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 22/43] migration: Create migrate_checkpoint_delay()
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (20 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 21/43] migration: Create migrate_throttle_trigger_threshold() Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 23/43] migration: Create migrate_max_cpu_throttle() Juan Quintela
` (21 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/colo.c | 5 ++---
migration/options.c | 9 +++++++++
3 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index c9955e87f8..ccdeebfee7 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -48,6 +48,7 @@ bool migrate_cap_set(int cap, bool value, Error **errp);
/* parameters */
bool migrate_block_incremental(void);
+uint32_t migrate_checkpoint_delay(void);
int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
diff --git a/migration/colo.c b/migration/colo.c
index 93b78c9270..07bfa21fea 100644
--- a/migration/colo.c
+++ b/migration/colo.c
@@ -576,7 +576,7 @@ static void colo_process_checkpoint(MigrationState *s)
trace_colo_vm_state_change("stop", "run");
timer_mod(s->colo_delay_timer, qemu_clock_get_ms(QEMU_CLOCK_HOST) +
- s->parameters.x_checkpoint_delay);
+ migrate_checkpoint_delay());
while (s->state == MIGRATION_STATUS_COLO) {
if (failover_get_state() != FAILOVER_STATUS_NONE) {
@@ -651,8 +651,7 @@ void colo_checkpoint_notify(void *opaque)
qemu_event_set(&s->colo_checkpoint_event);
s->colo_checkpoint_time = qemu_clock_get_ms(QEMU_CLOCK_HOST);
- next_notify_time = s->colo_checkpoint_time +
- s->parameters.x_checkpoint_delay;
+ next_notify_time = s->colo_checkpoint_time + migrate_checkpoint_delay();
timer_mod(s->colo_delay_timer, next_notify_time);
}
diff --git a/migration/options.c b/migration/options.c
index 50d982673c..0dbc4bdea8 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -474,6 +474,15 @@ bool migrate_block_incremental(void)
return s->parameters.block_incremental;
}
+uint32_t migrate_checkpoint_delay(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.x_checkpoint_delay;
+}
+
int migrate_compress_level(void)
{
MigrationState *s;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 23/43] migration: Create migrate_max_cpu_throttle()
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (21 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 22/43] migration: Create migrate_checkpoint_delay() Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 24/43] migration: Move migrate_announce_params() to option.c Juan Quintela
` (20 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 2 --
migration/options.h | 1 +
migration/options.c | 9 +++++++++
migration/ram.c | 2 +-
4 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index bf24a0d471..8ee70cec76 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -412,8 +412,6 @@ bool migrate_postcopy(void);
int migrate_use_tls(void);
-int migrate_max_cpu_throttle(void);
-
uint64_t ram_get_total_transferred_pages(void);
/* Sending on the return path - generic and then for each message type */
diff --git a/migration/options.h b/migration/options.h
index ccdeebfee7..0e026bc150 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -53,6 +53,7 @@ int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
int migrate_decompress_threads(void);
+uint8_t migrate_max_cpu_throttle(void);
int64_t migrate_max_postcopy_bandwidth(void);
int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
diff --git a/migration/options.c b/migration/options.c
index 0dbc4bdea8..472982f91e 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -519,6 +519,15 @@ int migrate_decompress_threads(void)
return s->parameters.decompress_threads;
}
+uint8_t migrate_max_cpu_throttle(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.max_cpu_throttle;
+}
+
int64_t migrate_max_postcopy_bandwidth(void)
{
MigrationState *s;
diff --git a/migration/ram.c b/migration/ram.c
index fc456074ee..daa880fb80 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -721,7 +721,7 @@ static void mig_throttle_guest_down(uint64_t bytes_dirty_period,
uint64_t pct_initial = s->parameters.cpu_throttle_initial;
uint64_t pct_increment = s->parameters.cpu_throttle_increment;
bool pct_tailslow = s->parameters.cpu_throttle_tailslow;
- int pct_max = s->parameters.max_cpu_throttle;
+ int pct_max = migrate_max_cpu_throttle();
uint64_t throttle_now = cpu_throttle_get_percentage();
uint64_t cpu_now, cpu_ideal, throttle_inc;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 24/43] migration: Move migrate_announce_params() to option.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (22 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 23/43] migration: Create migrate_max_cpu_throttle() Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 25/43] migration: Create migrate_cpu_throttle_initial() " Juan Quintela
` (19 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 14 --------------
migration/options.c | 19 +++++++++++++++++++
2 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 62478ac8c1..176ddb51f1 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -954,20 +954,6 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
return params;
}
-AnnounceParameters *migrate_announce_params(void)
-{
- static AnnounceParameters ap;
-
- MigrationState *s = migrate_get_current();
-
- ap.initial = s->parameters.announce_initial;
- ap.max = s->parameters.announce_max;
- ap.rounds = s->parameters.announce_rounds;
- ap.step = s->parameters.announce_step;
-
- return ≈
-}
-
/*
* Return true if we're already in the middle of a migration
* (i.e. any of the active or setup states)
diff --git a/migration/options.c b/migration/options.c
index 472982f91e..afb7794cec 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -18,6 +18,7 @@
#include "qapi/qapi-commands-migration.h"
#include "qapi/qmp/qerror.h"
#include "sysemu/runstate.h"
+#include "migration/misc.h"
#include "migration.h"
#include "ram.h"
#include "options.h"
@@ -591,3 +592,21 @@ uint64_t migrate_xbzrle_cache_size(void)
return s->parameters.xbzrle_cache_size;
}
+
+/* parameters helpers */
+
+AnnounceParameters *migrate_announce_params(void)
+{
+ static AnnounceParameters ap;
+
+ MigrationState *s = migrate_get_current();
+
+ ap.initial = s->parameters.announce_initial;
+ ap.max = s->parameters.announce_max;
+ ap.rounds = s->parameters.announce_rounds;
+ ap.step = s->parameters.announce_step;
+
+ return ≈
+}
+
+
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 25/43] migration: Create migrate_cpu_throttle_initial() to option.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (23 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 24/43] migration: Move migrate_announce_params() to option.c Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 26/43] migration: Create migrate_cpu_throttle_increment() function Juan Quintela
` (18 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/options.c | 9 +++++++++
migration/ram.c | 2 +-
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/migration/options.h b/migration/options.h
index 0e026bc150..fc34ad49c7 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -52,6 +52,7 @@ uint32_t migrate_checkpoint_delay(void);
int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
+uint8_t migrate_cpu_throttle_initial(void);
int migrate_decompress_threads(void);
uint8_t migrate_max_cpu_throttle(void);
int64_t migrate_max_postcopy_bandwidth(void);
diff --git a/migration/options.c b/migration/options.c
index afb7794cec..f7dd7280b9 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -511,6 +511,15 @@ int migrate_compress_wait_thread(void)
return s->parameters.compress_wait_thread;
}
+uint8_t migrate_cpu_throttle_initial(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.cpu_throttle_initial;
+}
+
int migrate_decompress_threads(void)
{
MigrationState *s;
diff --git a/migration/ram.c b/migration/ram.c
index daa880fb80..416688f508 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -718,7 +718,7 @@ static void mig_throttle_guest_down(uint64_t bytes_dirty_period,
uint64_t bytes_dirty_threshold)
{
MigrationState *s = migrate_get_current();
- uint64_t pct_initial = s->parameters.cpu_throttle_initial;
+ uint64_t pct_initial = migrate_cpu_throttle_initial();
uint64_t pct_increment = s->parameters.cpu_throttle_increment;
bool pct_tailslow = s->parameters.cpu_throttle_tailslow;
int pct_max = migrate_max_cpu_throttle();
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 26/43] migration: Create migrate_cpu_throttle_increment() function
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (24 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 25/43] migration: Create migrate_cpu_throttle_initial() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 27/43] migration: Create migrate_cpu_throttle_tailslow() function Juan Quintela
` (17 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/options.c | 9 +++++++++
migration/ram.c | 2 +-
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/migration/options.h b/migration/options.h
index fc34ad49c7..253c7f73e6 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -52,6 +52,7 @@ uint32_t migrate_checkpoint_delay(void);
int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
+uint8_t migrate_cpu_throttle_increment(void);
uint8_t migrate_cpu_throttle_initial(void);
int migrate_decompress_threads(void);
uint8_t migrate_max_cpu_throttle(void);
diff --git a/migration/options.c b/migration/options.c
index f7dd7280b9..c9ef08483c 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -511,6 +511,15 @@ int migrate_compress_wait_thread(void)
return s->parameters.compress_wait_thread;
}
+uint8_t migrate_cpu_throttle_increment(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.cpu_throttle_increment;
+}
+
uint8_t migrate_cpu_throttle_initial(void)
{
MigrationState *s;
diff --git a/migration/ram.c b/migration/ram.c
index 416688f508..7c764bbb3d 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -719,7 +719,7 @@ static void mig_throttle_guest_down(uint64_t bytes_dirty_period,
{
MigrationState *s = migrate_get_current();
uint64_t pct_initial = migrate_cpu_throttle_initial();
- uint64_t pct_increment = s->parameters.cpu_throttle_increment;
+ uint64_t pct_increment = migrate_cpu_throttle_increment();
bool pct_tailslow = s->parameters.cpu_throttle_tailslow;
int pct_max = migrate_max_cpu_throttle();
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 27/43] migration: Create migrate_cpu_throttle_tailslow() function
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (25 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 26/43] migration: Create migrate_cpu_throttle_increment() function Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 28/43] migration: Move migrate_use_tls() to options.c Juan Quintela
` (16 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/options.c | 9 +++++++++
migration/ram.c | 3 +--
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 253c7f73e6..432d9ccc2e 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -54,6 +54,7 @@ int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
uint8_t migrate_cpu_throttle_increment(void);
uint8_t migrate_cpu_throttle_initial(void);
+bool migrate_cpu_throttle_tailslow(void);
int migrate_decompress_threads(void);
uint8_t migrate_max_cpu_throttle(void);
int64_t migrate_max_postcopy_bandwidth(void);
diff --git a/migration/options.c b/migration/options.c
index c9ef08483c..5e08680ba2 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -529,6 +529,15 @@ uint8_t migrate_cpu_throttle_initial(void)
return s->parameters.cpu_throttle_initial;
}
+bool migrate_cpu_throttle_tailslow(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.cpu_throttle_tailslow;
+}
+
int migrate_decompress_threads(void)
{
MigrationState *s;
diff --git a/migration/ram.c b/migration/ram.c
index 7c764bbb3d..18fafb414a 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -717,10 +717,9 @@ static size_t save_page_header(PageSearchStatus *pss, RAMBlock *block,
static void mig_throttle_guest_down(uint64_t bytes_dirty_period,
uint64_t bytes_dirty_threshold)
{
- MigrationState *s = migrate_get_current();
uint64_t pct_initial = migrate_cpu_throttle_initial();
uint64_t pct_increment = migrate_cpu_throttle_increment();
- bool pct_tailslow = s->parameters.cpu_throttle_tailslow;
+ bool pct_tailslow = migrate_cpu_throttle_tailslow();
int pct_max = migrate_max_cpu_throttle();
uint64_t throttle_now = cpu_throttle_get_percentage();
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 28/43] migration: Move migrate_use_tls() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (26 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 27/43] migration: Create migrate_cpu_throttle_tailslow() function Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 29/43] migration: Move migrate_postcopy() " Juan Quintela
` (15 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Once there, rename it to migrate_tls() and make it return bool for
consistency.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 2 --
migration/options.h | 9 +++++++++
migration/migration.c | 9 ---------
migration/options.c | 16 +++++++++++++++-
migration/tls.c | 3 ++-
5 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 8ee70cec76..57efcb7c9f 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -410,8 +410,6 @@ MigrationState *migrate_get_current(void);
bool migrate_postcopy(void);
-int migrate_use_tls(void);
-
uint64_t ram_get_total_transferred_pages(void);
/* Sending on the return path - generic and then for each message type */
diff --git a/migration/options.h b/migration/options.h
index 432d9ccc2e..4fbe4cb411 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -40,6 +40,15 @@ bool migrate_xbzrle(void);
bool migrate_zero_blocks(void);
bool migrate_zero_copy_send(void);
+/*
+ * pseudo capabilities
+ *
+ * This are functions that are used in a similar way that capabilities
+ * check, but they are not a capability.
+ */
+
+bool migrate_tls(void);
+
/* capabilities helpers */
bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp);
diff --git a/migration/migration.c b/migration/migration.c
index 176ddb51f1..7c4b49deda 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2248,15 +2248,6 @@ bool migrate_postcopy(void)
return migrate_postcopy_ram() || migrate_dirty_bitmaps();
}
-int migrate_use_tls(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.tls_creds && *s->parameters.tls_creds;
-}
-
/* migration thread support */
/*
* Something bad happened to the RP stream, mark an error
diff --git a/migration/options.c b/migration/options.c
index 5e08680ba2..0ea3500b24 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -206,6 +206,20 @@ bool migrate_zero_copy_send(void)
return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
}
+
+/* pseudo capabilities */
+
+bool migrate_tls(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.tls_creds && *s->parameters.tls_creds;
+}
+
+
+
typedef enum WriteTrackingSupport {
WT_SUPPORT_UNKNOWN = 0,
WT_SUPPORT_ABSENT,
@@ -355,7 +369,7 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
new_caps[MIGRATION_CAPABILITY_COMPRESS] ||
new_caps[MIGRATION_CAPABILITY_XBZRLE] ||
migrate_multifd_compression() ||
- migrate_use_tls())) {
+ migrate_tls())) {
error_setg(errp,
"Zero copy only available for non-compressed non-TLS multifd migration");
return false;
diff --git a/migration/tls.c b/migration/tls.c
index 4d2166a209..acd38e0b62 100644
--- a/migration/tls.c
+++ b/migration/tls.c
@@ -22,6 +22,7 @@
#include "channel.h"
#include "migration.h"
#include "tls.h"
+#include "options.h"
#include "crypto/tlscreds.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
@@ -165,7 +166,7 @@ void migration_tls_channel_connect(MigrationState *s,
bool migrate_channel_requires_tls_upgrade(QIOChannel *ioc)
{
- if (!migrate_use_tls()) {
+ if (!migrate_tls()) {
return false;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 29/43] migration: Move migrate_postcopy() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (27 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 28/43] migration: Move migrate_use_tls() to options.c Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 30/43] migration: Create migrate_max_bandwidth() function Juan Quintela
` (14 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 2 --
migration/options.h | 1 +
migration/migration.c | 5 -----
migration/options.c | 5 +++++
4 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 57efcb7c9f..f241159dd3 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -408,8 +408,6 @@ bool migration_is_blocked(Error **errp);
bool migration_in_postcopy(void);
MigrationState *migrate_get_current(void);
-bool migrate_postcopy(void);
-
uint64_t ram_get_total_transferred_pages(void);
/* Sending on the return path - generic and then for each message type */
diff --git a/migration/options.h b/migration/options.h
index 4fbe4cb411..4214bebcb7 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -47,6 +47,7 @@ bool migrate_zero_copy_send(void);
* check, but they are not a capability.
*/
+bool migrate_postcopy(void);
bool migrate_tls(void);
/* capabilities helpers */
diff --git a/migration/migration.c b/migration/migration.c
index 7c4b49deda..e091663af9 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2243,11 +2243,6 @@ void qmp_migrate_continue(MigrationStatus state, Error **errp)
qemu_sem_post(&s->pause_sem);
}
-bool migrate_postcopy(void)
-{
- return migrate_postcopy_ram() || migrate_dirty_bitmaps();
-}
-
/* migration thread support */
/*
* Something bad happened to the RP stream, mark an error
diff --git a/migration/options.c b/migration/options.c
index 0ea3500b24..d9383afa35 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -209,6 +209,11 @@ bool migrate_zero_copy_send(void)
/* pseudo capabilities */
+bool migrate_postcopy(void)
+{
+ return migrate_postcopy_ram() || migrate_dirty_bitmaps();
+}
+
bool migrate_tls(void)
{
MigrationState *s;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 30/43] migration: Create migrate_max_bandwidth() function
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (28 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 29/43] migration: Move migrate_postcopy() " Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 31/43] migration: Move qmp_query_migrate_parameters() to options.c Juan Quintela
` (13 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/migration.c | 2 +-
migration/options.c | 9 +++++++++
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/migration/options.h b/migration/options.h
index 4214bebcb7..17ac53429e 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -67,6 +67,7 @@ uint8_t migrate_cpu_throttle_initial(void);
bool migrate_cpu_throttle_tailslow(void);
int migrate_decompress_threads(void);
uint8_t migrate_max_cpu_throttle(void);
+uint64_t migrate_max_bandwidth(void);
int64_t migrate_max_postcopy_bandwidth(void);
int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
diff --git a/migration/migration.c b/migration/migration.c
index e091663af9..40453ba454 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3758,7 +3758,7 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
XFER_LIMIT_RATIO;
} else {
/* This is a fresh new migration */
- rate_limit = s->parameters.max_bandwidth / XFER_LIMIT_RATIO;
+ rate_limit = migrate_max_bandwidth() / XFER_LIMIT_RATIO;
/* Notify before starting migration thread */
notifier_list_notify(&migration_state_notifiers, s);
diff --git a/migration/options.c b/migration/options.c
index d9383afa35..4f6298bdc5 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -575,6 +575,15 @@ uint8_t migrate_max_cpu_throttle(void)
return s->parameters.max_cpu_throttle;
}
+uint64_t migrate_max_bandwidth(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.max_bandwidth;
+}
+
int64_t migrate_max_postcopy_bandwidth(void)
{
MigrationState *s;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 31/43] migration: Move qmp_query_migrate_parameters() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (29 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 30/43] migration: Create migrate_max_bandwidth() function Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 32/43] migration: Move qmp_migrate_set_parameters() " Juan Quintela
` (12 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 68 -------------------------------------------
migration/options.c | 68 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 68 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 40453ba454..77ff3b97c3 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -886,74 +886,6 @@ void migrate_send_rp_resume_ack(MigrationIncomingState *mis, uint32_t value)
migrate_send_rp_message(mis, MIG_RP_MSG_RESUME_ACK, sizeof(buf), &buf);
}
-MigrationParameters *qmp_query_migrate_parameters(Error **errp)
-{
- MigrationParameters *params;
- MigrationState *s = migrate_get_current();
-
- /* TODO use QAPI_CLONE() instead of duplicating it inline */
- params = g_malloc0(sizeof(*params));
- params->has_compress_level = true;
- params->compress_level = s->parameters.compress_level;
- params->has_compress_threads = true;
- params->compress_threads = s->parameters.compress_threads;
- params->has_compress_wait_thread = true;
- params->compress_wait_thread = s->parameters.compress_wait_thread;
- params->has_decompress_threads = true;
- params->decompress_threads = s->parameters.decompress_threads;
- params->has_throttle_trigger_threshold = true;
- params->throttle_trigger_threshold = s->parameters.throttle_trigger_threshold;
- params->has_cpu_throttle_initial = true;
- params->cpu_throttle_initial = s->parameters.cpu_throttle_initial;
- params->has_cpu_throttle_increment = true;
- params->cpu_throttle_increment = s->parameters.cpu_throttle_increment;
- params->has_cpu_throttle_tailslow = true;
- params->cpu_throttle_tailslow = s->parameters.cpu_throttle_tailslow;
- params->tls_creds = g_strdup(s->parameters.tls_creds);
- params->tls_hostname = g_strdup(s->parameters.tls_hostname);
- params->tls_authz = g_strdup(s->parameters.tls_authz ?
- s->parameters.tls_authz : "");
- params->has_max_bandwidth = true;
- params->max_bandwidth = s->parameters.max_bandwidth;
- params->has_downtime_limit = true;
- params->downtime_limit = s->parameters.downtime_limit;
- params->has_x_checkpoint_delay = true;
- params->x_checkpoint_delay = s->parameters.x_checkpoint_delay;
- params->has_block_incremental = true;
- params->block_incremental = s->parameters.block_incremental;
- params->has_multifd_channels = true;
- params->multifd_channels = s->parameters.multifd_channels;
- params->has_multifd_compression = true;
- params->multifd_compression = s->parameters.multifd_compression;
- params->has_multifd_zlib_level = true;
- params->multifd_zlib_level = s->parameters.multifd_zlib_level;
- params->has_multifd_zstd_level = true;
- params->multifd_zstd_level = s->parameters.multifd_zstd_level;
- params->has_xbzrle_cache_size = true;
- params->xbzrle_cache_size = s->parameters.xbzrle_cache_size;
- params->has_max_postcopy_bandwidth = true;
- params->max_postcopy_bandwidth = s->parameters.max_postcopy_bandwidth;
- params->has_max_cpu_throttle = true;
- params->max_cpu_throttle = s->parameters.max_cpu_throttle;
- params->has_announce_initial = true;
- params->announce_initial = s->parameters.announce_initial;
- params->has_announce_max = true;
- params->announce_max = s->parameters.announce_max;
- params->has_announce_rounds = true;
- params->announce_rounds = s->parameters.announce_rounds;
- params->has_announce_step = true;
- params->announce_step = s->parameters.announce_step;
-
- if (s->parameters.has_block_bitmap_mapping) {
- params->has_block_bitmap_mapping = true;
- params->block_bitmap_mapping =
- QAPI_CLONE(BitmapMigrationNodeAliasList,
- s->parameters.block_bitmap_mapping);
- }
-
- return params;
-}
-
/*
* Return true if we're already in the middle of a migration
* (i.e. any of the active or setup states)
diff --git a/migration/options.c b/migration/options.c
index 4f6298bdc5..91879967b1 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -14,8 +14,10 @@
*/
#include "qemu/osdep.h"
+#include "qapi/clone-visitor.h"
#include "qapi/error.h"
#include "qapi/qapi-commands-migration.h"
+#include "qapi/qapi-visit-migration.h"
#include "qapi/qmp/qerror.h"
#include "sysemu/runstate.h"
#include "migration/misc.h"
@@ -664,4 +666,70 @@ AnnounceParameters *migrate_announce_params(void)
return ≈
}
+MigrationParameters *qmp_query_migrate_parameters(Error **errp)
+{
+ MigrationParameters *params;
+ MigrationState *s = migrate_get_current();
+ /* TODO use QAPI_CLONE() instead of duplicating it inline */
+ params = g_malloc0(sizeof(*params));
+ params->has_compress_level = true;
+ params->compress_level = s->parameters.compress_level;
+ params->has_compress_threads = true;
+ params->compress_threads = s->parameters.compress_threads;
+ params->has_compress_wait_thread = true;
+ params->compress_wait_thread = s->parameters.compress_wait_thread;
+ params->has_decompress_threads = true;
+ params->decompress_threads = s->parameters.decompress_threads;
+ params->has_throttle_trigger_threshold = true;
+ params->throttle_trigger_threshold = s->parameters.throttle_trigger_threshold;
+ params->has_cpu_throttle_initial = true;
+ params->cpu_throttle_initial = s->parameters.cpu_throttle_initial;
+ params->has_cpu_throttle_increment = true;
+ params->cpu_throttle_increment = s->parameters.cpu_throttle_increment;
+ params->has_cpu_throttle_tailslow = true;
+ params->cpu_throttle_tailslow = s->parameters.cpu_throttle_tailslow;
+ params->tls_creds = g_strdup(s->parameters.tls_creds);
+ params->tls_hostname = g_strdup(s->parameters.tls_hostname);
+ params->tls_authz = g_strdup(s->parameters.tls_authz ?
+ s->parameters.tls_authz : "");
+ params->has_max_bandwidth = true;
+ params->max_bandwidth = s->parameters.max_bandwidth;
+ params->has_downtime_limit = true;
+ params->downtime_limit = s->parameters.downtime_limit;
+ params->has_x_checkpoint_delay = true;
+ params->x_checkpoint_delay = s->parameters.x_checkpoint_delay;
+ params->has_block_incremental = true;
+ params->block_incremental = s->parameters.block_incremental;
+ params->has_multifd_channels = true;
+ params->multifd_channels = s->parameters.multifd_channels;
+ params->has_multifd_compression = true;
+ params->multifd_compression = s->parameters.multifd_compression;
+ params->has_multifd_zlib_level = true;
+ params->multifd_zlib_level = s->parameters.multifd_zlib_level;
+ params->has_multifd_zstd_level = true;
+ params->multifd_zstd_level = s->parameters.multifd_zstd_level;
+ params->has_xbzrle_cache_size = true;
+ params->xbzrle_cache_size = s->parameters.xbzrle_cache_size;
+ params->has_max_postcopy_bandwidth = true;
+ params->max_postcopy_bandwidth = s->parameters.max_postcopy_bandwidth;
+ params->has_max_cpu_throttle = true;
+ params->max_cpu_throttle = s->parameters.max_cpu_throttle;
+ params->has_announce_initial = true;
+ params->announce_initial = s->parameters.announce_initial;
+ params->has_announce_max = true;
+ params->announce_max = s->parameters.announce_max;
+ params->has_announce_rounds = true;
+ params->announce_rounds = s->parameters.announce_rounds;
+ params->has_announce_step = true;
+ params->announce_step = s->parameters.announce_step;
+
+ if (s->parameters.has_block_bitmap_mapping) {
+ params->has_block_bitmap_mapping = true;
+ params->block_bitmap_mapping =
+ QAPI_CLONE(BitmapMigrationNodeAliasList,
+ s->parameters.block_bitmap_mapping);
+ }
+
+ return params;
+}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 32/43] migration: Move qmp_migrate_set_parameters() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (30 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 31/43] migration: Move qmp_query_migrate_parameters() to options.c Juan Quintela
@ 2023-03-02 16:33 ` Juan Quintela
2023-03-02 16:34 ` [PATCH 33/43] migration: Create migrate_params_init() function Juan Quintela
` (11 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:33 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 11 ++
migration/migration.c | 420 ------------------------------------------
migration/options.c | 418 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 429 insertions(+), 420 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 17ac53429e..95338d1efd 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -16,6 +16,13 @@
#ifndef QEMU_MIGRATION_OPTIONS_H
#define QEMU_MIGRATION_OPTIONS_H
+/* constants */
+
+/* Amount of time to allocate to each "chunk" of bandwidth-throttled
+ * data. */
+#define BUFFER_DELAY 100
+#define XFER_LIMIT_RATIO (1000 / BUFFER_DELAY)
+
/* capabilities */
bool migrate_auto_converge(void);
@@ -76,4 +83,8 @@ int migrate_multifd_zstd_level(void);
uint8_t migrate_throttle_trigger_threshold(void);
uint64_t migrate_xbzrle_cache_size(void);
+/* parameters helpers */
+
+bool migrate_params_check(MigrationParameters *params, Error **errp);
+
#endif
diff --git a/migration/migration.c b/migration/migration.c
index 77ff3b97c3..5d43e815ed 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -67,19 +67,10 @@
#define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttling */
-/* Amount of time to allocate to each "chunk" of bandwidth-throttled
- * data. */
-#define BUFFER_DELAY 100
-#define XFER_LIMIT_RATIO (1000 / BUFFER_DELAY)
-
/* Time in milliseconds we are allowed to stop the source,
* for sending the last part */
#define DEFAULT_MIGRATE_SET_DOWNTIME 300
-/* Maximum migrate downtime set to 2000 seconds */
-#define MAX_MIGRATE_DOWNTIME_SECONDS 2000
-#define MAX_MIGRATE_DOWNTIME (MAX_MIGRATE_DOWNTIME_SECONDS * 1000)
-
/* Default compression thread count */
#define DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT 8
/* Default decompression thread count, usually decompression is at
@@ -1138,417 +1129,6 @@ MigrationInfo *qmp_query_migrate(Error **errp)
return info;
}
-/*
- * Check whether the parameters are valid. Error will be put into errp
- * (if provided). Return true if valid, otherwise false.
- */
-static bool migrate_params_check(MigrationParameters *params, Error **errp)
-{
- if (params->has_compress_level &&
- (params->compress_level > 9)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "compress_level",
- "a value between 0 and 9");
- return false;
- }
-
- if (params->has_compress_threads && (params->compress_threads < 1)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "compress_threads",
- "a value between 1 and 255");
- return false;
- }
-
- if (params->has_decompress_threads && (params->decompress_threads < 1)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "decompress_threads",
- "a value between 1 and 255");
- return false;
- }
-
- if (params->has_throttle_trigger_threshold &&
- (params->throttle_trigger_threshold < 1 ||
- params->throttle_trigger_threshold > 100)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "throttle_trigger_threshold",
- "an integer in the range of 1 to 100");
- return false;
- }
-
- if (params->has_cpu_throttle_initial &&
- (params->cpu_throttle_initial < 1 ||
- params->cpu_throttle_initial > 99)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "cpu_throttle_initial",
- "an integer in the range of 1 to 99");
- return false;
- }
-
- if (params->has_cpu_throttle_increment &&
- (params->cpu_throttle_increment < 1 ||
- params->cpu_throttle_increment > 99)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "cpu_throttle_increment",
- "an integer in the range of 1 to 99");
- return false;
- }
-
- if (params->has_max_bandwidth && (params->max_bandwidth > SIZE_MAX)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "max_bandwidth",
- "an integer in the range of 0 to "stringify(SIZE_MAX)
- " bytes/second");
- return false;
- }
-
- if (params->has_downtime_limit &&
- (params->downtime_limit > MAX_MIGRATE_DOWNTIME)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "downtime_limit",
- "an integer in the range of 0 to "
- stringify(MAX_MIGRATE_DOWNTIME)" ms");
- return false;
- }
-
- /* x_checkpoint_delay is now always positive */
-
- if (params->has_multifd_channels && (params->multifd_channels < 1)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "multifd_channels",
- "a value between 1 and 255");
- return false;
- }
-
- if (params->has_multifd_zlib_level &&
- (params->multifd_zlib_level > 9)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_zlib_level",
- "a value between 0 and 9");
- return false;
- }
-
- if (params->has_multifd_zstd_level &&
- (params->multifd_zstd_level > 20)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_zstd_level",
- "a value between 0 and 20");
- return false;
- }
-
- if (params->has_xbzrle_cache_size &&
- (params->xbzrle_cache_size < qemu_target_page_size() ||
- !is_power_of_2(params->xbzrle_cache_size))) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "xbzrle_cache_size",
- "a power of two no less than the target page size");
- return false;
- }
-
- if (params->has_max_cpu_throttle &&
- (params->max_cpu_throttle < params->cpu_throttle_initial ||
- params->max_cpu_throttle > 99)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "max_cpu_throttle",
- "an integer in the range of cpu_throttle_initial to 99");
- return false;
- }
-
- if (params->has_announce_initial &&
- params->announce_initial > 100000) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "announce_initial",
- "a value between 0 and 100000");
- return false;
- }
- if (params->has_announce_max &&
- params->announce_max > 100000) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "announce_max",
- "a value between 0 and 100000");
- return false;
- }
- if (params->has_announce_rounds &&
- params->announce_rounds > 1000) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "announce_rounds",
- "a value between 0 and 1000");
- return false;
- }
- if (params->has_announce_step &&
- (params->announce_step < 1 ||
- params->announce_step > 10000)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "announce_step",
- "a value between 0 and 10000");
- return false;
- }
-
- if (params->has_block_bitmap_mapping &&
- !check_dirty_bitmap_mig_alias_map(params->block_bitmap_mapping, errp)) {
- error_prepend(errp, "Invalid mapping given for block-bitmap-mapping: ");
- return false;
- }
-
-#ifdef CONFIG_LINUX
- if (migrate_zero_copy_send() &&
- ((params->has_multifd_compression && params->multifd_compression) ||
- (params->tls_creds && *params->tls_creds))) {
- error_setg(errp,
- "Zero copy only available for non-compressed non-TLS multifd migration");
- return false;
- }
-#endif
-
- return true;
-}
-
-static void migrate_params_test_apply(MigrateSetParameters *params,
- MigrationParameters *dest)
-{
- *dest = migrate_get_current()->parameters;
-
- /* TODO use QAPI_CLONE() instead of duplicating it inline */
-
- if (params->has_compress_level) {
- dest->compress_level = params->compress_level;
- }
-
- if (params->has_compress_threads) {
- dest->compress_threads = params->compress_threads;
- }
-
- if (params->has_compress_wait_thread) {
- dest->compress_wait_thread = params->compress_wait_thread;
- }
-
- if (params->has_decompress_threads) {
- dest->decompress_threads = params->decompress_threads;
- }
-
- if (params->has_throttle_trigger_threshold) {
- dest->throttle_trigger_threshold = params->throttle_trigger_threshold;
- }
-
- if (params->has_cpu_throttle_initial) {
- dest->cpu_throttle_initial = params->cpu_throttle_initial;
- }
-
- if (params->has_cpu_throttle_increment) {
- dest->cpu_throttle_increment = params->cpu_throttle_increment;
- }
-
- if (params->has_cpu_throttle_tailslow) {
- dest->cpu_throttle_tailslow = params->cpu_throttle_tailslow;
- }
-
- if (params->tls_creds) {
- assert(params->tls_creds->type == QTYPE_QSTRING);
- dest->tls_creds = params->tls_creds->u.s;
- }
-
- if (params->tls_hostname) {
- assert(params->tls_hostname->type == QTYPE_QSTRING);
- dest->tls_hostname = params->tls_hostname->u.s;
- }
-
- if (params->has_max_bandwidth) {
- dest->max_bandwidth = params->max_bandwidth;
- }
-
- if (params->has_downtime_limit) {
- dest->downtime_limit = params->downtime_limit;
- }
-
- if (params->has_x_checkpoint_delay) {
- dest->x_checkpoint_delay = params->x_checkpoint_delay;
- }
-
- if (params->has_block_incremental) {
- dest->block_incremental = params->block_incremental;
- }
- if (params->has_multifd_channels) {
- dest->multifd_channels = params->multifd_channels;
- }
- if (params->has_multifd_compression) {
- dest->multifd_compression = params->multifd_compression;
- }
- if (params->has_xbzrle_cache_size) {
- dest->xbzrle_cache_size = params->xbzrle_cache_size;
- }
- if (params->has_max_postcopy_bandwidth) {
- dest->max_postcopy_bandwidth = params->max_postcopy_bandwidth;
- }
- if (params->has_max_cpu_throttle) {
- dest->max_cpu_throttle = params->max_cpu_throttle;
- }
- if (params->has_announce_initial) {
- dest->announce_initial = params->announce_initial;
- }
- if (params->has_announce_max) {
- dest->announce_max = params->announce_max;
- }
- if (params->has_announce_rounds) {
- dest->announce_rounds = params->announce_rounds;
- }
- if (params->has_announce_step) {
- dest->announce_step = params->announce_step;
- }
-
- if (params->has_block_bitmap_mapping) {
- dest->has_block_bitmap_mapping = true;
- dest->block_bitmap_mapping = params->block_bitmap_mapping;
- }
-}
-
-static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
-{
- MigrationState *s = migrate_get_current();
-
- /* TODO use QAPI_CLONE() instead of duplicating it inline */
-
- if (params->has_compress_level) {
- s->parameters.compress_level = params->compress_level;
- }
-
- if (params->has_compress_threads) {
- s->parameters.compress_threads = params->compress_threads;
- }
-
- if (params->has_compress_wait_thread) {
- s->parameters.compress_wait_thread = params->compress_wait_thread;
- }
-
- if (params->has_decompress_threads) {
- s->parameters.decompress_threads = params->decompress_threads;
- }
-
- if (params->has_throttle_trigger_threshold) {
- s->parameters.throttle_trigger_threshold = params->throttle_trigger_threshold;
- }
-
- if (params->has_cpu_throttle_initial) {
- s->parameters.cpu_throttle_initial = params->cpu_throttle_initial;
- }
-
- if (params->has_cpu_throttle_increment) {
- s->parameters.cpu_throttle_increment = params->cpu_throttle_increment;
- }
-
- if (params->has_cpu_throttle_tailslow) {
- s->parameters.cpu_throttle_tailslow = params->cpu_throttle_tailslow;
- }
-
- if (params->tls_creds) {
- g_free(s->parameters.tls_creds);
- assert(params->tls_creds->type == QTYPE_QSTRING);
- s->parameters.tls_creds = g_strdup(params->tls_creds->u.s);
- }
-
- if (params->tls_hostname) {
- g_free(s->parameters.tls_hostname);
- assert(params->tls_hostname->type == QTYPE_QSTRING);
- s->parameters.tls_hostname = g_strdup(params->tls_hostname->u.s);
- }
-
- if (params->tls_authz) {
- g_free(s->parameters.tls_authz);
- assert(params->tls_authz->type == QTYPE_QSTRING);
- s->parameters.tls_authz = g_strdup(params->tls_authz->u.s);
- }
-
- if (params->has_max_bandwidth) {
- s->parameters.max_bandwidth = params->max_bandwidth;
- if (s->to_dst_file && !migration_in_postcopy()) {
- qemu_file_set_rate_limit(s->to_dst_file,
- s->parameters.max_bandwidth / XFER_LIMIT_RATIO);
- }
- }
-
- if (params->has_downtime_limit) {
- s->parameters.downtime_limit = params->downtime_limit;
- }
-
- if (params->has_x_checkpoint_delay) {
- s->parameters.x_checkpoint_delay = params->x_checkpoint_delay;
- if (migration_in_colo_state()) {
- colo_checkpoint_notify(s);
- }
- }
-
- if (params->has_block_incremental) {
- s->parameters.block_incremental = params->block_incremental;
- }
- if (params->has_multifd_channels) {
- s->parameters.multifd_channels = params->multifd_channels;
- }
- if (params->has_multifd_compression) {
- s->parameters.multifd_compression = params->multifd_compression;
- }
- if (params->has_xbzrle_cache_size) {
- s->parameters.xbzrle_cache_size = params->xbzrle_cache_size;
- xbzrle_cache_resize(params->xbzrle_cache_size, errp);
- }
- if (params->has_max_postcopy_bandwidth) {
- s->parameters.max_postcopy_bandwidth = params->max_postcopy_bandwidth;
- if (s->to_dst_file && migration_in_postcopy()) {
- qemu_file_set_rate_limit(s->to_dst_file,
- s->parameters.max_postcopy_bandwidth / XFER_LIMIT_RATIO);
- }
- }
- if (params->has_max_cpu_throttle) {
- s->parameters.max_cpu_throttle = params->max_cpu_throttle;
- }
- if (params->has_announce_initial) {
- s->parameters.announce_initial = params->announce_initial;
- }
- if (params->has_announce_max) {
- s->parameters.announce_max = params->announce_max;
- }
- if (params->has_announce_rounds) {
- s->parameters.announce_rounds = params->announce_rounds;
- }
- if (params->has_announce_step) {
- s->parameters.announce_step = params->announce_step;
- }
-
- if (params->has_block_bitmap_mapping) {
- qapi_free_BitmapMigrationNodeAliasList(
- s->parameters.block_bitmap_mapping);
-
- s->parameters.has_block_bitmap_mapping = true;
- s->parameters.block_bitmap_mapping =
- QAPI_CLONE(BitmapMigrationNodeAliasList,
- params->block_bitmap_mapping);
- }
-}
-
-void qmp_migrate_set_parameters(MigrateSetParameters *params, Error **errp)
-{
- MigrationParameters tmp;
-
- /* TODO Rewrite "" to null instead */
- if (params->tls_creds
- && params->tls_creds->type == QTYPE_QNULL) {
- qobject_unref(params->tls_creds->u.n);
- params->tls_creds->type = QTYPE_QSTRING;
- params->tls_creds->u.s = strdup("");
- }
- /* TODO Rewrite "" to null instead */
- if (params->tls_hostname
- && params->tls_hostname->type == QTYPE_QNULL) {
- qobject_unref(params->tls_hostname->u.n);
- params->tls_hostname->type = QTYPE_QSTRING;
- params->tls_hostname->u.s = strdup("");
- }
-
- migrate_params_test_apply(params, &tmp);
-
- if (!migrate_params_check(&tmp, errp)) {
- /* Invalid parameter */
- return;
- }
-
- migrate_params_apply(params, errp);
-}
-
-
void qmp_migrate_start_postcopy(Error **errp)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/options.c b/migration/options.c
index 91879967b1..efa9c6788d 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -14,17 +14,25 @@
*/
#include "qemu/osdep.h"
+#include "exec/target_page.h"
#include "qapi/clone-visitor.h"
#include "qapi/error.h"
#include "qapi/qapi-commands-migration.h"
#include "qapi/qapi-visit-migration.h"
#include "qapi/qmp/qerror.h"
+#include "qapi/qmp/qnull.h"
#include "sysemu/runstate.h"
+#include "migration/colo.h"
#include "migration/misc.h"
#include "migration.h"
+#include "qemu-file.h"
#include "ram.h"
#include "options.h"
+/* Maximum migrate downtime set to 2000 seconds */
+#define MAX_MIGRATE_DOWNTIME_SECONDS 2000
+#define MAX_MIGRATE_DOWNTIME (MAX_MIGRATE_DOWNTIME_SECONDS * 1000)
+
bool migrate_auto_converge(void)
{
MigrationState *s;
@@ -733,3 +741,413 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
return params;
}
+
+/*
+ * Check whether the parameters are valid. Error will be put into errp
+ * (if provided). Return true if valid, otherwise false.
+ */
+bool migrate_params_check(MigrationParameters *params, Error **errp)
+{
+ if (params->has_compress_level &&
+ (params->compress_level > 9)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "compress_level",
+ "a value between 0 and 9");
+ return false;
+ }
+
+ if (params->has_compress_threads && (params->compress_threads < 1)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "compress_threads",
+ "a value between 1 and 255");
+ return false;
+ }
+
+ if (params->has_decompress_threads && (params->decompress_threads < 1)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "decompress_threads",
+ "a value between 1 and 255");
+ return false;
+ }
+
+ if (params->has_throttle_trigger_threshold &&
+ (params->throttle_trigger_threshold < 1 ||
+ params->throttle_trigger_threshold > 100)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "throttle_trigger_threshold",
+ "an integer in the range of 1 to 100");
+ return false;
+ }
+
+ if (params->has_cpu_throttle_initial &&
+ (params->cpu_throttle_initial < 1 ||
+ params->cpu_throttle_initial > 99)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "cpu_throttle_initial",
+ "an integer in the range of 1 to 99");
+ return false;
+ }
+
+ if (params->has_cpu_throttle_increment &&
+ (params->cpu_throttle_increment < 1 ||
+ params->cpu_throttle_increment > 99)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "cpu_throttle_increment",
+ "an integer in the range of 1 to 99");
+ return false;
+ }
+
+ if (params->has_max_bandwidth && (params->max_bandwidth > SIZE_MAX)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "max_bandwidth",
+ "an integer in the range of 0 to "stringify(SIZE_MAX)
+ " bytes/second");
+ return false;
+ }
+
+ if (params->has_downtime_limit &&
+ (params->downtime_limit > MAX_MIGRATE_DOWNTIME)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "downtime_limit",
+ "an integer in the range of 0 to "
+ stringify(MAX_MIGRATE_DOWNTIME)" ms");
+ return false;
+ }
+
+ /* x_checkpoint_delay is now always positive */
+
+ if (params->has_multifd_channels && (params->multifd_channels < 1)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "multifd_channels",
+ "a value between 1 and 255");
+ return false;
+ }
+
+ if (params->has_multifd_zlib_level &&
+ (params->multifd_zlib_level > 9)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_zlib_level",
+ "a value between 0 and 9");
+ return false;
+ }
+
+ if (params->has_multifd_zstd_level &&
+ (params->multifd_zstd_level > 20)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_zstd_level",
+ "a value between 0 and 20");
+ return false;
+ }
+
+ if (params->has_xbzrle_cache_size &&
+ (params->xbzrle_cache_size < qemu_target_page_size() ||
+ !is_power_of_2(params->xbzrle_cache_size))) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "xbzrle_cache_size",
+ "a power of two no less than the target page size");
+ return false;
+ }
+
+ if (params->has_max_cpu_throttle &&
+ (params->max_cpu_throttle < params->cpu_throttle_initial ||
+ params->max_cpu_throttle > 99)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "max_cpu_throttle",
+ "an integer in the range of cpu_throttle_initial to 99");
+ return false;
+ }
+
+ if (params->has_announce_initial &&
+ params->announce_initial > 100000) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "announce_initial",
+ "a value between 0 and 100000");
+ return false;
+ }
+ if (params->has_announce_max &&
+ params->announce_max > 100000) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "announce_max",
+ "a value between 0 and 100000");
+ return false;
+ }
+ if (params->has_announce_rounds &&
+ params->announce_rounds > 1000) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "announce_rounds",
+ "a value between 0 and 1000");
+ return false;
+ }
+ if (params->has_announce_step &&
+ (params->announce_step < 1 ||
+ params->announce_step > 10000)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "announce_step",
+ "a value between 0 and 10000");
+ return false;
+ }
+
+ if (params->has_block_bitmap_mapping &&
+ !check_dirty_bitmap_mig_alias_map(params->block_bitmap_mapping, errp)) {
+ error_prepend(errp, "Invalid mapping given for block-bitmap-mapping: ");
+ return false;
+ }
+
+#ifdef CONFIG_LINUX
+ if (migrate_zero_copy_send() &&
+ ((params->has_multifd_compression && params->multifd_compression) ||
+ (params->tls_creds && *params->tls_creds))) {
+ error_setg(errp,
+ "Zero copy only available for non-compressed non-TLS multifd migration");
+ return false;
+ }
+#endif
+
+ return true;
+}
+
+static void migrate_params_test_apply(MigrateSetParameters *params,
+ MigrationParameters *dest)
+{
+ *dest = migrate_get_current()->parameters;
+
+ /* TODO use QAPI_CLONE() instead of duplicating it inline */
+
+ if (params->has_compress_level) {
+ dest->compress_level = params->compress_level;
+ }
+
+ if (params->has_compress_threads) {
+ dest->compress_threads = params->compress_threads;
+ }
+
+ if (params->has_compress_wait_thread) {
+ dest->compress_wait_thread = params->compress_wait_thread;
+ }
+
+ if (params->has_decompress_threads) {
+ dest->decompress_threads = params->decompress_threads;
+ }
+
+ if (params->has_throttle_trigger_threshold) {
+ dest->throttle_trigger_threshold = params->throttle_trigger_threshold;
+ }
+
+ if (params->has_cpu_throttle_initial) {
+ dest->cpu_throttle_initial = params->cpu_throttle_initial;
+ }
+
+ if (params->has_cpu_throttle_increment) {
+ dest->cpu_throttle_increment = params->cpu_throttle_increment;
+ }
+
+ if (params->has_cpu_throttle_tailslow) {
+ dest->cpu_throttle_tailslow = params->cpu_throttle_tailslow;
+ }
+
+ if (params->tls_creds) {
+ assert(params->tls_creds->type == QTYPE_QSTRING);
+ dest->tls_creds = params->tls_creds->u.s;
+ }
+
+ if (params->tls_hostname) {
+ assert(params->tls_hostname->type == QTYPE_QSTRING);
+ dest->tls_hostname = params->tls_hostname->u.s;
+ }
+
+ if (params->has_max_bandwidth) {
+ dest->max_bandwidth = params->max_bandwidth;
+ }
+
+ if (params->has_downtime_limit) {
+ dest->downtime_limit = params->downtime_limit;
+ }
+
+ if (params->has_x_checkpoint_delay) {
+ dest->x_checkpoint_delay = params->x_checkpoint_delay;
+ }
+
+ if (params->has_block_incremental) {
+ dest->block_incremental = params->block_incremental;
+ }
+ if (params->has_multifd_channels) {
+ dest->multifd_channels = params->multifd_channels;
+ }
+ if (params->has_multifd_compression) {
+ dest->multifd_compression = params->multifd_compression;
+ }
+ if (params->has_xbzrle_cache_size) {
+ dest->xbzrle_cache_size = params->xbzrle_cache_size;
+ }
+ if (params->has_max_postcopy_bandwidth) {
+ dest->max_postcopy_bandwidth = params->max_postcopy_bandwidth;
+ }
+ if (params->has_max_cpu_throttle) {
+ dest->max_cpu_throttle = params->max_cpu_throttle;
+ }
+ if (params->has_announce_initial) {
+ dest->announce_initial = params->announce_initial;
+ }
+ if (params->has_announce_max) {
+ dest->announce_max = params->announce_max;
+ }
+ if (params->has_announce_rounds) {
+ dest->announce_rounds = params->announce_rounds;
+ }
+ if (params->has_announce_step) {
+ dest->announce_step = params->announce_step;
+ }
+
+ if (params->has_block_bitmap_mapping) {
+ dest->has_block_bitmap_mapping = true;
+ dest->block_bitmap_mapping = params->block_bitmap_mapping;
+ }
+}
+
+static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
+{
+ MigrationState *s = migrate_get_current();
+
+ /* TODO use QAPI_CLONE() instead of duplicating it inline */
+
+ if (params->has_compress_level) {
+ s->parameters.compress_level = params->compress_level;
+ }
+
+ if (params->has_compress_threads) {
+ s->parameters.compress_threads = params->compress_threads;
+ }
+
+ if (params->has_compress_wait_thread) {
+ s->parameters.compress_wait_thread = params->compress_wait_thread;
+ }
+
+ if (params->has_decompress_threads) {
+ s->parameters.decompress_threads = params->decompress_threads;
+ }
+
+ if (params->has_throttle_trigger_threshold) {
+ s->parameters.throttle_trigger_threshold = params->throttle_trigger_threshold;
+ }
+
+ if (params->has_cpu_throttle_initial) {
+ s->parameters.cpu_throttle_initial = params->cpu_throttle_initial;
+ }
+
+ if (params->has_cpu_throttle_increment) {
+ s->parameters.cpu_throttle_increment = params->cpu_throttle_increment;
+ }
+
+ if (params->has_cpu_throttle_tailslow) {
+ s->parameters.cpu_throttle_tailslow = params->cpu_throttle_tailslow;
+ }
+
+ if (params->tls_creds) {
+ g_free(s->parameters.tls_creds);
+ assert(params->tls_creds->type == QTYPE_QSTRING);
+ s->parameters.tls_creds = g_strdup(params->tls_creds->u.s);
+ }
+
+ if (params->tls_hostname) {
+ g_free(s->parameters.tls_hostname);
+ assert(params->tls_hostname->type == QTYPE_QSTRING);
+ s->parameters.tls_hostname = g_strdup(params->tls_hostname->u.s);
+ }
+
+ if (params->tls_authz) {
+ g_free(s->parameters.tls_authz);
+ assert(params->tls_authz->type == QTYPE_QSTRING);
+ s->parameters.tls_authz = g_strdup(params->tls_authz->u.s);
+ }
+
+ if (params->has_max_bandwidth) {
+ s->parameters.max_bandwidth = params->max_bandwidth;
+ if (s->to_dst_file && !migration_in_postcopy()) {
+ qemu_file_set_rate_limit(s->to_dst_file,
+ s->parameters.max_bandwidth / XFER_LIMIT_RATIO);
+ }
+ }
+
+ if (params->has_downtime_limit) {
+ s->parameters.downtime_limit = params->downtime_limit;
+ }
+
+ if (params->has_x_checkpoint_delay) {
+ s->parameters.x_checkpoint_delay = params->x_checkpoint_delay;
+ if (migration_in_colo_state()) {
+ colo_checkpoint_notify(s);
+ }
+ }
+
+ if (params->has_block_incremental) {
+ s->parameters.block_incremental = params->block_incremental;
+ }
+ if (params->has_multifd_channels) {
+ s->parameters.multifd_channels = params->multifd_channels;
+ }
+ if (params->has_multifd_compression) {
+ s->parameters.multifd_compression = params->multifd_compression;
+ }
+ if (params->has_xbzrle_cache_size) {
+ s->parameters.xbzrle_cache_size = params->xbzrle_cache_size;
+ xbzrle_cache_resize(params->xbzrle_cache_size, errp);
+ }
+ if (params->has_max_postcopy_bandwidth) {
+ s->parameters.max_postcopy_bandwidth = params->max_postcopy_bandwidth;
+ if (s->to_dst_file && migration_in_postcopy()) {
+ qemu_file_set_rate_limit(s->to_dst_file,
+ s->parameters.max_postcopy_bandwidth / XFER_LIMIT_RATIO);
+ }
+ }
+ if (params->has_max_cpu_throttle) {
+ s->parameters.max_cpu_throttle = params->max_cpu_throttle;
+ }
+ if (params->has_announce_initial) {
+ s->parameters.announce_initial = params->announce_initial;
+ }
+ if (params->has_announce_max) {
+ s->parameters.announce_max = params->announce_max;
+ }
+ if (params->has_announce_rounds) {
+ s->parameters.announce_rounds = params->announce_rounds;
+ }
+ if (params->has_announce_step) {
+ s->parameters.announce_step = params->announce_step;
+ }
+
+ if (params->has_block_bitmap_mapping) {
+ qapi_free_BitmapMigrationNodeAliasList(
+ s->parameters.block_bitmap_mapping);
+
+ s->parameters.has_block_bitmap_mapping = true;
+ s->parameters.block_bitmap_mapping =
+ QAPI_CLONE(BitmapMigrationNodeAliasList,
+ params->block_bitmap_mapping);
+ }
+}
+
+void qmp_migrate_set_parameters(MigrateSetParameters *params, Error **errp)
+{
+ MigrationParameters tmp;
+
+ /* TODO Rewrite "" to null instead */
+ if (params->tls_creds
+ && params->tls_creds->type == QTYPE_QNULL) {
+ qobject_unref(params->tls_creds->u.n);
+ params->tls_creds->type = QTYPE_QSTRING;
+ params->tls_creds->u.s = strdup("");
+ }
+ /* TODO Rewrite "" to null instead */
+ if (params->tls_hostname
+ && params->tls_hostname->type == QTYPE_QNULL) {
+ qobject_unref(params->tls_hostname->u.n);
+ params->tls_hostname->type = QTYPE_QSTRING;
+ params->tls_hostname->u.s = strdup("");
+ }
+
+ migrate_params_test_apply(params, &tmp);
+
+ if (!migrate_params_check(&tmp, errp)) {
+ /* Invalid parameter */
+ return;
+ }
+
+ migrate_params_apply(params, errp);
+}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 33/43] migration: Create migrate_params_init() function
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (31 preceding siblings ...)
2023-03-02 16:33 ` [PATCH 32/43] migration: Move qmp_migrate_set_parameters() " Juan Quintela
@ 2023-03-02 16:34 ` Juan Quintela
2023-03-02 16:34 ` [PATCH 34/43] migration: Make all functions check have the same format Juan Quintela
` (10 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:34 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/migration.c | 29 +----------------------------
migration/options.c | 31 +++++++++++++++++++++++++++++++
3 files changed, 33 insertions(+), 28 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 95338d1efd..c7c9a4002b 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -86,5 +86,6 @@ uint64_t migrate_xbzrle_cache_size(void);
/* parameters helpers */
bool migrate_params_check(MigrationParameters *params, Error **errp);
+void migrate_params_init(MigrationParameters *params);
#endif
diff --git a/migration/migration.c b/migration/migration.c
index 5d43e815ed..62a6f29647 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3455,7 +3455,6 @@ static void migration_instance_finalize(Object *obj)
static void migration_instance_init(Object *obj)
{
MigrationState *ms = MIGRATION_OBJ(obj);
- MigrationParameters *params = &ms->parameters;
ms->state = MIGRATION_STATUS_NONE;
ms->mbps = -1;
@@ -3463,33 +3462,7 @@ static void migration_instance_init(Object *obj)
qemu_sem_init(&ms->pause_sem, 0);
qemu_mutex_init(&ms->error_mutex);
- params->tls_hostname = g_strdup("");
- params->tls_creds = g_strdup("");
-
- /* Set has_* up only for parameter checks */
- params->has_compress_level = true;
- params->has_compress_threads = true;
- params->has_compress_wait_thread = true;
- params->has_decompress_threads = true;
- params->has_throttle_trigger_threshold = true;
- params->has_cpu_throttle_initial = true;
- params->has_cpu_throttle_increment = true;
- params->has_cpu_throttle_tailslow = true;
- params->has_max_bandwidth = true;
- params->has_downtime_limit = true;
- params->has_x_checkpoint_delay = true;
- params->has_block_incremental = true;
- params->has_multifd_channels = true;
- params->has_multifd_compression = true;
- params->has_multifd_zlib_level = true;
- params->has_multifd_zstd_level = true;
- params->has_xbzrle_cache_size = true;
- params->has_max_postcopy_bandwidth = true;
- params->has_max_cpu_throttle = true;
- params->has_announce_initial = true;
- params->has_announce_max = true;
- params->has_announce_rounds = true;
- params->has_announce_step = true;
+ migrate_params_init(&ms->parameters);
qemu_sem_init(&ms->postcopy_pause_sem, 0);
qemu_sem_init(&ms->postcopy_pause_rp_sem, 0);
diff --git a/migration/options.c b/migration/options.c
index efa9c6788d..15ee1aa922 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -742,6 +742,37 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
return params;
}
+void migrate_params_init(MigrationParameters *params)
+{
+ params->tls_hostname = g_strdup("");
+ params->tls_creds = g_strdup("");
+
+ /* Set has_* up only for parameter checks */
+ params->has_compress_level = true;
+ params->has_compress_threads = true;
+ params->has_compress_wait_thread = true;
+ params->has_decompress_threads = true;
+ params->has_throttle_trigger_threshold = true;
+ params->has_cpu_throttle_initial = true;
+ params->has_cpu_throttle_increment = true;
+ params->has_cpu_throttle_tailslow = true;
+ params->has_max_bandwidth = true;
+ params->has_downtime_limit = true;
+ params->has_x_checkpoint_delay = true;
+ params->has_block_incremental = true;
+ params->has_multifd_channels = true;
+ params->has_multifd_compression = true;
+ params->has_multifd_zlib_level = true;
+ params->has_multifd_zstd_level = true;
+ params->has_xbzrle_cache_size = true;
+ params->has_max_postcopy_bandwidth = true;
+ params->has_max_cpu_throttle = true;
+ params->has_announce_initial = true;
+ params->has_announce_max = true;
+ params->has_announce_rounds = true;
+ params->has_announce_step = true;
+}
+
/*
* Check whether the parameters are valid. Error will be put into errp
* (if provided). Return true if valid, otherwise false.
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 34/43] migration: Make all functions check have the same format
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (32 preceding siblings ...)
2023-03-02 16:34 ` [PATCH 33/43] migration: Create migrate_params_init() function Juan Quintela
@ 2023-03-02 16:34 ` Juan Quintela
2023-03-02 16:34 ` [PATCH 35/43] migration: Create migrate_downtime_limit() function Juan Quintela
` (9 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:34 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.c | 153 +++++++++++---------------------------------
1 file changed, 39 insertions(+), 114 deletions(-)
diff --git a/migration/options.c b/migration/options.c
index 15ee1aa922..350cd24e28 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -35,27 +35,21 @@
bool migrate_auto_converge(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
}
bool migrate_background_snapshot(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
}
bool migrate_block(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_BLOCK];
}
@@ -63,95 +57,76 @@ bool migrate_block(void)
bool migrate_colo(void)
{
MigrationState *s = migrate_get_current();
+
return s->capabilities[MIGRATION_CAPABILITY_X_COLO];
}
bool migrate_compress(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_COMPRESS];
}
bool migrate_dirty_bitmaps(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
}
bool migrate_events(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_EVENTS];
}
bool migrate_ignore_shared(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED];
}
bool migrate_late_block_activate(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
}
bool migrate_multifd(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_MULTIFD];
}
bool migrate_pause_before_switchover(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER];
}
bool migrate_postcopy_blocktime(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME];
}
bool migrate_postcopy_preempt(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT];
}
bool migrate_postcopy_ram(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
}
@@ -165,54 +140,42 @@ bool migrate_rdma_pin_all(void)
bool migrate_release_ram(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
}
bool migrate_return_path(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_RETURN_PATH];
}
bool migrate_validate_uuid(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
}
bool migrate_xbzrle(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_XBZRLE];
}
bool migrate_zero_blocks(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
}
bool migrate_zero_copy_send(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
}
@@ -226,9 +189,7 @@ bool migrate_postcopy(void)
bool migrate_tls(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.tls_creds && *s->parameters.tls_creds;
}
@@ -497,126 +458,98 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
bool migrate_block_incremental(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.block_incremental;
}
uint32_t migrate_checkpoint_delay(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.x_checkpoint_delay;
}
int migrate_compress_level(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.compress_level;
}
int migrate_compress_threads(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.compress_threads;
}
int migrate_compress_wait_thread(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.compress_wait_thread;
}
uint8_t migrate_cpu_throttle_increment(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.cpu_throttle_increment;
}
uint8_t migrate_cpu_throttle_initial(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.cpu_throttle_initial;
}
bool migrate_cpu_throttle_tailslow(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.cpu_throttle_tailslow;
}
int migrate_decompress_threads(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.decompress_threads;
}
uint8_t migrate_max_cpu_throttle(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.max_cpu_throttle;
}
uint64_t migrate_max_bandwidth(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.max_bandwidth;
}
int64_t migrate_max_postcopy_bandwidth(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.max_postcopy_bandwidth;
}
int migrate_multifd_channels(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.multifd_channels;
}
MultiFDCompression migrate_multifd_compression(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
assert(s->parameters.multifd_compression < MULTIFD_COMPRESSION__MAX);
return s->parameters.multifd_compression;
@@ -624,36 +557,28 @@ MultiFDCompression migrate_multifd_compression(void)
int migrate_multifd_zlib_level(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.multifd_zlib_level;
}
int migrate_multifd_zstd_level(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.multifd_zstd_level;
}
uint8_t migrate_throttle_trigger_threshold(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.throttle_trigger_threshold;
}
uint64_t migrate_xbzrle_cache_size(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.xbzrle_cache_size;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 35/43] migration: Create migrate_downtime_limit() function
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (33 preceding siblings ...)
2023-03-02 16:34 ` [PATCH 34/43] migration: Make all functions check have the same format Juan Quintela
@ 2023-03-02 16:34 ` Juan Quintela
2023-03-02 16:34 ` [PATCH 36/43] migration: Move migrate_set_block_incremental() to options.c Juan Quintela
` (8 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:34 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/migration.c | 4 ++--
migration/options.c | 7 +++++++
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index c7c9a4002b..10a59b1172 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -73,6 +73,7 @@ uint8_t migrate_cpu_throttle_increment(void);
uint8_t migrate_cpu_throttle_initial(void);
bool migrate_cpu_throttle_tailslow(void);
int migrate_decompress_threads(void);
+uint64_t migrate_downtime_limit(void);
uint8_t migrate_max_cpu_throttle(void);
uint64_t migrate_max_bandwidth(void);
int64_t migrate_max_postcopy_bandwidth(void);
diff --git a/migration/migration.c b/migration/migration.c
index 62a6f29647..9db8e09462 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2733,7 +2733,7 @@ static void migration_update_counters(MigrationState *s,
transferred = current_bytes - s->iteration_initial_bytes;
time_spent = current_time - s->iteration_start_time;
bandwidth = (double)transferred / time_spent;
- s->threshold_size = bandwidth * s->parameters.downtime_limit;
+ s->threshold_size = bandwidth * migrate_downtime_limit();
s->mbps = (((double) transferred * 8.0) /
((double) time_spent / 1000.0)) / 1000.0 / 1000.0;
@@ -3240,7 +3240,7 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
*/
migrate_error_free(s);
- s->expected_downtime = s->parameters.downtime_limit;
+ s->expected_downtime = migrate_downtime_limit();
if (resume) {
assert(s->cleanup_bh);
} else {
diff --git a/migration/options.c b/migration/options.c
index 350cd24e28..6034443cee 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -519,6 +519,13 @@ int migrate_decompress_threads(void)
return s->parameters.decompress_threads;
}
+uint64_t migrate_downtime_limit(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->parameters.downtime_limit;
+}
+
uint8_t migrate_max_cpu_throttle(void)
{
MigrationState *s = migrate_get_current();
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 36/43] migration: Move migrate_set_block_incremental() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (34 preceding siblings ...)
2023-03-02 16:34 ` [PATCH 35/43] migration: Create migrate_downtime_limit() function Juan Quintela
@ 2023-03-02 16:34 ` Juan Quintela
2023-03-02 16:34 ` [PATCH 37/43] migration: Move block_cleanup_parameters() " Juan Quintela
` (7 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:34 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Once there, make it more regular and remove th eneed for
MigrationState parameter.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 4 ++++
migration/migration.c | 9 ++-------
migration/options.c | 9 +++++++++
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 10a59b1172..0fbe294a65 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -84,6 +84,10 @@ int migrate_multifd_zstd_level(void);
uint8_t migrate_throttle_trigger_threshold(void);
uint64_t migrate_xbzrle_cache_size(void);
+/* parameters setters */
+
+void migrate_set_block_incremental(bool value);
+
/* parameters helpers */
bool migrate_params_check(MigrationParameters *params, Error **errp);
diff --git a/migration/migration.c b/migration/migration.c
index 9db8e09462..f293fb1fd6 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1162,17 +1162,12 @@ void migrate_set_state(int *state, int old_state, int new_state)
}
}
-static void migrate_set_block_incremental(MigrationState *s, bool value)
-{
- s->parameters.block_incremental = value;
-}
-
static void block_cleanup_parameters(MigrationState *s)
{
if (s->must_remove_block_options) {
/* setting to false can never fail */
migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, false, &error_abort);
- migrate_set_block_incremental(s, false);
+ migrate_set_block_incremental(false);
s->must_remove_block_options = false;
}
}
@@ -1666,7 +1661,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc,
}
if (blk_inc) {
- migrate_set_block_incremental(s, true);
+ migrate_set_block_incremental(true);
}
migrate_init(s);
diff --git a/migration/options.c b/migration/options.c
index 6034443cee..7838515991 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -590,6 +590,15 @@ uint64_t migrate_xbzrle_cache_size(void)
return s->parameters.xbzrle_cache_size;
}
+/* parameter setters */
+
+void migrate_set_block_incremental(bool value)
+{
+ MigrationState *s = migrate_get_current();
+
+ s->parameters.block_incremental = value;
+}
+
/* parameters helpers */
AnnounceParameters *migrate_announce_params(void)
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 37/43] migration: Move block_cleanup_parameters() to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (35 preceding siblings ...)
2023-03-02 16:34 ` [PATCH 36/43] migration: Move migrate_set_block_incremental() to options.c Juan Quintela
@ 2023-03-02 16:34 ` Juan Quintela
2023-03-02 16:34 ` [PATCH 38/43] migration: Remove MigrationState from block_cleanup_parameters() Juan Quintela
` (6 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:34 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/migration.c | 10 ----------
migration/options.c | 10 ++++++++++
3 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 0fbe294a65..bd1945d3d1 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -92,5 +92,6 @@ void migrate_set_block_incremental(bool value);
bool migrate_params_check(MigrationParameters *params, Error **errp);
void migrate_params_init(MigrationParameters *params);
+void block_cleanup_parameters(MigrationState *s);
#endif
diff --git a/migration/migration.c b/migration/migration.c
index f293fb1fd6..5dc0bc86f1 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1162,16 +1162,6 @@ void migrate_set_state(int *state, int old_state, int new_state)
}
}
-static void block_cleanup_parameters(MigrationState *s)
-{
- if (s->must_remove_block_options) {
- /* setting to false can never fail */
- migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, false, &error_abort);
- migrate_set_block_incremental(false);
- s->must_remove_block_options = false;
- }
-}
-
static void migrate_fd_cleanup(MigrationState *s)
{
qemu_bh_delete(s->cleanup_bh);
diff --git a/migration/options.c b/migration/options.c
index 7838515991..f7d46ccfc9 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -601,6 +601,16 @@ void migrate_set_block_incremental(bool value)
/* parameters helpers */
+void block_cleanup_parameters(MigrationState *s)
+{
+ if (s->must_remove_block_options) {
+ /* setting to false can never fail */
+ migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, false, &error_abort);
+ migrate_set_block_incremental(false);
+ s->must_remove_block_options = false;
+ }
+}
+
AnnounceParameters *migrate_announce_params(void)
{
static AnnounceParameters ap;
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 38/43] migration: Remove MigrationState from block_cleanup_parameters()
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (36 preceding siblings ...)
2023-03-02 16:34 ` [PATCH 37/43] migration: Move block_cleanup_parameters() " Juan Quintela
@ 2023-03-02 16:34 ` Juan Quintela
2023-03-02 16:34 ` [PATCH 39/43] migration: Create migrate_tls_creds() function Juan Quintela
` (5 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:34 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
This makes the function more regular with everything else.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 2 +-
migration/migration.c | 4 ++--
migration/options.c | 4 +++-
3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index bd1945d3d1..1d63c4069c 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -92,6 +92,6 @@ void migrate_set_block_incremental(bool value);
bool migrate_params_check(MigrationParameters *params, Error **errp);
void migrate_params_init(MigrationParameters *params);
-void block_cleanup_parameters(MigrationState *s);
+void block_cleanup_parameters(void);
#endif
diff --git a/migration/migration.c b/migration/migration.c
index 5dc0bc86f1..71fc360240 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1216,7 +1216,7 @@ static void migrate_fd_cleanup(MigrationState *s)
error_report_err(error_copy(s->error));
}
notifier_list_notify(&migration_state_notifiers, s);
- block_cleanup_parameters(s);
+ block_cleanup_parameters();
yank_unregister_instance(MIGRATION_YANK_INSTANCE);
}
@@ -1710,7 +1710,7 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
"a valid migration protocol");
migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
MIGRATION_STATUS_FAILED);
- block_cleanup_parameters(s);
+ block_cleanup_parameters();
return;
}
diff --git a/migration/options.c b/migration/options.c
index f7d46ccfc9..79187c3be0 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -601,8 +601,10 @@ void migrate_set_block_incremental(bool value)
/* parameters helpers */
-void block_cleanup_parameters(MigrationState *s)
+void block_cleanup_parameters(void)
{
+ MigrationState *s = migrate_get_current();
+
if (s->must_remove_block_options) {
/* setting to false can never fail */
migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, false, &error_abort);
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 39/43] migration: Create migrate_tls_creds() function
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (37 preceding siblings ...)
2023-03-02 16:34 ` [PATCH 38/43] migration: Remove MigrationState from block_cleanup_parameters() Juan Quintela
@ 2023-03-02 16:34 ` Juan Quintela
2023-03-02 16:34 ` [PATCH 40/43] migration: Create migrate_tls_authz() function Juan Quintela
` (4 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:34 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/options.c | 7 +++++++
migration/tls.c | 9 ++++-----
3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 1d63c4069c..78cb936aba 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -82,6 +82,7 @@ MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
int migrate_multifd_zstd_level(void);
uint8_t migrate_throttle_trigger_threshold(void);
+char *migrate_tls_creds(void);
uint64_t migrate_xbzrle_cache_size(void);
/* parameters setters */
diff --git a/migration/options.c b/migration/options.c
index 79187c3be0..41bb2d2959 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -583,6 +583,13 @@ uint8_t migrate_throttle_trigger_threshold(void)
return s->parameters.throttle_trigger_threshold;
}
+char *migrate_tls_creds(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->parameters.tls_creds;
+}
+
uint64_t migrate_xbzrle_cache_size(void)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/tls.c b/migration/tls.c
index acd38e0b62..0d318516de 100644
--- a/migration/tls.c
+++ b/migration/tls.c
@@ -34,20 +34,19 @@ migration_tls_get_creds(MigrationState *s,
Error **errp)
{
Object *creds;
+ char *tls_creds = migrate_tls_creds();
QCryptoTLSCreds *ret;
- creds = object_resolve_path_component(
- object_get_objects_root(), s->parameters.tls_creds);
+ creds = object_resolve_path_component(object_get_objects_root(), tls_creds);
if (!creds) {
- error_setg(errp, "No TLS credentials with id '%s'",
- s->parameters.tls_creds);
+ error_setg(errp, "No TLS credentials with id '%s'", tls_creds);
return NULL;
}
ret = (QCryptoTLSCreds *)object_dynamic_cast(
creds, TYPE_QCRYPTO_TLS_CREDS);
if (!ret) {
error_setg(errp, "Object with id '%s' is not TLS credentials",
- s->parameters.tls_creds);
+ tls_creds);
return NULL;
}
if (!qcrypto_tls_creds_check_endpoint(ret, endpoint, errp)) {
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 40/43] migration: Create migrate_tls_authz() function
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (38 preceding siblings ...)
2023-03-02 16:34 ` [PATCH 39/43] migration: Create migrate_tls_creds() function Juan Quintela
@ 2023-03-02 16:34 ` Juan Quintela
2023-03-02 16:34 ` [PATCH 41/43] migration: Create migrate_tls_hostname() function Juan Quintela
` (3 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:34 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/options.c | 7 +++++++
migration/tls.c | 5 +----
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 78cb936aba..31d50cadd0 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -82,6 +82,7 @@ MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
int migrate_multifd_zstd_level(void);
uint8_t migrate_throttle_trigger_threshold(void);
+char *migrate_tls_authz(void);
char *migrate_tls_creds(void);
uint64_t migrate_xbzrle_cache_size(void);
diff --git a/migration/options.c b/migration/options.c
index 41bb2d2959..42ad3e941d 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -583,6 +583,13 @@ uint8_t migrate_throttle_trigger_threshold(void)
return s->parameters.throttle_trigger_threshold;
}
+char *migrate_tls_authz(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->parameters.tls_authz;
+}
+
char *migrate_tls_creds(void)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/tls.c b/migration/tls.c
index 0d318516de..4c229326fd 100644
--- a/migration/tls.c
+++ b/migration/tls.c
@@ -86,10 +86,7 @@ void migration_tls_channel_process_incoming(MigrationState *s,
return;
}
- tioc = qio_channel_tls_new_server(
- ioc, creds,
- s->parameters.tls_authz,
- errp);
+ tioc = qio_channel_tls_new_server(ioc, creds, migrate_tls_authz(), errp);
if (!tioc) {
return;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 41/43] migration: Create migrate_tls_hostname() function
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (39 preceding siblings ...)
2023-03-02 16:34 ` [PATCH 40/43] migration: Create migrate_tls_authz() function Juan Quintela
@ 2023-03-02 16:34 ` Juan Quintela
2023-03-02 16:34 ` [PATCH 42/43] migration: Create migrate_block_bitmap_mapping() function Juan Quintela
` (2 subsequent siblings)
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:34 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/options.c | 7 +++++++
migration/tls.c | 6 ++++--
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 31d50cadd0..3284f95312 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -84,6 +84,7 @@ int migrate_multifd_zstd_level(void);
uint8_t migrate_throttle_trigger_threshold(void);
char *migrate_tls_authz(void);
char *migrate_tls_creds(void);
+char *migrate_tls_hostname(void);
uint64_t migrate_xbzrle_cache_size(void);
/* parameters setters */
diff --git a/migration/options.c b/migration/options.c
index 42ad3e941d..96d20a9cfc 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -597,6 +597,13 @@ char *migrate_tls_creds(void)
return s->parameters.tls_creds;
}
+char *migrate_tls_hostname(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->parameters.tls_hostname;
+}
+
uint64_t migrate_xbzrle_cache_size(void)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/tls.c b/migration/tls.c
index 4c229326fd..3cae1a06e7 100644
--- a/migration/tls.c
+++ b/migration/tls.c
@@ -123,6 +123,7 @@ QIOChannelTLS *migration_tls_client_create(MigrationState *s,
Error **errp)
{
QCryptoTLSCreds *creds;
+ char *tls_hostname;
creds = migration_tls_get_creds(
s, QCRYPTO_TLS_CREDS_ENDPOINT_CLIENT, errp);
@@ -130,8 +131,9 @@ QIOChannelTLS *migration_tls_client_create(MigrationState *s,
return NULL;
}
- if (s->parameters.tls_hostname && *s->parameters.tls_hostname) {
- hostname = s->parameters.tls_hostname;
+ tls_hostname = migrate_tls_hostname();
+ if (tls_hostname && *tls_hostname) {
+ hostname = tls_hostname;
}
return qio_channel_tls_new_client(ioc, creds, hostname, errp);
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 42/43] migration: Create migrate_block_bitmap_mapping() function
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (40 preceding siblings ...)
2023-03-02 16:34 ` [PATCH 41/43] migration: Create migrate_tls_hostname() function Juan Quintela
@ 2023-03-02 16:34 ` Juan Quintela
2023-03-02 16:34 ` [PATCH 43/43] migration: Move migration_properties to options.c Juan Quintela
2023-03-06 14:29 ` [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Vladimir Sementsov-Ogievskiy
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:34 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Notice that we changed the test of ->has_block_bitmap_mapping
for the test that block_bitmap_mapping is not NULL.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 1 +
migration/block-dirty-bitmap.c | 14 ++++++++------
migration/options.c | 7 +++++++
3 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 3284f95312..698514cf76 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -64,6 +64,7 @@ bool migrate_cap_set(int cap, bool value, Error **errp);
/* parameters */
+BitmapMigrationNodeAliasList *migrate_block_bitmap_mapping(void);
bool migrate_block_incremental(void);
uint32_t migrate_checkpoint_delay(void);
int migrate_compress_level(void);
diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
index a6ffae0002..62b2352bbb 100644
--- a/migration/block-dirty-bitmap.c
+++ b/migration/block-dirty-bitmap.c
@@ -605,11 +605,12 @@ static int init_dirty_bitmap_migration(DBMSaveState *s)
SaveBitmapState *dbms;
GHashTable *handled_by_blk = g_hash_table_new(NULL, NULL);
BlockBackend *blk;
- const MigrationParameters *mig_params = &migrate_get_current()->parameters;
GHashTable *alias_map = NULL;
+ BitmapMigrationNodeAliasList *block_bitmap_mapping =
+ migrate_block_bitmap_mapping();
- if (mig_params->has_block_bitmap_mapping) {
- alias_map = construct_alias_map(mig_params->block_bitmap_mapping, true,
+ if (block_bitmap_mapping) {
+ alias_map = construct_alias_map(block_bitmap_mapping, true,
&error_abort);
}
@@ -1158,7 +1159,8 @@ static int dirty_bitmap_load_header(QEMUFile *f, DBMLoadState *s,
static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id)
{
GHashTable *alias_map = NULL;
- const MigrationParameters *mig_params = &migrate_get_current()->parameters;
+ BitmapMigrationNodeAliasList *block_bitmap_mapping =
+ migrate_block_bitmap_mapping();
DBMLoadState *s = &((DBMState *)opaque)->load;
int ret = 0;
@@ -1170,8 +1172,8 @@ static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id)
return -EINVAL;
}
- if (mig_params->has_block_bitmap_mapping) {
- alias_map = construct_alias_map(mig_params->block_bitmap_mapping,
+ if (block_bitmap_mapping) {
+ alias_map = construct_alias_map(block_bitmap_mapping,
false, &error_abort);
}
diff --git a/migration/options.c b/migration/options.c
index 96d20a9cfc..e7f66cfc26 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -456,6 +456,13 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
/* parameters */
+BitmapMigrationNodeAliasList *migrate_block_bitmap_mapping(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->parameters.block_bitmap_mapping;
+}
+
bool migrate_block_incremental(void)
{
MigrationState *s = migrate_get_current();
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 43/43] migration: Move migration_properties to options.c
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (41 preceding siblings ...)
2023-03-02 16:34 ` [PATCH 42/43] migration: Create migrate_block_bitmap_mapping() function Juan Quintela
@ 2023-03-02 16:34 ` Juan Quintela
2023-03-06 14:29 ` [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Vladimir Sementsov-Ogievskiy
43 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-03-02 16:34 UTC (permalink / raw)
To: qemu-devel
Cc: David Hildenbrand, Vladimir Sementsov-Ogievskiy, John Snow,
Stefan Hajnoczi, Juan Quintela, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Dr. David Alan Gilbert,
Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.h | 7 ++
migration/migration.c | 155 ------------------------------------------
migration/options.c | 153 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 160 insertions(+), 155 deletions(-)
diff --git a/migration/options.h b/migration/options.h
index 698514cf76..f5ce35c018 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -16,6 +16,9 @@
#ifndef QEMU_MIGRATION_OPTIONS_H
#define QEMU_MIGRATION_OPTIONS_H
+#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
+
/* constants */
/* Amount of time to allocate to each "chunk" of bandwidth-throttled
@@ -23,6 +26,10 @@
#define BUFFER_DELAY 100
#define XFER_LIMIT_RATIO (1000 / BUFFER_DELAY)
+/* migration properties */
+
+extern Property migration_properties[];
+
/* capabilities */
bool migrate_auto_converge(void);
diff --git a/migration/migration.c b/migration/migration.c
index 71fc360240..d94811a152 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -52,8 +52,6 @@
#include "io/channel-tls.h"
#include "migration/colo.h"
#include "hw/boards.h"
-#include "hw/qdev-properties.h"
-#include "hw/qdev-properties-system.h"
#include "monitor/monitor.h"
#include "net/announce.h"
#include "qemu/queue.h"
@@ -65,51 +63,6 @@
#include "sysemu/qtest.h"
#include "options.h"
-#define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttling */
-
-/* Time in milliseconds we are allowed to stop the source,
- * for sending the last part */
-#define DEFAULT_MIGRATE_SET_DOWNTIME 300
-
-/* Default compression thread count */
-#define DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT 8
-/* Default decompression thread count, usually decompression is at
- * least 4 times as fast as compression.*/
-#define DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT 2
-/*0: means nocompress, 1: best speed, ... 9: best compress ratio */
-#define DEFAULT_MIGRATE_COMPRESS_LEVEL 1
-/* Define default autoconverge cpu throttle migration parameters */
-#define DEFAULT_MIGRATE_THROTTLE_TRIGGER_THRESHOLD 50
-#define DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL 20
-#define DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT 10
-#define DEFAULT_MIGRATE_MAX_CPU_THROTTLE 99
-
-/* Migration XBZRLE default cache size */
-#define DEFAULT_MIGRATE_XBZRLE_CACHE_SIZE (64 * 1024 * 1024)
-
-/* The delay time (in ms) between two COLO checkpoints */
-#define DEFAULT_MIGRATE_X_CHECKPOINT_DELAY (200 * 100)
-#define DEFAULT_MIGRATE_MULTIFD_CHANNELS 2
-#define DEFAULT_MIGRATE_MULTIFD_COMPRESSION MULTIFD_COMPRESSION_NONE
-/* 0: means nocompress, 1: best speed, ... 9: best compress ratio */
-#define DEFAULT_MIGRATE_MULTIFD_ZLIB_LEVEL 1
-/* 0: means nocompress, 1: best speed, ... 20: best compress ratio */
-#define DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL 1
-
-/* Background transfer rate for postcopy, 0 means unlimited, note
- * that page requests can still exceed this limit.
- */
-#define DEFAULT_MIGRATE_MAX_POSTCOPY_BANDWIDTH 0
-
-/*
- * Parameters for self_announce_delay giving a stream of RARP/ARP
- * packets after migration.
- */
-#define DEFAULT_MIGRATE_ANNOUNCE_INITIAL 50
-#define DEFAULT_MIGRATE_ANNOUNCE_MAX 550
-#define DEFAULT_MIGRATE_ANNOUNCE_ROUNDS 5
-#define DEFAULT_MIGRATE_ANNOUNCE_STEP 100
-
static NotifierList migration_state_notifiers =
NOTIFIER_LIST_INITIALIZER(migration_state_notifiers);
@@ -3304,114 +3257,6 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
s->migration_thread_running = true;
}
-#define DEFINE_PROP_MIG_CAP(name, x) \
- DEFINE_PROP_BOOL(name, MigrationState, capabilities[x], false)
-
-static Property migration_properties[] = {
- DEFINE_PROP_BOOL("store-global-state", MigrationState,
- store_global_state, true),
- DEFINE_PROP_BOOL("send-configuration", MigrationState,
- send_configuration, true),
- DEFINE_PROP_BOOL("send-section-footer", MigrationState,
- send_section_footer, true),
- DEFINE_PROP_BOOL("decompress-error-check", MigrationState,
- decompress_error_check, true),
- DEFINE_PROP_UINT8("x-clear-bitmap-shift", MigrationState,
- clear_bitmap_shift, CLEAR_BITMAP_SHIFT_DEFAULT),
-
- /* Migration parameters */
- DEFINE_PROP_UINT8("x-compress-level", MigrationState,
- parameters.compress_level,
- DEFAULT_MIGRATE_COMPRESS_LEVEL),
- DEFINE_PROP_UINT8("x-compress-threads", MigrationState,
- parameters.compress_threads,
- DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT),
- DEFINE_PROP_BOOL("x-compress-wait-thread", MigrationState,
- parameters.compress_wait_thread, true),
- DEFINE_PROP_UINT8("x-decompress-threads", MigrationState,
- parameters.decompress_threads,
- DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT),
- DEFINE_PROP_UINT8("x-throttle-trigger-threshold", MigrationState,
- parameters.throttle_trigger_threshold,
- DEFAULT_MIGRATE_THROTTLE_TRIGGER_THRESHOLD),
- DEFINE_PROP_UINT8("x-cpu-throttle-initial", MigrationState,
- parameters.cpu_throttle_initial,
- DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL),
- DEFINE_PROP_UINT8("x-cpu-throttle-increment", MigrationState,
- parameters.cpu_throttle_increment,
- DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT),
- DEFINE_PROP_BOOL("x-cpu-throttle-tailslow", MigrationState,
- parameters.cpu_throttle_tailslow, false),
- DEFINE_PROP_SIZE("x-max-bandwidth", MigrationState,
- parameters.max_bandwidth, MAX_THROTTLE),
- DEFINE_PROP_UINT64("x-downtime-limit", MigrationState,
- parameters.downtime_limit,
- DEFAULT_MIGRATE_SET_DOWNTIME),
- DEFINE_PROP_UINT32("x-checkpoint-delay", MigrationState,
- parameters.x_checkpoint_delay,
- DEFAULT_MIGRATE_X_CHECKPOINT_DELAY),
- DEFINE_PROP_UINT8("multifd-channels", MigrationState,
- parameters.multifd_channels,
- DEFAULT_MIGRATE_MULTIFD_CHANNELS),
- DEFINE_PROP_MULTIFD_COMPRESSION("multifd-compression", MigrationState,
- parameters.multifd_compression,
- DEFAULT_MIGRATE_MULTIFD_COMPRESSION),
- DEFINE_PROP_UINT8("multifd-zlib-level", MigrationState,
- parameters.multifd_zlib_level,
- DEFAULT_MIGRATE_MULTIFD_ZLIB_LEVEL),
- DEFINE_PROP_UINT8("multifd-zstd-level", MigrationState,
- parameters.multifd_zstd_level,
- DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL),
- DEFINE_PROP_SIZE("xbzrle-cache-size", MigrationState,
- parameters.xbzrle_cache_size,
- DEFAULT_MIGRATE_XBZRLE_CACHE_SIZE),
- DEFINE_PROP_SIZE("max-postcopy-bandwidth", MigrationState,
- parameters.max_postcopy_bandwidth,
- DEFAULT_MIGRATE_MAX_POSTCOPY_BANDWIDTH),
- DEFINE_PROP_UINT8("max-cpu-throttle", MigrationState,
- parameters.max_cpu_throttle,
- DEFAULT_MIGRATE_MAX_CPU_THROTTLE),
- DEFINE_PROP_SIZE("announce-initial", MigrationState,
- parameters.announce_initial,
- DEFAULT_MIGRATE_ANNOUNCE_INITIAL),
- DEFINE_PROP_SIZE("announce-max", MigrationState,
- parameters.announce_max,
- DEFAULT_MIGRATE_ANNOUNCE_MAX),
- DEFINE_PROP_SIZE("announce-rounds", MigrationState,
- parameters.announce_rounds,
- DEFAULT_MIGRATE_ANNOUNCE_ROUNDS),
- DEFINE_PROP_SIZE("announce-step", MigrationState,
- parameters.announce_step,
- DEFAULT_MIGRATE_ANNOUNCE_STEP),
- DEFINE_PROP_STRING("tls-creds", MigrationState, parameters.tls_creds),
- DEFINE_PROP_STRING("tls-hostname", MigrationState, parameters.tls_hostname),
- DEFINE_PROP_STRING("tls-authz", MigrationState, parameters.tls_authz),
-
- /* Migration capabilities */
- DEFINE_PROP_MIG_CAP("x-xbzrle", MIGRATION_CAPABILITY_XBZRLE),
- DEFINE_PROP_MIG_CAP("x-rdma-pin-all", MIGRATION_CAPABILITY_RDMA_PIN_ALL),
- DEFINE_PROP_MIG_CAP("x-auto-converge", MIGRATION_CAPABILITY_AUTO_CONVERGE),
- DEFINE_PROP_MIG_CAP("x-zero-blocks", MIGRATION_CAPABILITY_ZERO_BLOCKS),
- DEFINE_PROP_MIG_CAP("x-compress", MIGRATION_CAPABILITY_COMPRESS),
- DEFINE_PROP_MIG_CAP("x-events", MIGRATION_CAPABILITY_EVENTS),
- DEFINE_PROP_MIG_CAP("x-postcopy-ram", MIGRATION_CAPABILITY_POSTCOPY_RAM),
- DEFINE_PROP_MIG_CAP("x-postcopy-preempt",
- MIGRATION_CAPABILITY_POSTCOPY_PREEMPT),
- DEFINE_PROP_MIG_CAP("x-colo", MIGRATION_CAPABILITY_X_COLO),
- DEFINE_PROP_MIG_CAP("x-release-ram", MIGRATION_CAPABILITY_RELEASE_RAM),
- DEFINE_PROP_MIG_CAP("x-block", MIGRATION_CAPABILITY_BLOCK),
- DEFINE_PROP_MIG_CAP("x-return-path", MIGRATION_CAPABILITY_RETURN_PATH),
- DEFINE_PROP_MIG_CAP("x-multifd", MIGRATION_CAPABILITY_MULTIFD),
- DEFINE_PROP_MIG_CAP("x-background-snapshot",
- MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT),
-#ifdef CONFIG_LINUX
- DEFINE_PROP_MIG_CAP("x-zero-copy-send",
- MIGRATION_CAPABILITY_ZERO_COPY_SEND),
-#endif
-
- DEFINE_PROP_END_OF_LIST(),
-};
-
static void migration_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
diff --git a/migration/options.c b/migration/options.c
index e7f66cfc26..ca4771cf1d 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -33,6 +33,159 @@
#define MAX_MIGRATE_DOWNTIME_SECONDS 2000
#define MAX_MIGRATE_DOWNTIME (MAX_MIGRATE_DOWNTIME_SECONDS * 1000)
+#define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttling */
+
+/* Time in milliseconds we are allowed to stop the source,
+ * for sending the last part */
+#define DEFAULT_MIGRATE_SET_DOWNTIME 300
+
+/* Default compression thread count */
+#define DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT 8
+/* Default decompression thread count, usually decompression is at
+ * least 4 times as fast as compression.*/
+#define DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT 2
+/*0: means nocompress, 1: best speed, ... 9: best compress ratio */
+#define DEFAULT_MIGRATE_COMPRESS_LEVEL 1
+/* Define default autoconverge cpu throttle migration parameters */
+#define DEFAULT_MIGRATE_THROTTLE_TRIGGER_THRESHOLD 50
+#define DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL 20
+#define DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT 10
+#define DEFAULT_MIGRATE_MAX_CPU_THROTTLE 99
+
+/* Migration XBZRLE default cache size */
+#define DEFAULT_MIGRATE_XBZRLE_CACHE_SIZE (64 * 1024 * 1024)
+
+/* The delay time (in ms) between two COLO checkpoints */
+#define DEFAULT_MIGRATE_X_CHECKPOINT_DELAY (200 * 100)
+#define DEFAULT_MIGRATE_MULTIFD_CHANNELS 2
+#define DEFAULT_MIGRATE_MULTIFD_COMPRESSION MULTIFD_COMPRESSION_NONE
+/* 0: means nocompress, 1: best speed, ... 9: best compress ratio */
+#define DEFAULT_MIGRATE_MULTIFD_ZLIB_LEVEL 1
+/* 0: means nocompress, 1: best speed, ... 20: best compress ratio */
+#define DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL 1
+
+/* Background transfer rate for postcopy, 0 means unlimited, note
+ * that page requests can still exceed this limit.
+ */
+#define DEFAULT_MIGRATE_MAX_POSTCOPY_BANDWIDTH 0
+
+/*
+ * Parameters for self_announce_delay giving a stream of RARP/ARP
+ * packets after migration.
+ */
+#define DEFAULT_MIGRATE_ANNOUNCE_INITIAL 50
+#define DEFAULT_MIGRATE_ANNOUNCE_MAX 550
+#define DEFAULT_MIGRATE_ANNOUNCE_ROUNDS 5
+#define DEFAULT_MIGRATE_ANNOUNCE_STEP 100
+
+#define DEFINE_PROP_MIG_CAP(name, x) \
+ DEFINE_PROP_BOOL(name, MigrationState, capabilities[x], false)
+
+Property migration_properties[] = {
+ DEFINE_PROP_BOOL("store-global-state", MigrationState,
+ store_global_state, true),
+ DEFINE_PROP_BOOL("send-configuration", MigrationState,
+ send_configuration, true),
+ DEFINE_PROP_BOOL("send-section-footer", MigrationState,
+ send_section_footer, true),
+ DEFINE_PROP_BOOL("decompress-error-check", MigrationState,
+ decompress_error_check, true),
+ DEFINE_PROP_UINT8("x-clear-bitmap-shift", MigrationState,
+ clear_bitmap_shift, CLEAR_BITMAP_SHIFT_DEFAULT),
+
+ /* Migration parameters */
+ DEFINE_PROP_UINT8("x-compress-level", MigrationState,
+ parameters.compress_level,
+ DEFAULT_MIGRATE_COMPRESS_LEVEL),
+ DEFINE_PROP_UINT8("x-compress-threads", MigrationState,
+ parameters.compress_threads,
+ DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT),
+ DEFINE_PROP_BOOL("x-compress-wait-thread", MigrationState,
+ parameters.compress_wait_thread, true),
+ DEFINE_PROP_UINT8("x-decompress-threads", MigrationState,
+ parameters.decompress_threads,
+ DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT),
+ DEFINE_PROP_UINT8("x-throttle-trigger-threshold", MigrationState,
+ parameters.throttle_trigger_threshold,
+ DEFAULT_MIGRATE_THROTTLE_TRIGGER_THRESHOLD),
+ DEFINE_PROP_UINT8("x-cpu-throttle-initial", MigrationState,
+ parameters.cpu_throttle_initial,
+ DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL),
+ DEFINE_PROP_UINT8("x-cpu-throttle-increment", MigrationState,
+ parameters.cpu_throttle_increment,
+ DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT),
+ DEFINE_PROP_BOOL("x-cpu-throttle-tailslow", MigrationState,
+ parameters.cpu_throttle_tailslow, false),
+ DEFINE_PROP_SIZE("x-max-bandwidth", MigrationState,
+ parameters.max_bandwidth, MAX_THROTTLE),
+ DEFINE_PROP_UINT64("x-downtime-limit", MigrationState,
+ parameters.downtime_limit,
+ DEFAULT_MIGRATE_SET_DOWNTIME),
+ DEFINE_PROP_UINT32("x-checkpoint-delay", MigrationState,
+ parameters.x_checkpoint_delay,
+ DEFAULT_MIGRATE_X_CHECKPOINT_DELAY),
+ DEFINE_PROP_UINT8("multifd-channels", MigrationState,
+ parameters.multifd_channels,
+ DEFAULT_MIGRATE_MULTIFD_CHANNELS),
+ DEFINE_PROP_MULTIFD_COMPRESSION("multifd-compression", MigrationState,
+ parameters.multifd_compression,
+ DEFAULT_MIGRATE_MULTIFD_COMPRESSION),
+ DEFINE_PROP_UINT8("multifd-zlib-level", MigrationState,
+ parameters.multifd_zlib_level,
+ DEFAULT_MIGRATE_MULTIFD_ZLIB_LEVEL),
+ DEFINE_PROP_UINT8("multifd-zstd-level", MigrationState,
+ parameters.multifd_zstd_level,
+ DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL),
+ DEFINE_PROP_SIZE("xbzrle-cache-size", MigrationState,
+ parameters.xbzrle_cache_size,
+ DEFAULT_MIGRATE_XBZRLE_CACHE_SIZE),
+ DEFINE_PROP_SIZE("max-postcopy-bandwidth", MigrationState,
+ parameters.max_postcopy_bandwidth,
+ DEFAULT_MIGRATE_MAX_POSTCOPY_BANDWIDTH),
+ DEFINE_PROP_UINT8("max-cpu-throttle", MigrationState,
+ parameters.max_cpu_throttle,
+ DEFAULT_MIGRATE_MAX_CPU_THROTTLE),
+ DEFINE_PROP_SIZE("announce-initial", MigrationState,
+ parameters.announce_initial,
+ DEFAULT_MIGRATE_ANNOUNCE_INITIAL),
+ DEFINE_PROP_SIZE("announce-max", MigrationState,
+ parameters.announce_max,
+ DEFAULT_MIGRATE_ANNOUNCE_MAX),
+ DEFINE_PROP_SIZE("announce-rounds", MigrationState,
+ parameters.announce_rounds,
+ DEFAULT_MIGRATE_ANNOUNCE_ROUNDS),
+ DEFINE_PROP_SIZE("announce-step", MigrationState,
+ parameters.announce_step,
+ DEFAULT_MIGRATE_ANNOUNCE_STEP),
+ DEFINE_PROP_STRING("tls-creds", MigrationState, parameters.tls_creds),
+ DEFINE_PROP_STRING("tls-hostname", MigrationState, parameters.tls_hostname),
+ DEFINE_PROP_STRING("tls-authz", MigrationState, parameters.tls_authz),
+
+ /* Migration capabilities */
+ DEFINE_PROP_MIG_CAP("x-xbzrle", MIGRATION_CAPABILITY_XBZRLE),
+ DEFINE_PROP_MIG_CAP("x-rdma-pin-all", MIGRATION_CAPABILITY_RDMA_PIN_ALL),
+ DEFINE_PROP_MIG_CAP("x-auto-converge", MIGRATION_CAPABILITY_AUTO_CONVERGE),
+ DEFINE_PROP_MIG_CAP("x-zero-blocks", MIGRATION_CAPABILITY_ZERO_BLOCKS),
+ DEFINE_PROP_MIG_CAP("x-compress", MIGRATION_CAPABILITY_COMPRESS),
+ DEFINE_PROP_MIG_CAP("x-events", MIGRATION_CAPABILITY_EVENTS),
+ DEFINE_PROP_MIG_CAP("x-postcopy-ram", MIGRATION_CAPABILITY_POSTCOPY_RAM),
+ DEFINE_PROP_MIG_CAP("x-postcopy-preempt",
+ MIGRATION_CAPABILITY_POSTCOPY_PREEMPT),
+ DEFINE_PROP_MIG_CAP("x-colo", MIGRATION_CAPABILITY_X_COLO),
+ DEFINE_PROP_MIG_CAP("x-release-ram", MIGRATION_CAPABILITY_RELEASE_RAM),
+ DEFINE_PROP_MIG_CAP("x-block", MIGRATION_CAPABILITY_BLOCK),
+ DEFINE_PROP_MIG_CAP("x-return-path", MIGRATION_CAPABILITY_RETURN_PATH),
+ DEFINE_PROP_MIG_CAP("x-multifd", MIGRATION_CAPABILITY_MULTIFD),
+ DEFINE_PROP_MIG_CAP("x-background-snapshot",
+ MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT),
+#ifdef CONFIG_LINUX
+ DEFINE_PROP_MIG_CAP("x-zero-copy-send",
+ MIGRATION_CAPABILITY_ZERO_COPY_SEND),
+#endif
+
+ DEFINE_PROP_END_OF_LIST(),
+};
+
bool migrate_auto_converge(void)
{
MigrationState *s = migrate_get_current();
--
2.39.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* Re: [PATCH 01/43] migration: rename enabled_capabilities to capabilities
2023-03-02 16:33 ` [PATCH 01/43] migration: rename enabled_capabilities to capabilities Juan Quintela
@ 2023-03-06 14:27 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-03-06 14:27 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> It is clear from the context what that means, and such a long name
> with the extra long names of the capabilities make very difficilut to
> stay inside the 80 columns limit.
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 00/43] Migration: Create options.c for capabilities/params/properties
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (42 preceding siblings ...)
2023-03-02 16:34 ` [PATCH 43/43] migration: Move migration_properties to options.c Juan Quintela
@ 2023-03-06 14:29 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:08 ` Juan Quintela
43 siblings, 1 reply; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-03-06 14:29 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> Hi
>
> This series move to options.c:
> - all migration capabilities code
> - all migration parameters code
> - all properties code
> - all qmp commands that only touch the previous
>
> And once there:
> - sort of functions
> - make consistent and coherent all the functions naming/typing
> - create accessors for the parameters/capabilties that don't exist
> - more cleanups here and there.
>
> Todo:
>
> - There is still capabilities code on savevm.c, but I want this in
> before moving that code to options.c, but still needs more thought
> for my part. I.e. should I put vmstate sections in options.c, or
> should I create new functions to access the capabilities in savevm.c.
>
> Please review.
Hmm, I can't apply to current master, neither can patchew: https://patchew.org/QEMU/20230302163410.11399-1-quintela@redhat.com/
On which commit the series based on?
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 02/43] migration: Pass migrate_caps_check() the old and new caps
2023-03-02 16:33 ` [PATCH 02/43] migration: Pass migrate_caps_check() the old and new caps Juan Quintela
@ 2023-03-06 14:40 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-03-06 14:40 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> We used to pass the old capabilities array and the new
> capabilities as a list.
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 04/43] migration: create options.c
2023-03-02 16:33 ` [PATCH 04/43] migration: create options.c Juan Quintela
@ 2023-03-08 9:46 ` Dr. David Alan Gilbert
2023-04-20 13:02 ` Juan Quintela
0 siblings, 1 reply; 62+ messages in thread
From: Dr. David Alan Gilbert @ 2023-03-08 9:46 UTC (permalink / raw)
To: Juan Quintela
Cc: qemu-devel, David Hildenbrand, Vladimir Sementsov-Ogievskiy,
John Snow, Stefan Hajnoczi, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Eric Blake
* Juan Quintela (quintela@redhat.com) wrote:
> We move there all capabilities helpers from migration.c.
>
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
> migration/migration.h | 12 ----
> migration/options.h | 34 +++++++++
> hw/virtio/virtio-balloon.c | 1 +
> migration/block-dirty-bitmap.c | 1 +
> migration/block.c | 1 +
> migration/colo.c | 1 +
> migration/migration.c | 109 +---------------------------
> migration/options.c | 126 +++++++++++++++++++++++++++++++++
> migration/postcopy-ram.c | 1 +
> migration/ram.c | 1 +
> migration/savevm.c | 1 +
> migration/socket.c | 1 +
> migration/meson.build | 1 +
> 13 files changed, 170 insertions(+), 120 deletions(-)
> create mode 100644 migration/options.h
> create mode 100644 migration/options.c
>
> diff --git a/migration/migration.h b/migration/migration.h
> index b07efaf259..68851e485d 100644
> --- a/migration/migration.h
> +++ b/migration/migration.h
> @@ -410,16 +410,7 @@ MigrationState *migrate_get_current(void);
>
> bool migrate_postcopy(void);
>
> -bool migrate_release_ram(void);
> -bool migrate_postcopy_ram(void);
> -bool migrate_zero_blocks(void);
> -bool migrate_dirty_bitmaps(void);
> -bool migrate_ignore_shared(void);
> -bool migrate_validate_uuid(void);
> -
> -bool migrate_auto_converge(void);
> bool migrate_use_multifd(void);
> -bool migrate_pause_before_switchover(void);
> int migrate_multifd_channels(void);
> MultiFDCompression migrate_multifd_compression(void);
> int migrate_multifd_zlib_level(void);
> @@ -448,9 +439,6 @@ int migrate_compress_threads(void);
> int migrate_compress_wait_thread(void);
> int migrate_decompress_threads(void);
> bool migrate_use_events(void);
> -bool migrate_postcopy_blocktime(void);
> -bool migrate_background_snapshot(void);
> -bool migrate_postcopy_preempt(void);
>
> /* Sending on the return path - generic and then for each message type */
> void migrate_send_rp_shut(MigrationIncomingState *mis,
> diff --git a/migration/options.h b/migration/options.h
> new file mode 100644
> index 0000000000..bae032375a
> --- /dev/null
> +++ b/migration/options.h
> @@ -0,0 +1,34 @@
> +/*
> + * QEMU migration options
> + *
> + * Copyright IBM, Corp. 2008
> + *
> + * Authors:
> + * Anthony Liguori <aliguori@us.ibm.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2. See
> + * the COPYING file in the top-level directory.
> + *
> + * Contributions after 2012-01-13 are licensed under the terms of the
> + * GNU GPL, version 2 or (at your option) any later version.
I don't think any of these functions were written by Anthony, and I
think they're all after 2012 aren't they? If so we can update to a more
modern header.
Other than that,
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Dave
> + */
> +
> +#ifndef QEMU_MIGRATION_OPTIONS_H
> +#define QEMU_MIGRATION_OPTIONS_H
> +
> +/* capabilities */
> +
> +bool migrate_auto_converge(void);
> +bool migrate_background_snapshot(void);
> +bool migrate_dirty_bitmaps(void);
> +bool migrate_ignore_shared(void);
> +bool migrate_late_block_activate(void);
> +bool migrate_pause_before_switchover(void);
> +bool migrate_postcopy_blocktime(void);
> +bool migrate_postcopy_preempt(void);
> +bool migrate_postcopy_ram(void);
> +bool migrate_release_ram(void);
> +bool migrate_validate_uuid(void);
> +bool migrate_zero_blocks(void);
> +
> +#endif
> diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
> index 746f07c4d2..43092aa634 100644
> --- a/hw/virtio/virtio-balloon.c
> +++ b/hw/virtio/virtio-balloon.c
> @@ -32,6 +32,7 @@
> #include "qemu/error-report.h"
> #include "migration/misc.h"
> #include "migration/migration.h"
> +#include "migration/options.h"
>
> #include "hw/virtio/virtio-bus.h"
> #include "hw/virtio/virtio-access.h"
> diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
> index fe73aa94b1..a6ffae0002 100644
> --- a/migration/block-dirty-bitmap.c
> +++ b/migration/block-dirty-bitmap.c
> @@ -79,6 +79,7 @@
> #include "qapi/qapi-visit-migration.h"
> #include "qapi/clone-visitor.h"
> #include "trace.h"
> +#include "options.h"
>
> #define CHUNK_SIZE (1 << 10)
>
> diff --git a/migration/block.c b/migration/block.c
> index 426a25bb19..c4fe9fea56 100644
> --- a/migration/block.c
> +++ b/migration/block.c
> @@ -28,6 +28,7 @@
> #include "migration/vmstate.h"
> #include "sysemu/block-backend.h"
> #include "trace.h"
> +#include "options.h"
>
> #define BLK_MIG_BLOCK_SIZE (1ULL << 20)
> #define BDRV_SECTORS_PER_DIRTY_CHUNK (BLK_MIG_BLOCK_SIZE >> BDRV_SECTOR_BITS)
> diff --git a/migration/colo.c b/migration/colo.c
> index 0716e64689..93b78c9270 100644
> --- a/migration/colo.c
> +++ b/migration/colo.c
> @@ -36,6 +36,7 @@
> #include "sysemu/cpus.h"
> #include "sysemu/runstate.h"
> #include "net/filter.h"
> +#include "options.h"
>
> static bool vmstate_loading;
> static Notifier packets_compare_notifier;
> diff --git a/migration/migration.c b/migration/migration.c
> index e3062530f0..790848ef1c 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -63,6 +63,7 @@
> #include "sysemu/cpus.h"
> #include "yank_functions.h"
> #include "sysemu/qtest.h"
> +#include "options.h"
>
> #define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttling */
>
> @@ -357,15 +358,6 @@ static void migrate_generate_event(int new_state)
> }
> }
>
> -static bool migrate_late_block_activate(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
> -}
> -
> /*
> * Send a message on the return channel back to the source
> * of the migration.
> @@ -2523,56 +2515,11 @@ void qmp_migrate_continue(MigrationStatus state, Error **errp)
> qemu_sem_post(&s->pause_sem);
> }
>
> -bool migrate_release_ram(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
> -}
> -
> -bool migrate_postcopy_ram(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
> -}
> -
> bool migrate_postcopy(void)
> {
> return migrate_postcopy_ram() || migrate_dirty_bitmaps();
> }
>
> -bool migrate_auto_converge(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
> -}
> -
> -bool migrate_zero_blocks(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
> -}
> -
> -bool migrate_postcopy_blocktime(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME];
> -}
> -
> bool migrate_use_compression(void)
> {
> MigrationState *s;
> @@ -2618,33 +2565,6 @@ int migrate_decompress_threads(void)
> return s->parameters.decompress_threads;
> }
>
> -bool migrate_dirty_bitmaps(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
> -}
> -
> -bool migrate_ignore_shared(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED];
> -}
> -
> -bool migrate_validate_uuid(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
> -}
> -
> bool migrate_use_events(void)
> {
> MigrationState *s;
> @@ -2663,15 +2583,6 @@ bool migrate_use_multifd(void)
> return s->capabilities[MIGRATION_CAPABILITY_MULTIFD];
> }
>
> -bool migrate_pause_before_switchover(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER];
> -}
> -
> int migrate_multifd_channels(void)
> {
> MigrationState *s;
> @@ -2783,24 +2694,6 @@ bool migrate_use_block_incremental(void)
> return s->parameters.block_incremental;
> }
>
> -bool migrate_background_snapshot(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
> -}
> -
> -bool migrate_postcopy_preempt(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT];
> -}
> -
> /* migration thread support */
> /*
> * Something bad happened to the RP stream, mark an error
> diff --git a/migration/options.c b/migration/options.c
> new file mode 100644
> index 0000000000..47337a9a29
> --- /dev/null
> +++ b/migration/options.c
> @@ -0,0 +1,126 @@
> +/*
> + * QEMU migration capabilities
> + *
> + * Copyright IBM, Corp. 2008
> + *
> + * Authors:
> + * Anthony Liguori <aliguori@us.ibm.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2. See
> + * the COPYING file in the top-level directory.
> + *
> + * Contributions after 2012-01-13 are licensed under the terms of the
> + * GNU GPL, version 2 or (at your option) any later version.
> + */
> +
> +#include "qemu/osdep.h"
> +#include "migration.h"
> +#include "options.h"
> +
> +bool migrate_auto_converge(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
> +}
> +
> +bool migrate_background_snapshot(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
> +}
> +
> +bool migrate_dirty_bitmaps(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
> +}
> +
> +bool migrate_ignore_shared(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED];
> +}
> +
> +bool migrate_late_block_activate(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
> +}
> +
> +bool migrate_pause_before_switchover(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER];
> +}
> +
> +bool migrate_postcopy_blocktime(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME];
> +}
> +
> +bool migrate_postcopy_preempt(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT];
> +}
> +
> +bool migrate_postcopy_ram(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
> +}
> +
> +bool migrate_release_ram(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
> +}
> +
> +bool migrate_validate_uuid(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
> +}
> +
> +bool migrate_zero_blocks(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
> +}
> diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
> index f54f44d899..ce41670466 100644
> --- a/migration/postcopy-ram.c
> +++ b/migration/postcopy-ram.c
> @@ -36,6 +36,7 @@
> #include "yank_functions.h"
> #include "tls.h"
> #include "qemu/userfaultfd.h"
> +#include "options.h"
>
> /* Arbitrary limit on size of each discard command,
> * keeps them around ~200 bytes
> diff --git a/migration/ram.c b/migration/ram.c
> index af749b369b..1c786eb8f4 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -57,6 +57,7 @@
> #include "qemu/iov.h"
> #include "multifd.h"
> #include "sysemu/runstate.h"
> +#include "options.h"
>
> #include "hw/boards.h" /* for machine_dump_guest_core() */
>
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 589ef926ab..ebcf571e37 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -67,6 +67,7 @@
> #include "qemu/yank.h"
> #include "yank_functions.h"
> #include "sysemu/qtest.h"
> +#include "options.h"
>
> const unsigned int postcopy_ram_discard_version;
>
> diff --git a/migration/socket.c b/migration/socket.c
> index e6fdf3c5e1..ebf9ac41af 100644
> --- a/migration/socket.c
> +++ b/migration/socket.c
> @@ -27,6 +27,7 @@
> #include "io/net-listener.h"
> #include "trace.h"
> #include "postcopy-ram.h"
> +#include "options.h"
>
> struct SocketOutgoingArgs {
> SocketAddress *saddr;
> diff --git a/migration/meson.build b/migration/meson.build
> index 0d1bb9f96e..480ff6854a 100644
> --- a/migration/meson.build
> +++ b/migration/meson.build
> @@ -22,6 +22,7 @@ softmmu_ss.add(files(
> 'migration.c',
> 'multifd.c',
> 'multifd-zlib.c',
> + 'options.c',
> 'postcopy-ram.c',
> 'savevm.c',
> 'socket.c',
> --
> 2.39.2
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 03/43] migration: Create migration_cap_set()
2023-03-02 16:33 ` [PATCH 03/43] migration: Create migration_cap_set() Juan Quintela
@ 2023-03-08 10:47 ` Dr. David Alan Gilbert
2023-04-20 12:32 ` Juan Quintela
0 siblings, 1 reply; 62+ messages in thread
From: Dr. David Alan Gilbert @ 2023-03-08 10:47 UTC (permalink / raw)
To: Juan Quintela
Cc: qemu-devel, David Hildenbrand, Vladimir Sementsov-Ogievskiy,
John Snow, Stefan Hajnoczi, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Eric Blake
* Juan Quintela (quintela@redhat.com) wrote:
> And remove the convoluted use of qmp_migrate_set_capabilities() to
> enable disable MIGRATION_CAPABILITY_BLOCK.
>
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
> migration/migration.c | 34 ++++++++++++++++------------------
> 1 file changed, 16 insertions(+), 18 deletions(-)
>
> diff --git a/migration/migration.c b/migration/migration.c
> index 119027a656..e3062530f0 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -1910,25 +1910,24 @@ void migrate_set_state(int *state, int old_state, int new_state)
> }
> }
>
> -static MigrationCapabilityStatus *migrate_cap_add(MigrationCapability index,
> - bool state)
> +static bool migrate_cap_set(int cap, bool value, Error **errp)
Why int cap rather than MigrationCapability ?
Dave
> {
> - MigrationCapabilityStatus *cap;
> + MigrationState *s = migrate_get_current();
> + bool new_caps[MIGRATION_CAPABILITY__MAX];
>
> - cap = g_new0(MigrationCapabilityStatus, 1);
> - cap->capability = index;
> - cap->state = state;
> + if (migration_is_running(s->state)) {
> + error_setg(errp, QERR_MIGRATION_ACTIVE);
> + return false;
> + }
>
> - return cap;
> -}
> + memcpy(new_caps, s->capabilities, sizeof(new_caps));
> + new_caps[cap] = value;
>
> -void migrate_set_block_enabled(bool value, Error **errp)
> -{
> - MigrationCapabilityStatusList *cap = NULL;
> -
> - QAPI_LIST_PREPEND(cap, migrate_cap_add(MIGRATION_CAPABILITY_BLOCK, value));
> - qmp_migrate_set_capabilities(cap, errp);
> - qapi_free_MigrationCapabilityStatusList(cap);
> + if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
> + return false;
> + }
> + s->capabilities[cap] = value;
> + return true;
> }
>
> static void migrate_set_block_incremental(MigrationState *s, bool value)
> @@ -1940,7 +1939,7 @@ static void block_cleanup_parameters(MigrationState *s)
> {
> if (s->must_remove_block_options) {
> /* setting to false can never fail */
> - migrate_set_block_enabled(false, &error_abort);
> + migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, false, &error_abort);
> migrate_set_block_incremental(s, false);
> s->must_remove_block_options = false;
> }
> @@ -2427,8 +2426,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc,
> "current migration capabilities");
> return false;
> }
> - migrate_set_block_enabled(true, &local_err);
> - if (local_err) {
> + if (!migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, true, &local_err)) {
> error_propagate(errp, local_err);
> return false;
> }
> --
> 2.39.2
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 03/43] migration: Create migration_cap_set()
2023-03-08 10:47 ` Dr. David Alan Gilbert
@ 2023-04-20 12:32 ` Juan Quintela
0 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-04-20 12:32 UTC (permalink / raw)
To: Dr. David Alan Gilbert
Cc: qemu-devel, David Hildenbrand, Vladimir Sementsov-Ogievskiy,
John Snow, Stefan Hajnoczi, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Eric Blake
"Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote:
> * Juan Quintela (quintela@redhat.com) wrote:
>> And remove the convoluted use of qmp_migrate_set_capabilities() to
>> enable disable MIGRATION_CAPABILITY_BLOCK.
>>
>> Signed-off-by: Juan Quintela <quintela@redhat.com>
>> ---
>> migration/migration.c | 34 ++++++++++++++++------------------
>> 1 file changed, 16 insertions(+), 18 deletions(-)
>>
>> diff --git a/migration/migration.c b/migration/migration.c
>> index 119027a656..e3062530f0 100644
>> --- a/migration/migration.c
>> +++ b/migration/migration.c
>> @@ -1910,25 +1910,24 @@ void migrate_set_state(int *state, int old_state, int new_state)
>> }
>> }
>>
>> -static MigrationCapabilityStatus *migrate_cap_add(MigrationCapability index,
>> - bool state)
>> +static bool migrate_cap_set(int cap, bool value, Error **errp)
>
> Why int cap rather than MigrationCapability ?
It is the index in one array, so it is int. And it is much, much
shorter.
In this particular case I think that we don't lost anything having it as
int, but will not fight over this O:-)
Later, Juan.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 05/43] migration: Move migrate_colo_enabled() to options.c
2023-03-02 16:33 ` [PATCH 05/43] migration: Move migrate_colo_enabled() to options.c Juan Quintela
@ 2023-04-20 12:54 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 12:54 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> Once that we are there, we rename the function to migrate_colo() to be
> consistent with all other capabilities.
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 06/43] migration: Move migrate_use_compression() to options.c
2023-03-02 16:33 ` [PATCH 06/43] migration: Move migrate_use_compression() " Juan Quintela
@ 2023-04-20 12:58 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:32 ` Juan Quintela
0 siblings, 1 reply; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 12:58 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> Once that we are there, we rename the function to migrate_compress()
> to be consistent with all other capabilities.
>
> Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
> ---
> migration/migration.h | 1 -
> migration/options.h | 1 +
> migration/migration.c | 11 +----------
> migration/options.c | 9 +++++++++
[..]
> --- a/migration/options.c
> +++ b/migration/options.c
> @@ -41,6 +41,15 @@ bool migrate_colo(void)
> return s->capabilities[MIGRATION_CAPABILITY_X_COLO];
> }
>
> +bool migrate_compress(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_COMPRESS];
> +}
Probably, we could generate these functions automatically, or at least have a helper, so that all such functions are one-line wrappers on that helper.
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 07/43] migration: Move migrate_use_events() to options.c
2023-03-02 16:33 ` [PATCH 07/43] migration: Move migrate_use_events() " Juan Quintela
@ 2023-04-20 13:00 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 13:00 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> Once that we are there, we rename the function to migrate_events()
> to be consistent with all other capabilities.
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 08/43] migration: Move migrate_use_multifd() to options.c
2023-03-02 16:33 ` [PATCH 08/43] migration: Move migrate_use_multifd() " Juan Quintela
@ 2023-04-20 13:01 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 13:01 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> Once that we are there, we rename the function to migrate_multifd()
> to be consistent with all other capabilities.
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 04/43] migration: create options.c
2023-03-08 9:46 ` Dr. David Alan Gilbert
@ 2023-04-20 13:02 ` Juan Quintela
0 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-04-20 13:02 UTC (permalink / raw)
To: Dr. David Alan Gilbert
Cc: qemu-devel, David Hildenbrand, Vladimir Sementsov-Ogievskiy,
John Snow, Stefan Hajnoczi, qemu-block, Hailiang Zhang,
Fam Zheng, Michael S. Tsirkin, Eric Blake
"Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote:
> * Juan Quintela (quintela@redhat.com) wrote:
>> We move there all capabilities helpers from migration.c.
>>
>> Signed-off-by: Juan Quintela <quintela@redhat.com>
>> --- /dev/null
>> +++ b/migration/options.h
>> @@ -0,0 +1,34 @@
>> +/*
>> + * QEMU migration options
>> + *
>> + * Copyright IBM, Corp. 2008
>> + *
>> + * Authors:
>> + * Anthony Liguori <aliguori@us.ibm.com>
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2. See
>> + * the COPYING file in the top-level directory.
>> + *
>> + * Contributions after 2012-01-13 are licensed under the terms of the
>> + * GNU GPL, version 2 or (at your option) any later version.
>
> I don't think any of these functions were written by Anthony, and I
I investigated, and the creator of enabled_capabilities is:
commit bbf6da32b5bd32018069e4eaeda59a02855903f2
Author: Orit Wasserman <owasserm@redhat.com>
Date: Mon Aug 6 21:42:47 2012 +0300
Add migration capabilities
> think they're all after 2012 aren't they?
We are ... by 8 months O:-)
> If so we can update to a more modern header.
/*
* QEMU migration capabilities
*
* Copyright (c) 2012-2023 Red Hat Inc
*
* Authors:
* Orit Wasserman <owasserm@redhat.com>
* Juan Quintela <quintela@redhat.com>
*
* This work is licensed under the terms of the GNU GPL, version 2 or later.
* See the COPYING file in the top-level directory.
*/
I put Orit and myself. Peter Xu has also done quite a bit of work here.
Rest of people have just added capabilities for its stuff.
But if anyone feel that they need/want to be added, just ask.
> Other than that,
Thanks, Juan.
>
> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 09/43] migration: Move migrate_use_zero_copy_send() to options.c
2023-03-02 16:33 ` [PATCH 09/43] migration: Move migrate_use_zero_copy_send() " Juan Quintela
@ 2023-04-20 13:06 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 13:06 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> Once that we are there, we rename the function to
> migrate_zero_copy_send() to be consistent with all other capabilities.
>
> We can remove the CONFIG_LINUX guard. We already check that we can't
> setup this capability in migrate_caps_check().
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 10/43] migration: Move migrate_use_xbzrle() to options.c
2023-03-02 16:33 ` [PATCH 10/43] migration: Move migrate_use_xbzrle() " Juan Quintela
@ 2023-04-20 13:07 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 13:07 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> Once that we are there, we rename the function to migrate_xbzrle()
> to be consistent with all other capabilities.
> We change the type to return bool also for consistency.
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 11/43] migration: Move migrate_use_block() to options.c
2023-03-02 16:33 ` [PATCH 11/43] migration: Move migrate_use_block() " Juan Quintela
@ 2023-04-20 13:08 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 13:08 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> Once that we are there, we rename the function to migrate_block()
> to be consistent with all other capabilities.
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 00/43] Migration: Create options.c for capabilities/params/properties
2023-03-06 14:29 ` [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Vladimir Sementsov-Ogievskiy
@ 2023-04-20 13:08 ` Juan Quintela
0 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-04-20 13:08 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy
Cc: qemu-devel, David Hildenbrand, John Snow, Stefan Hajnoczi,
qemu-block, Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> wrote:
> On 02.03.23 19:33, Juan Quintela wrote:
>> Hi
>> This series move to options.c:
>> - all migration capabilities code
>> - all migration parameters code
>> - all properties code
>> - all qmp commands that only touch the previous
>> And once there:
>> - sort of functions
>> - make consistent and coherent all the functions naming/typing
>> - create accessors for the parameters/capabilties that don't exist
>> - more cleanups here and there.
>> Todo:
>> - There is still capabilities code on savevm.c, but I want this in
>> before moving that code to options.c, but still needs more thought
>> for my part. I.e. should I put vmstate sections in options.c, or
>> should I create new functions to access the capabilities in savevm.c.
>> Please review.
>
> Hmm, I can't apply to current master, neither can patchew:
> https://patchew.org/QEMU/20230302163410.11399-1-quintela@redhat.com/
>
> On which commit the series based on?
It was on top of my spice changes O:-)
But I sent a new version right now on top of the PULL request.
Thanks, Juan.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 12/43] migration: Move migrate_use_return() to options.c
2023-03-02 16:33 ` [PATCH 12/43] migration: Move migrate_use_return() " Juan Quintela
@ 2023-04-20 13:09 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 13:09 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> Once that we are there, we rename the function to migrate_return_path()
> to be consistent with all other capabilities.
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 13/43] migration: Create migrate_rdma_pin_all() function
2023-03-02 16:33 ` [PATCH 13/43] migration: Create migrate_rdma_pin_all() function Juan Quintela
@ 2023-04-20 13:12 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 62+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 13:12 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: David Hildenbrand, John Snow, Stefan Hajnoczi, qemu-block,
Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake
On 02.03.23 19:33, Juan Quintela wrote:
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 06/43] migration: Move migrate_use_compression() to options.c
2023-04-20 12:58 ` Vladimir Sementsov-Ogievskiy
@ 2023-04-20 13:32 ` Juan Quintela
0 siblings, 0 replies; 62+ messages in thread
From: Juan Quintela @ 2023-04-20 13:32 UTC (permalink / raw)
To: Vladimir Sementsov-Ogievskiy
Cc: qemu-devel, David Hildenbrand, John Snow, Stefan Hajnoczi,
qemu-block, Hailiang Zhang, Fam Zheng, Michael S. Tsirkin,
Dr. David Alan Gilbert, Eric Blake, Markus Armbruster
Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> wrote:
> On 02.03.23 19:33, Juan Quintela wrote:
>> Once that we are there, we rename the function to migrate_compress()
>> to be consistent with all other capabilities.
>> Signed-off-by: Juan Quintela <quintela@redhat.com>
>
> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
>
>> ---
>> migration/migration.h | 1 -
>> migration/options.h | 1 +
>> migration/migration.c | 11 +----------
>> migration/options.c | 9 +++++++++
>
> [..]
>
>> --- a/migration/options.c
>> +++ b/migration/options.c
>> @@ -41,6 +41,15 @@ bool migrate_colo(void)
>> return s->capabilities[MIGRATION_CAPABILITY_X_COLO];
>> }
>> +bool migrate_compress(void)
>> +{
>> + MigrationState *s;
>> +
>> + s = migrate_get_current();
>> +
>> + return s->capabilities[MIGRATION_CAPABILITY_COMPRESS];
>> +}
>
> Probably, we could generate these functions automatically, or at least
> have a helper, so that all such functions are one-line wrappers on
> that helper.
Markus, or any other qapi guru, I would be happy if this could be
managed automagically O:-)
Later, Juan.
^ permalink raw reply [flat|nested] 62+ messages in thread
end of thread, other threads:[~2023-04-20 13:32 UTC | newest]
Thread overview: 62+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-02 16:33 [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
2023-03-02 16:33 ` [PATCH 01/43] migration: rename enabled_capabilities to capabilities Juan Quintela
2023-03-06 14:27 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 02/43] migration: Pass migrate_caps_check() the old and new caps Juan Quintela
2023-03-06 14:40 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 03/43] migration: Create migration_cap_set() Juan Quintela
2023-03-08 10:47 ` Dr. David Alan Gilbert
2023-04-20 12:32 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 04/43] migration: create options.c Juan Quintela
2023-03-08 9:46 ` Dr. David Alan Gilbert
2023-04-20 13:02 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 05/43] migration: Move migrate_colo_enabled() to options.c Juan Quintela
2023-04-20 12:54 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 06/43] migration: Move migrate_use_compression() " Juan Quintela
2023-04-20 12:58 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:32 ` Juan Quintela
2023-03-02 16:33 ` [PATCH 07/43] migration: Move migrate_use_events() " Juan Quintela
2023-04-20 13:00 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 08/43] migration: Move migrate_use_multifd() " Juan Quintela
2023-04-20 13:01 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 09/43] migration: Move migrate_use_zero_copy_send() " Juan Quintela
2023-04-20 13:06 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 10/43] migration: Move migrate_use_xbzrle() " Juan Quintela
2023-04-20 13:07 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 11/43] migration: Move migrate_use_block() " Juan Quintela
2023-04-20 13:08 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 12/43] migration: Move migrate_use_return() " Juan Quintela
2023-04-20 13:09 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 13/43] migration: Create migrate_rdma_pin_all() function Juan Quintela
2023-04-20 13:12 ` Vladimir Sementsov-Ogievskiy
2023-03-02 16:33 ` [PATCH 14/43] migration: Move migrate_caps_check() to options.c Juan Quintela
2023-03-02 16:33 ` [PATCH 15/43] migration: Move qmp_query_migrate_capabilities() " Juan Quintela
2023-03-02 16:33 ` [PATCH 16/43] migration: Move qmp_migrate_set_capabilities() " Juan Quintela
2023-03-02 16:33 ` [PATCH 17/43] migration: Move migrate_cap_set() " Juan Quintela
2023-03-02 16:33 ` [PATCH 18/43] migration: Move parameters functions to option.c Juan Quintela
2023-03-02 16:33 ` [PATCH 19/43] migration: Use migrate_max_postcopy_bandwidth() Juan Quintela
2023-03-02 16:33 ` [PATCH 20/43] migration: Move migrate_use_block_incremental() to option.c Juan Quintela
2023-03-02 16:33 ` [PATCH 21/43] migration: Create migrate_throttle_trigger_threshold() Juan Quintela
2023-03-02 16:33 ` [PATCH 22/43] migration: Create migrate_checkpoint_delay() Juan Quintela
2023-03-02 16:33 ` [PATCH 23/43] migration: Create migrate_max_cpu_throttle() Juan Quintela
2023-03-02 16:33 ` [PATCH 24/43] migration: Move migrate_announce_params() to option.c Juan Quintela
2023-03-02 16:33 ` [PATCH 25/43] migration: Create migrate_cpu_throttle_initial() " Juan Quintela
2023-03-02 16:33 ` [PATCH 26/43] migration: Create migrate_cpu_throttle_increment() function Juan Quintela
2023-03-02 16:33 ` [PATCH 27/43] migration: Create migrate_cpu_throttle_tailslow() function Juan Quintela
2023-03-02 16:33 ` [PATCH 28/43] migration: Move migrate_use_tls() to options.c Juan Quintela
2023-03-02 16:33 ` [PATCH 29/43] migration: Move migrate_postcopy() " Juan Quintela
2023-03-02 16:33 ` [PATCH 30/43] migration: Create migrate_max_bandwidth() function Juan Quintela
2023-03-02 16:33 ` [PATCH 31/43] migration: Move qmp_query_migrate_parameters() to options.c Juan Quintela
2023-03-02 16:33 ` [PATCH 32/43] migration: Move qmp_migrate_set_parameters() " Juan Quintela
2023-03-02 16:34 ` [PATCH 33/43] migration: Create migrate_params_init() function Juan Quintela
2023-03-02 16:34 ` [PATCH 34/43] migration: Make all functions check have the same format Juan Quintela
2023-03-02 16:34 ` [PATCH 35/43] migration: Create migrate_downtime_limit() function Juan Quintela
2023-03-02 16:34 ` [PATCH 36/43] migration: Move migrate_set_block_incremental() to options.c Juan Quintela
2023-03-02 16:34 ` [PATCH 37/43] migration: Move block_cleanup_parameters() " Juan Quintela
2023-03-02 16:34 ` [PATCH 38/43] migration: Remove MigrationState from block_cleanup_parameters() Juan Quintela
2023-03-02 16:34 ` [PATCH 39/43] migration: Create migrate_tls_creds() function Juan Quintela
2023-03-02 16:34 ` [PATCH 40/43] migration: Create migrate_tls_authz() function Juan Quintela
2023-03-02 16:34 ` [PATCH 41/43] migration: Create migrate_tls_hostname() function Juan Quintela
2023-03-02 16:34 ` [PATCH 42/43] migration: Create migrate_block_bitmap_mapping() function Juan Quintela
2023-03-02 16:34 ` [PATCH 43/43] migration: Move migration_properties to options.c Juan Quintela
2023-03-06 14:29 ` [PATCH 00/43] Migration: Create options.c for capabilities/params/properties Vladimir Sementsov-Ogievskiy
2023-04-20 13:08 ` Juan Quintela
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.