All of lore.kernel.org
 help / color / mirror / Atom feed
* [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 &ap;
-}
-
 /*
  * 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 &ap;
+}
+
+
-- 
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 &ap;
 }
 
+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.