qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PULL 00/30] Migration 20230424 patches
@ 2023-04-24 13:27 Juan Quintela
  2023-04-24 13:27 ` [PULL 01/30] migration: Minor control flow simplification Juan Quintela
                   ` (30 more replies)
  0 siblings, 31 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

The following changes since commit 81072abf1575b11226b3779af76dc71dfa85ee5d:

  Merge tag 'migration-20230420-pull-request' of https://gitlab.com/juan.quintela/qemu into staging (2023-04-24 12:06:17 +0100)

are available in the Git repository at:

  https://gitlab.com/juan.quintela/qemu.git tags/migration-20230424-pull-request

for you to fetch changes up to 9c894df3a37d675652390f7dbbe2f65b7bad7efa:

  migration: Create migrate_max_bandwidth() function (2023-04-24 15:01:47 +0200)

----------------------------------------------------------------
Migration Pull request

Everything that was reviewed since last PULL request:
- fix to control flow (eric)
- rearrange of hmp commands (juan)
- Make capabilities more consistent and coherent (juan)
  Not all of them reviewed yet, so only the ones reviewed.

Later, Juan.

PD.  I am waiting to finish review of the compression fixes to send
them.

----------------------------------------------------------------

Eric Blake (1):
  migration: Minor control flow simplification

Juan Quintela (29):
  migration: move migration_global_dump() to migration-hmp-cmds.c
  spice: move client_migrate_info command to ui/
  migration: Create migrate_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_postcopy() to options.c
  migration: Create migrate_max_bandwidth() function

 hw/virtio/virtio-balloon.c     |   1 +
 include/migration/misc.h       |   1 -
 migration/block-dirty-bitmap.c |   1 +
 migration/block.c              |   5 +-
 migration/colo.c               |   6 +-
 migration/meson.build          |   1 +
 migration/migration-hmp-cmds.c |  39 +-
 migration/migration.c          | 719 +-------------------------------
 migration/migration.h          |  40 --
 migration/multifd-zlib.c       |   1 +
 migration/multifd-zstd.c       |   1 +
 migration/multifd.c            |  24 +-
 migration/options.c            | 722 +++++++++++++++++++++++++++++++++
 migration/options.h            |  76 ++++
 migration/postcopy-ram.c       |   1 +
 migration/ram.c                |  43 +-
 migration/rdma.c               |  12 +-
 migration/savevm.c             |   3 +-
 migration/socket.c             |   5 +-
 qapi/migration.json            |  28 --
 qapi/ui.json                   |  28 ++
 ui/ui-hmp-cmds.c               |  17 +
 ui/ui-qmp-cmds.c               |  29 ++
 23 files changed, 971 insertions(+), 832 deletions(-)
 create mode 100644 migration/options.c
 create mode 100644 migration/options.h

-- 
2.39.2



^ permalink raw reply	[flat|nested] 32+ messages in thread

* [PULL 01/30] migration: Minor control flow simplification
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 02/30] migration: move migration_global_dump() to migration-hmp-cmds.c Juan Quintela
                   ` (29 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

From: Eric Blake <eblake@redhat.com>

No need to declare a temporary variable.

Suggested-by: Juan Quintela <quintela@redhat.com>
Fixes: 1df36e8c6289 ("migration: Handle block device inactivation failures better")
Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration/migration.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index d91fe9fd86..9ec6c1e204 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3431,7 +3431,6 @@ static void migration_completion(MigrationState *s)
         ret = global_state_store();
 
         if (!ret) {
-            bool inactivate = !migrate_colo_enabled();
             ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
             trace_migration_completion_vm_stop(ret);
             if (ret >= 0) {
@@ -3439,10 +3438,10 @@ static void migration_completion(MigrationState *s)
                                             MIGRATION_STATUS_DEVICE);
             }
             if (ret >= 0) {
-                s->block_inactive = inactivate;
+                s->block_inactive = !migrate_colo_enabled();
                 qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX);
                 ret = qemu_savevm_state_complete_precopy(s->to_dst_file, false,
-                                                         inactivate);
+                                                         s->block_inactive);
             }
         }
         qemu_mutex_unlock_iothread();
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 02/30] migration: move migration_global_dump() to migration-hmp-cmds.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
  2023-04-24 13:27 ` [PULL 01/30] migration: Minor control flow simplification Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 03/30] spice: move client_migrate_info command to ui/ Juan Quintela
                   ` (28 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Philippe Mathieu-Daudé

It is only used there, so we can make it static.
Once there, remove spice.h that it is not used.

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>

---

fix David Edmonson ui/qemu-spice.h unintended removal
---
 include/migration/misc.h       |  1 -
 migration/migration-hmp-cmds.c | 22 +++++++++++++++++++++-
 migration/migration.c          | 19 -------------------
 3 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/include/migration/misc.h b/include/migration/misc.h
index 8b49841016..5ebe13b4b9 100644
--- a/include/migration/misc.h
+++ b/include/migration/misc.h
@@ -66,7 +66,6 @@ bool migration_has_finished(MigrationState *);
 bool migration_has_failed(MigrationState *);
 /* ...and after the device transmission */
 bool migration_in_postcopy_after_devices(MigrationState *);
-void migration_global_dump(Monitor *mon);
 /* True if incoming migration entered POSTCOPY_INCOMING_DISCARD */
 bool migration_in_incoming_postcopy(void);
 /* True if incoming migration entered POSTCOPY_INCOMING_ADVISE */
diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c
index 72519ea99f..71da91967a 100644
--- a/migration/migration-hmp-cmds.c
+++ b/migration/migration-hmp-cmds.c
@@ -15,7 +15,6 @@
 
 #include "qemu/osdep.h"
 #include "block/qapi.h"
-#include "migration/misc.h"
 #include "migration/snapshot.h"
 #include "monitor/hmp.h"
 #include "monitor/monitor.h"
@@ -30,6 +29,27 @@
 #include "qemu/sockets.h"
 #include "sysemu/runstate.h"
 #include "ui/qemu-spice.h"
+#include "sysemu/sysemu.h"
+#include "migration.h"
+
+static void migration_global_dump(Monitor *mon)
+{
+    MigrationState *ms = migrate_get_current();
+
+    monitor_printf(mon, "globals:\n");
+    monitor_printf(mon, "store-global-state: %s\n",
+                   ms->store_global_state ? "on" : "off");
+    monitor_printf(mon, "only-migratable: %s\n",
+                   only_migratable ? "on" : "off");
+    monitor_printf(mon, "send-configuration: %s\n",
+                   ms->send_configuration ? "on" : "off");
+    monitor_printf(mon, "send-section-footer: %s\n",
+                   ms->send_section_footer ? "on" : "off");
+    monitor_printf(mon, "decompress-error-check: %s\n",
+                   ms->decompress_error_check ? "on" : "off");
+    monitor_printf(mon, "clear-bitmap-shift: %u\n",
+                   ms->clear_bitmap_shift);
+}
 
 void hmp_info_migrate(Monitor *mon, const QDict *qdict)
 {
diff --git a/migration/migration.c b/migration/migration.c
index 9ec6c1e204..a867631ab0 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -4416,25 +4416,6 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
     s->migration_thread_running = true;
 }
 
-void migration_global_dump(Monitor *mon)
-{
-    MigrationState *ms = migrate_get_current();
-
-    monitor_printf(mon, "globals:\n");
-    monitor_printf(mon, "store-global-state: %s\n",
-                   ms->store_global_state ? "on" : "off");
-    monitor_printf(mon, "only-migratable: %s\n",
-                   only_migratable ? "on" : "off");
-    monitor_printf(mon, "send-configuration: %s\n",
-                   ms->send_configuration ? "on" : "off");
-    monitor_printf(mon, "send-section-footer: %s\n",
-                   ms->send_section_footer ? "on" : "off");
-    monitor_printf(mon, "decompress-error-check: %s\n",
-                   ms->decompress_error_check ? "on" : "off");
-    monitor_printf(mon, "clear-bitmap-shift: %u\n",
-                   ms->clear_bitmap_shift);
-}
-
 #define DEFINE_PROP_MIG_CAP(name, x)             \
     DEFINE_PROP_BOOL(name, MigrationState, capabilities[x], false)
 
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 03/30] spice: move client_migrate_info command to ui/
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
  2023-04-24 13:27 ` [PULL 01/30] migration: Minor control flow simplification Juan Quintela
  2023-04-24 13:27 ` [PULL 02/30] migration: move migration_global_dump() to migration-hmp-cmds.c Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 04/30] migration: Create migrate_cap_set() Juan Quintela
                   ` (27 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Philippe Mathieu-Daudé

It has nothing to do with migration, except for the "migrate" in the
name of the command.  Move it with the rest of the ui commands.

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 migration/migration-hmp-cmds.c | 17 -----------------
 migration/migration.c          | 30 ------------------------------
 qapi/migration.json            | 28 ----------------------------
 qapi/ui.json                   | 28 ++++++++++++++++++++++++++++
 ui/ui-hmp-cmds.c               | 17 +++++++++++++++++
 ui/ui-qmp-cmds.c               | 29 +++++++++++++++++++++++++++++
 6 files changed, 74 insertions(+), 75 deletions(-)

diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c
index 71da91967a..4e9f00e7dc 100644
--- a/migration/migration-hmp-cmds.c
+++ b/migration/migration-hmp-cmds.c
@@ -636,23 +636,6 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
     hmp_handle_error(mon, err);
 }
 
-void hmp_client_migrate_info(Monitor *mon, const QDict *qdict)
-{
-    Error *err = NULL;
-    const char *protocol = qdict_get_str(qdict, "protocol");
-    const char *hostname = qdict_get_str(qdict, "hostname");
-    bool has_port        = qdict_haskey(qdict, "port");
-    int port             = qdict_get_try_int(qdict, "port", -1);
-    bool has_tls_port    = qdict_haskey(qdict, "tls-port");
-    int tls_port         = qdict_get_try_int(qdict, "tls-port", -1);
-    const char *cert_subject = qdict_get_try_str(qdict, "cert-subject");
-
-    qmp_client_migrate_info(protocol, hostname,
-                            has_port, port, has_tls_port, tls_port,
-                            cert_subject, &err);
-    hmp_handle_error(mon, err);
-}
-
 void hmp_migrate_start_postcopy(Monitor *mon, const QDict *qdict)
 {
     Error *err = NULL;
diff --git a/migration/migration.c b/migration/migration.c
index a867631ab0..80bc83f971 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -63,7 +63,6 @@
 #include "sysemu/cpus.h"
 #include "yank_functions.h"
 #include "sysemu/qtest.h"
-#include "ui/qemu-spice.h"
 
 #define MAX_THROTTLE  (128 << 20)      /* Migration transfer speed throttling */
 
@@ -1018,35 +1017,6 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
     return params;
 }
 
-void qmp_client_migrate_info(const char *protocol, const char *hostname,
-                             bool has_port, int64_t port,
-                             bool has_tls_port, int64_t tls_port,
-                             const char *cert_subject,
-                             Error **errp)
-{
-    if (strcmp(protocol, "spice") == 0) {
-        if (!qemu_using_spice(errp)) {
-            return;
-        }
-
-        if (!has_port && !has_tls_port) {
-            error_setg(errp, QERR_MISSING_PARAMETER, "port/tls-port");
-            return;
-        }
-
-        if (qemu_spice.migrate_info(hostname,
-                                    has_port ? port : -1,
-                                    has_tls_port ? tls_port : -1,
-                                    cert_subject)) {
-            error_setg(errp, "Could not set up display for migration");
-            return;
-        }
-        return;
-    }
-
-    error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "protocol", "'spice'");
-}
-
 AnnounceParameters *migrate_announce_params(void)
 {
     static AnnounceParameters ap;
diff --git a/qapi/migration.json b/qapi/migration.json
index c84fa10e86..2c35b7b9cf 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -1203,34 +1203,6 @@
 { 'command': 'query-migrate-parameters',
   'returns': 'MigrationParameters' }
 
-##
-# @client_migrate_info:
-#
-# Set migration information for remote display.  This makes the server
-# ask the client to automatically reconnect using the new parameters
-# once migration finished successfully.  Only implemented for SPICE.
-#
-# @protocol: must be "spice"
-# @hostname: migration target hostname
-# @port: spice tcp port for plaintext channels
-# @tls-port: spice tcp port for tls-secured channels
-# @cert-subject: server certificate subject
-#
-# Since: 0.14
-#
-# Example:
-#
-# -> { "execute": "client_migrate_info",
-#      "arguments": { "protocol": "spice",
-#                     "hostname": "virt42.lab.kraxel.org",
-#                     "port": 1234 } }
-# <- { "return": {} }
-#
-##
-{ 'command': 'client_migrate_info',
-  'data': { 'protocol': 'str', 'hostname': 'str', '*port': 'int',
-            '*tls-port': 'int', '*cert-subject': 'str' } }
-
 ##
 # @migrate-start-postcopy:
 #
diff --git a/qapi/ui.json b/qapi/ui.json
index 98322342f7..7ddd27a932 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -1554,3 +1554,31 @@
 { 'command': 'display-update',
   'data': 'DisplayUpdateOptions',
   'boxed' : true }
+
+##
+# @client_migrate_info:
+#
+# Set migration information for remote display.  This makes the server
+# ask the client to automatically reconnect using the new parameters
+# once migration finished successfully.  Only implemented for SPICE.
+#
+# @protocol: must be "spice"
+# @hostname: migration target hostname
+# @port: spice tcp port for plaintext channels
+# @tls-port: spice tcp port for tls-secured channels
+# @cert-subject: server certificate subject
+#
+# Since: 0.14
+#
+# Example:
+#
+# -> { "execute": "client_migrate_info",
+#      "arguments": { "protocol": "spice",
+#                     "hostname": "virt42.lab.kraxel.org",
+#                     "port": 1234 } }
+# <- { "return": {} }
+#
+##
+{ 'command': 'client_migrate_info',
+  'data': { 'protocol': 'str', 'hostname': 'str', '*port': 'int',
+            '*tls-port': 'int', '*cert-subject': 'str' } }
diff --git a/ui/ui-hmp-cmds.c b/ui/ui-hmp-cmds.c
index 5c456ecc02..c671389473 100644
--- a/ui/ui-hmp-cmds.c
+++ b/ui/ui-hmp-cmds.c
@@ -458,3 +458,20 @@ hmp_screendump(Monitor *mon, const QDict *qdict)
 end:
     hmp_handle_error(mon, err);
 }
+
+void hmp_client_migrate_info(Monitor *mon, const QDict *qdict)
+{
+    Error *err = NULL;
+    const char *protocol = qdict_get_str(qdict, "protocol");
+    const char *hostname = qdict_get_str(qdict, "hostname");
+    bool has_port        = qdict_haskey(qdict, "port");
+    int port             = qdict_get_try_int(qdict, "port", -1);
+    bool has_tls_port    = qdict_haskey(qdict, "tls-port");
+    int tls_port         = qdict_get_try_int(qdict, "tls-port", -1);
+    const char *cert_subject = qdict_get_try_str(qdict, "cert-subject");
+
+    qmp_client_migrate_info(protocol, hostname,
+                            has_port, port, has_tls_port, tls_port,
+                            cert_subject, &err);
+    hmp_handle_error(mon, err);
+}
diff --git a/ui/ui-qmp-cmds.c b/ui/ui-qmp-cmds.c
index dbc4afcd73..a37a7024f3 100644
--- a/ui/ui-qmp-cmds.c
+++ b/ui/ui-qmp-cmds.c
@@ -175,3 +175,32 @@ void qmp_display_update(DisplayUpdateOptions *arg, Error **errp)
         abort();
     }
 }
+
+void qmp_client_migrate_info(const char *protocol, const char *hostname,
+                             bool has_port, int64_t port,
+                             bool has_tls_port, int64_t tls_port,
+                             const char *cert_subject,
+                             Error **errp)
+{
+    if (strcmp(protocol, "spice") == 0) {
+        if (!qemu_using_spice(errp)) {
+            return;
+        }
+
+        if (!has_port && !has_tls_port) {
+            error_setg(errp, QERR_MISSING_PARAMETER, "port/tls-port");
+            return;
+        }
+
+        if (qemu_spice.migrate_info(hostname,
+                                    has_port ? port : -1,
+                                    has_tls_port ? tls_port : -1,
+                                    cert_subject)) {
+            error_setg(errp, "Could not set up display for migration");
+            return;
+        }
+        return;
+    }
+
+    error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "protocol", "'spice'");
+}
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 04/30] migration: Create migrate_cap_set()
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (2 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 03/30] spice: move client_migrate_info command to ui/ Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 05/30] migration: Create options.c Juan Quintela
                   ` (26 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Fabiano Rosas

And remove the convoluted use of qmp_migrate_set_capabilities() to
enable disable MIGRATION_CAPABILITY_BLOCK.

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
---
 migration/migration.c | 34 ++++++++++++++++------------------
 1 file changed, 16 insertions(+), 18 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index 80bc83f971..e667424513 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1912,25 +1912,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)
@@ -1942,7 +1941,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;
     }
@@ -2429,8 +2428,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] 32+ messages in thread

* [PULL 05/30] migration: Create options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (3 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 04/30] migration: Create migrate_cap_set() Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 06/30] migration: Move migrate_colo_enabled() to options.c Juan Quintela
                   ` (25 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Dr . David Alan Gilbert

We move there all capabilities helpers from migration.c.

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

---

Following David advise:
- looked through the history, capabilities are newer than 2012, so we
  can remove that bit of the header.
- This part is posterior to Anthony.
  Original Author is Orit. Once there,
  I put myself.  Peter Xu also did quite a bit of work here.
  Anyone else wants/needs to be there?  I didn't search too hard
  because nobody asked before to be added.

What do you think?
---
 hw/virtio/virtio-balloon.c     |   1 +
 migration/block-dirty-bitmap.c |   1 +
 migration/block.c              |   1 +
 migration/colo.c               |   1 +
 migration/meson.build          |   1 +
 migration/migration.c          | 109 +----------------------------
 migration/migration.h          |  12 ----
 migration/options.c            | 124 +++++++++++++++++++++++++++++++++
 migration/options.h            |  32 +++++++++
 migration/postcopy-ram.c       |   1 +
 migration/ram.c                |   1 +
 migration/savevm.c             |   1 +
 migration/socket.c             |   1 +
 13 files changed, 166 insertions(+), 120 deletions(-)
 create mode 100644 migration/options.c
 create mode 100644 migration/options.h

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 b2497bbd32..4b167fa5cf 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/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',
diff --git a/migration/migration.c b/migration/migration.c
index e667424513..d8c9166200 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.
@@ -2525,56 +2517,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;
@@ -2620,33 +2567,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;
@@ -2665,15 +2585,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;
@@ -2785,24 +2696,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/migration.h b/migration/migration.h
index 04e0860b4e..a25fed6ef0 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -449,16 +449,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);
@@ -487,9 +478,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.c b/migration/options.c
new file mode 100644
index 0000000000..88a9a45913
--- /dev/null
+++ b/migration/options.c
@@ -0,0 +1,124 @@
+/*
+ * 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.
+ */
+
+#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/options.h b/migration/options.h
new file mode 100644
index 0000000000..0dfa0af245
--- /dev/null
+++ b/migration/options.h
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+
+#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/migration/postcopy-ram.c b/migration/postcopy-ram.c
index d7b48dd920..0711500036 100644
--- a/migration/postcopy-ram.c
+++ b/migration/postcopy-ram.c
@@ -37,6 +37,7 @@
 #include "tls.h"
 #include "qemu/userfaultfd.h"
 #include "qemu/mmap-alloc.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 229714045a..912ccd89fa 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;
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 06/30] migration: Move migrate_colo_enabled() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (4 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 05/30] migration: Create options.c Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 07/30] migration: Move migrate_use_compression() " Juan Quintela
                   ` (24 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

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>
---
 migration/migration.c | 16 +++++-----------
 migration/migration.h |  1 -
 migration/options.c   |  6 ++++++
 migration/options.h   |  1 +
 4 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index d8c9166200..7dfc31eeb8 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2411,7 +2411,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;
         }
@@ -3299,7 +3299,7 @@ static void migration_completion(MigrationState *s)
                                             MIGRATION_STATUS_DEVICE);
             }
             if (ret >= 0) {
-                s->block_inactive = !migrate_colo_enabled();
+                s->block_inactive = !migrate_colo();
                 qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX);
                 ret = qemu_savevm_state_complete_precopy(s->to_dst_file, false,
                                                          s->block_inactive);
@@ -3352,7 +3352,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);
@@ -3431,12 +3431,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,
@@ -3767,7 +3761,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__);
         }
@@ -3963,7 +3957,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/migration.h b/migration/migration.h
index a25fed6ef0..42f0c68b6f 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -463,7 +463,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.c b/migration/options.c
index 88a9a45913..bd33c5da0a 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -33,6 +33,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;
diff --git a/migration/options.h b/migration/options.h
index 0dfa0af245..2a0ee61ff8 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -18,6 +18,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);
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 07/30] migration: Move migrate_use_compression() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (5 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 06/30] migration: Move migrate_colo_enabled() to options.c Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 08/30] migration: Move migrate_use_events() " Juan Quintela
                   ` (23 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

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.c | 11 +----------
 migration/migration.h |  1 -
 migration/options.c   |  9 +++++++++
 migration/options.h   |  1 +
 migration/ram.c       | 16 ++++++++--------
 5 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index 7dfc31eeb8..2c409fa27c 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1133,7 +1133,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;
@@ -2522,15 +2522,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/migration.h b/migration/migration.h
index 42f0c68b6f..77aa91c840 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -471,7 +471,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.c b/migration/options.c
index bd33c5da0a..fa7a13d3dc 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -39,6 +39,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/options.h b/migration/options.h
index 2a0ee61ff8..da2193fd94 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -19,6 +19,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/ram.c b/migration/ram.c
index 912ccd89fa..d050d0c5fd 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -586,7 +586,7 @@ static void compress_threads_save_cleanup(void)
 {
     int i, thread_count;
 
-    if (!migrate_use_compression() || !comp_param) {
+    if (!migrate_compress() || !comp_param) {
         return;
     }
 
@@ -625,7 +625,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();
@@ -1155,7 +1155,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;
@@ -2270,7 +2270,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;
     }
 
@@ -3734,7 +3734,7 @@ static int wait_for_decompress_done(void)
 {
     int idx, thread_count;
 
-    if (!migrate_use_compression()) {
+    if (!migrate_compress()) {
         return 0;
     }
 
@@ -3753,7 +3753,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();
@@ -3794,7 +3794,7 @@ static int compress_threads_load_setup(QEMUFile *f)
 {
     int i, thread_count;
 
-    if (!migrate_use_compression()) {
+    if (!migrate_compress()) {
         return 0;
     }
 
@@ -4260,7 +4260,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] 32+ messages in thread

* [PULL 08/30] migration: Move migrate_use_events() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (6 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 07/30] migration: Move migrate_use_compression() " Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 09/30] migration: Move migrate_use_multifd() " Juan Quintela
                   ` (22 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

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>
---
 migration/migration.c | 11 +----------
 migration/migration.h |  1 -
 migration/options.c   |  9 +++++++++
 migration/options.h   |  1 +
 migration/ram.c       |  2 +-
 5 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index 2c409fa27c..16800a624a 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);
     }
 }
@@ -2558,15 +2558,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/migration.h b/migration/migration.h
index 77aa91c840..bd06520c19 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -475,7 +475,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.c b/migration/options.c
index fa7a13d3dc..d2219ee0e4 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -57,6 +57,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/options.h b/migration/options.h
index da2193fd94..b998024eba 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -21,6 +21,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/ram.c b/migration/ram.c
index d050d0c5fd..ee454a3849 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1246,7 +1246,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()) {
         uint64_t generation = stat64_get(&ram_counters.dirty_sync_count);
         qapi_event_send_migration_pass(generation);
     }
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 09/30] migration: Move migrate_use_multifd() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (7 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 08/30] migration: Move migrate_use_events() " Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 10/30] migration: Move migrate_use_zero_copy_send() " Juan Quintela
                   ` (21 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

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>
---
 migration/migration.c | 19 +++++--------------
 migration/migration.h |  1 -
 migration/multifd.c   | 16 ++++++++--------
 migration/options.c   |  9 +++++++++
 migration/options.h   |  1 +
 migration/ram.c       |  2 +-
 migration/socket.c    |  2 +-
 7 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index 16800a624a..77ceacc59f 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();
     }
 
@@ -2558,15 +2558,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/migration.h b/migration/migration.h
index bd06520c19..49c0e13f41 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -449,7 +449,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/multifd.c b/migration/multifd.c
index 903df2117b..6807328189 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) {
@@ -911,7 +911,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;
     }
 
@@ -1016,7 +1016,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);
     }
 }
@@ -1025,7 +1025,7 @@ void multifd_load_cleanup(void)
 {
     int i;
 
-    if (!migrate_use_multifd()) {
+    if (!migrate_multifd()) {
         return;
     }
     multifd_recv_terminate_threads(NULL);
@@ -1072,7 +1072,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++) {
@@ -1170,7 +1170,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;
     }
 
@@ -1216,7 +1216,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 d2219ee0e4..58673fc101 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -84,6 +84,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/options.h b/migration/options.h
index b998024eba..d07269ee38 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -24,6 +24,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/ram.c b/migration/ram.c
index ee454a3849..859dd7b63f 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -2362,7 +2362,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] 32+ messages in thread

* [PULL 10/30] migration: Move migrate_use_zero_copy_send() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (8 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 09/30] migration: Move migrate_use_multifd() " Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 11/30] migration: Move migrate_use_xbzrle() " Juan Quintela
                   ` (20 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

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>
---
 migration/migration.c | 13 +------------
 migration/migration.h |  5 -----
 migration/multifd.c   |  8 ++++----
 migration/options.c   |  9 +++++++++
 migration/options.h   |  1 +
 migration/socket.c    |  2 +-
 6 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index 77ceacc59f..fbb61819ca 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1609,7 +1609,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,
@@ -2595,17 +2595,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/migration.h b/migration/migration.h
index 49c0e13f41..c939f82d53 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -454,11 +454,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/multifd.c b/migration/multifd.c
index 6807328189..cce3ad6988 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());
 
@@ -945,7 +945,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 58673fc101..f357c99996 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -155,3 +155,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/options.h b/migration/options.h
index d07269ee38..ad22f4d24a 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -32,5 +32,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/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] 32+ messages in thread

* [PULL 11/30] migration: Move migrate_use_xbzrle() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (9 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 10/30] migration: Move migrate_use_zero_copy_send() " Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 12/30] migration: Move migrate_use_block() " Juan Quintela
                   ` (19 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

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>
---
 migration/migration.c | 11 +----------
 migration/migration.h |  1 -
 migration/options.c   |  9 +++++++++
 migration/options.h   |  1 +
 migration/ram.c       | 10 +++++-----
 5 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index fbb61819ca..abb820cdb9 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1122,7 +1122,7 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
     info->ram->downtime_bytes = stat64_get(&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;
@@ -2604,15 +2604,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/migration.h b/migration/migration.h
index c939f82d53..e2bb5b1e2f 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -455,7 +455,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.c b/migration/options.c
index f357c99996..25264c500e 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -147,6 +147,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/options.h b/migration/options.h
index ad22f4d24a..8f76a88329 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -31,6 +31,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/ram.c b/migration/ram.c
index 859dd7b63f..4576d0d849 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);
     }
 }
@@ -1137,7 +1137,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 -
@@ -1626,7 +1626,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;
             }
         }
@@ -2979,7 +2979,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] 32+ messages in thread

* [PULL 12/30] migration: Move migrate_use_block() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (10 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 11/30] migration: Move migrate_use_xbzrle() " Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 13/30] migration: Move migrate_use_return() " Juan Quintela
                   ` (18 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

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>
---
 migration/block.c     |  2 +-
 migration/migration.c | 11 +----------
 migration/migration.h |  1 -
 migration/options.c   |  9 +++++++++
 migration/options.h   |  1 +
 migration/savevm.c    |  2 +-
 6 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/migration/block.c b/migration/block.c
index 4b167fa5cf..f0977217cf 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -1001,7 +1001,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 abb820cdb9..1f8ba94fc4 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2415,7 +2415,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;
@@ -2622,15 +2622,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/migration.h b/migration/migration.h
index e2bb5b1e2f..d4b68b08a5 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -457,7 +457,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.c b/migration/options.c
index 25264c500e..fe1eadeed6 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -33,6 +33,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/options.h b/migration/options.h
index 8f76a88329..e985a5233e 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -18,6 +18,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/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] 32+ messages in thread

* [PULL 13/30] migration: Move migrate_use_return() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (11 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 12/30] migration: Move migrate_use_block() " Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 14/30] migration: Create migrate_rdma_pin_all() function Juan Quintela
                   ` (17 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

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>
---
 migration/migration.c | 11 +----------
 migration/migration.h |  1 -
 migration/options.c   |  9 +++++++++
 migration/options.h   |  1 +
 migration/rdma.c      |  6 +++---
 5 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index 1f8ba94fc4..b03c4aa650 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2622,15 +2622,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;
@@ -4171,7 +4162,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/migration.h b/migration/migration.h
index d4b68b08a5..24184622a8 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -459,7 +459,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.c b/migration/options.c
index fe1eadeed6..2003e413da 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -147,6 +147,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;
diff --git a/migration/options.h b/migration/options.h
index e985a5233e..316efd1063 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -31,6 +31,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/rdma.c b/migration/rdma.c
index f35f021963..bf55e2f163 100644
--- a/migration/rdma.c
+++ b/migration/rdma.c
@@ -3373,7 +3373,7 @@ static int qemu_rdma_accept(RDMAContext *rdma)
      * initialize the RDMAContext for return path for postcopy after first
      * connection request reached.
      */
-    if ((migrate_postcopy() || migrate_use_return_path())
+    if ((migrate_postcopy() || migrate_return_path())
         && !rdma->is_return_path) {
         rdma_return_path = qemu_rdma_data_init(rdma->host_port, NULL);
         if (rdma_return_path == NULL) {
@@ -3456,7 +3456,7 @@ static int qemu_rdma_accept(RDMAContext *rdma)
     }
 
     /* Accept the second connection request for return path */
-    if ((migrate_postcopy() || migrate_use_return_path())
+    if ((migrate_postcopy() || migrate_return_path())
         && !rdma->is_return_path) {
         qemu_set_fd_handler(rdma->channel->fd, rdma_accept_incoming_migration,
                             NULL,
@@ -4193,7 +4193,7 @@ void rdma_start_outgoing_migration(void *opaque,
     }
 
     /* RDMA postcopy need a separate queue pair for return path */
-    if (migrate_postcopy() || migrate_use_return_path()) {
+    if (migrate_postcopy() || migrate_return_path()) {
         rdma_return_path = qemu_rdma_data_init(host_port, errp);
 
         if (rdma_return_path == NULL) {
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 14/30] migration: Create migrate_rdma_pin_all() function
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (12 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 13/30] migration: Move migrate_use_return() " Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 15/30] migration: Move migrate_caps_check() to options.c Juan Quintela
                   ` (16 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>

---

Fixed missing space after comma (fabiano)
---
 migration/options.c | 7 +++++++
 migration/options.h | 1 +
 migration/rdma.c    | 6 +++---
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/migration/options.c b/migration/options.c
index 2003e413da..9c9b8e5863 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -138,6 +138,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/options.h b/migration/options.h
index 316efd1063..25c002b37a 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -30,6 +30,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/rdma.c b/migration/rdma.c
index bf55e2f163..0af5e944f0 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>
 
 /*
@@ -4178,8 +4179,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;
@@ -4201,7 +4201,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] 32+ messages in thread

* [PULL 15/30] migration: Move migrate_caps_check() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (13 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 14/30] migration: Create migrate_rdma_pin_all() function Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 16/30] migration: Move qmp_query_migrate_capabilities() " Juan Quintela
                   ` (15 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
 migration/migration.c | 190 -----------------------------------------
 migration/options.c   | 192 ++++++++++++++++++++++++++++++++++++++++++
 migration/options.h   |   4 +
 3 files changed, 196 insertions(+), 190 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index b03c4aa650..431e3db278 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 */
@@ -1235,163 +1202,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 9c9b8e5863..367c930f46 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -12,7 +12,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)
@@ -198,3 +201,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;
+}
diff --git a/migration/options.h b/migration/options.h
index 25c002b37a..e779f14161 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -38,4 +38,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
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 16/30] migration: Move qmp_query_migrate_capabilities() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (14 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 15/30] migration: Move migrate_caps_check() to options.c Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 17/30] migration: Move qmp_migrate_set_capabilities() " Juan Quintela
                   ` (14 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
 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 431e3db278..0004c163a6 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 367c930f46..ff621bdeb3 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -13,6 +13,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"
@@ -390,3 +391,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] 32+ messages in thread

* [PULL 17/30] migration: Move qmp_migrate_set_capabilities() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (15 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 16/30] migration: Move qmp_query_migrate_capabilities() " Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 18/30] migration: Move migrate_cap_set() " Juan Quintela
                   ` (13 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
 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 0004c163a6..b198f4acf5 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1222,32 +1222,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 ff621bdeb3..4cbe77e35a 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -413,3 +413,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] 32+ messages in thread

* [PULL 18/30] migration: Move migrate_cap_set() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (16 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 17/30] migration: Move qmp_migrate_set_capabilities() " Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 19/30] migration: Move parameters functions to option.c Juan Quintela
                   ` (12 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
 migration/migration.c | 20 --------------------
 migration/options.c   | 21 +++++++++++++++++++++
 migration/options.h   |  1 +
 3 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index b198f4acf5..ddd3fc361f 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1666,26 +1666,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 4cbe77e35a..f3b2d6e482 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -14,6 +14,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"
@@ -392,6 +393,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;
diff --git a/migration/options.h b/migration/options.h
index e779f14161..5979e4ff90 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -41,5 +41,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
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 19/30] migration: Move parameters functions to option.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (17 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 18/30] migration: Move migrate_cap_set() " Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 20/30] migration: Use migrate_max_postcopy_bandwidth() Juan Quintela
                   ` (11 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
 migration/migration.c    | 91 ---------------------------------------
 migration/migration.h    | 11 -----
 migration/multifd-zlib.c |  1 +
 migration/multifd-zstd.c |  1 +
 migration/options.c      | 93 ++++++++++++++++++++++++++++++++++++++++
 migration/options.h      | 13 ++++++
 6 files changed, 108 insertions(+), 102 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index ddd3fc361f..f19ab592ae 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2264,79 +2264,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;
@@ -2346,24 +2273,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/migration.h b/migration/migration.h
index 24184622a8..8451e5f2fe 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -449,24 +449,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/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 f3b2d6e482..8d15be858c 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -460,3 +460,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;
+}
diff --git a/migration/options.h b/migration/options.h
index 5979e4ff90..b24ee92283 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -43,4 +43,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
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 20/30] migration: Use migrate_max_postcopy_bandwidth()
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (18 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 19/30] migration: Move parameters functions to option.c Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 21/30] migration: Move migrate_use_block_incremental() to option.c Juan Quintela
                   ` (10 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
 migration/migration.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/migration/migration.c b/migration/migration.c
index f19ab592ae..4a9e5310f1 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3795,7 +3795,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] 32+ messages in thread

* [PULL 21/30] migration: Move migrate_use_block_incremental() to option.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (19 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 20/30] migration: Use migrate_max_postcopy_bandwidth() Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 22/30] migration: Create migrate_throttle_trigger_threshold() Juan Quintela
                   ` (9 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela

To be consistent with every other parameter, rename to
migrate_block_incremental().

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
 migration/block.c     |  2 +-
 migration/migration.c | 11 +----------
 migration/migration.h |  1 -
 migration/options.c   |  9 +++++++++
 migration/options.h   |  1 +
 5 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/migration/block.c b/migration/block.c
index f0977217cf..6d532ac7a2 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -417,7 +417,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 4a9e5310f1..5ab1e48f57 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2157,7 +2157,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;
@@ -2273,15 +2273,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/migration.h b/migration/migration.h
index 8451e5f2fe..86051af132 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -451,7 +451,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.c b/migration/options.c
index 8d15be858c..2b6d88b4b9 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -463,6 +463,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;
diff --git a/migration/options.h b/migration/options.h
index b24ee92283..96d5a8e6e4 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -45,6 +45,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);
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 22/30] migration: Create migrate_throttle_trigger_threshold()
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (20 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 21/30] migration: Move migrate_use_block_incremental() to option.c Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 23/30] migration: Create migrate_checkpoint_delay() Juan Quintela
                   ` (8 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Fabiano Rosas

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
---
 migration/options.c | 9 +++++++++
 migration/options.h | 1 +
 migration/ram.c     | 3 +--
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/migration/options.c b/migration/options.c
index 2b6d88b4b9..b9f3815f7e 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -554,6 +554,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/options.h b/migration/options.h
index 96d5a8e6e4..aa54443353 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -55,6 +55,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/ram.c b/migration/ram.c
index 4576d0d849..e82cee97c3 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1178,8 +1178,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] 32+ messages in thread

* [PULL 23/30] migration: Create migrate_checkpoint_delay()
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (21 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 22/30] migration: Create migrate_throttle_trigger_threshold() Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 24/30] migration: Create migrate_max_cpu_throttle() Juan Quintela
                   ` (7 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Fabiano Rosas

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
---
 migration/colo.c    | 5 ++---
 migration/options.c | 9 +++++++++
 migration/options.h | 1 +
 3 files changed, 12 insertions(+), 3 deletions(-)

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 b9f3815f7e..0e102e5700 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -472,6 +472,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;
diff --git a/migration/options.h b/migration/options.h
index aa54443353..adc2879bbb 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -46,6 +46,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);
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 24/30] migration: Create migrate_max_cpu_throttle()
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (22 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 23/30] migration: Create migrate_checkpoint_delay() Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 25/30] migration: Move migrate_announce_params() to option.c Juan Quintela
                   ` (6 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Fabiano Rosas

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
---
 migration/migration.h | 2 --
 migration/options.c   | 9 +++++++++
 migration/options.h   | 1 +
 migration/ram.c       | 2 +-
 4 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/migration/migration.h b/migration/migration.h
index 86051af132..3ae938b19c 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -451,8 +451,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.c b/migration/options.c
index 0e102e5700..2cb04fbbd1 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -517,6 +517,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/options.h b/migration/options.h
index adc2879bbb..72b1a320b7 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -51,6 +51,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/ram.c b/migration/ram.c
index e82cee97c3..5c786513ef 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -715,7 +715,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] 32+ messages in thread

* [PULL 25/30] migration: Move migrate_announce_params() to option.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (23 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 24/30] migration: Create migrate_max_cpu_throttle() Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 26/30] migration: Create migrate_cpu_throttle_initial() " Juan Quintela
                   ` (5 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Fabiano Rosas

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>

---

Fix extra whitespace (fabiano)
---
 migration/migration.c | 14 --------------
 migration/options.c   | 17 +++++++++++++++++
 2 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index 5ab1e48f57..dccad95a55 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 2cb04fbbd1..418aafac64 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -16,6 +16,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"
@@ -589,3 +590,19 @@ 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] 32+ messages in thread

* [PULL 26/30] migration: Create migrate_cpu_throttle_initial() to option.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (24 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 25/30] migration: Move migrate_announce_params() to option.c Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 27/30] migration: Create migrate_cpu_throttle_increment() function Juan Quintela
                   ` (4 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Fabiano Rosas

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
---
 migration/options.c | 9 +++++++++
 migration/options.h | 1 +
 migration/ram.c     | 2 +-
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/migration/options.c b/migration/options.c
index 418aafac64..f7fb6999f7 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -509,6 +509,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/options.h b/migration/options.h
index 72b1a320b7..fd8b91d767 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -50,6 +50,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/ram.c b/migration/ram.c
index 5c786513ef..5e855d5c22 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -712,7 +712,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] 32+ messages in thread

* [PULL 27/30] migration: Create migrate_cpu_throttle_increment() function
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (25 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 26/30] migration: Create migrate_cpu_throttle_initial() " Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 28/30] migration: Create migrate_cpu_throttle_tailslow() function Juan Quintela
                   ` (3 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Fabiano Rosas

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
---
 migration/options.c | 9 +++++++++
 migration/options.h | 1 +
 migration/ram.c     | 2 +-
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/migration/options.c b/migration/options.c
index f7fb6999f7..31435d2b45 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -509,6 +509,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/options.h b/migration/options.h
index fd8b91d767..49b29bdafd 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -50,6 +50,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/ram.c b/migration/ram.c
index 5e855d5c22..5645745a42 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -713,7 +713,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] 32+ messages in thread

* [PULL 28/30] migration: Create migrate_cpu_throttle_tailslow() function
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (26 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 27/30] migration: Create migrate_cpu_throttle_increment() function Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 29/30] migration: Move migrate_postcopy() to options.c Juan Quintela
                   ` (2 subsequent siblings)
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Fabiano Rosas

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
---
 migration/options.c | 9 +++++++++
 migration/options.h | 1 +
 migration/ram.c     | 3 +--
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/migration/options.c b/migration/options.c
index 31435d2b45..615534c151 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -527,6 +527,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/options.h b/migration/options.h
index 49b29bdafd..99f6bbd7a1 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -52,6 +52,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/ram.c b/migration/ram.c
index 5645745a42..01356f60a4 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -711,10 +711,9 @@ static size_t save_page_header(PageSearchStatus *pss, QEMUFile *f,
 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] 32+ messages in thread

* [PULL 29/30] migration: Move migrate_postcopy() to options.c
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (27 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 28/30] migration: Create migrate_cpu_throttle_tailslow() function Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 13:27 ` [PULL 30/30] migration: Create migrate_max_bandwidth() function Juan Quintela
  2023-04-24 16:35 ` [PULL 00/30] Migration 20230424 patches Richard Henderson
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Fabiano Rosas

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
---
 migration/migration.c | 5 -----
 migration/migration.h | 2 --
 migration/options.c   | 8 ++++++++
 migration/options.h   | 9 +++++++++
 4 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index dccad95a55..f20d7bcc06 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2245,11 +2245,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();
-}
-
 int migrate_use_tls(void)
 {
     MigrationState *s;
diff --git a/migration/migration.h b/migration/migration.h
index 3ae938b19c..dcf906868d 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -447,8 +447,6 @@ bool migration_is_blocked(Error **errp);
 bool migration_in_postcopy(void);
 MigrationState *migrate_get_current(void);
 
-bool migrate_postcopy(void);
-
 int migrate_use_tls(void);
 
 uint64_t ram_get_total_transferred_pages(void);
diff --git a/migration/options.c b/migration/options.c
index 615534c151..8bd2d949ae 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -204,6 +204,14 @@ bool migrate_zero_copy_send(void)
 
     return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
 }
+
+/* pseudo capabilities */
+
+bool migrate_postcopy(void)
+{
+    return migrate_postcopy_ram() || migrate_dirty_bitmaps();
+}
+
 typedef enum WriteTrackingSupport {
     WT_SUPPORT_UNKNOWN = 0,
     WT_SUPPORT_ABSENT,
diff --git a/migration/options.h b/migration/options.h
index 99f6bbd7a1..093bc907a1 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -38,6 +38,15 @@ bool migrate_xbzrle(void);
 bool migrate_zero_blocks(void);
 bool migrate_zero_copy_send(void);
 
+/*
+ * pseudo capabilities
+ *
+ * These are functions that are used in a similar way to capabilities
+ * check, but they are not a capability.
+ */
+
+bool migrate_postcopy(void);
+
 /* capabilities helpers */
 
 bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp);
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [PULL 30/30] migration: Create migrate_max_bandwidth() function
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (28 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 29/30] migration: Move migrate_postcopy() to options.c Juan Quintela
@ 2023-04-24 13:27 ` Juan Quintela
  2023-04-24 16:35 ` [PULL 00/30] Migration 20230424 patches Richard Henderson
  30 siblings, 0 replies; 32+ messages in thread
From: Juan Quintela @ 2023-04-24 13:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hailiang Zhang, Marc-André Lureau, Fam Zheng, Eric Blake,
	John Snow, Vladimir Sementsov-Ogievskiy, Gerd Hoffmann, Peter Xu,
	Markus Armbruster, Leonardo Bras, David Hildenbrand,
	Stefan Hajnoczi, Michael S. Tsirkin, qemu-block, Juan Quintela,
	Fabiano Rosas

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
---
 migration/migration.c | 70 +-------------------------------------
 migration/options.c   | 79 +++++++++++++++++++++++++++++++++++++++++++
 migration/options.h   |  1 +
 3 files changed, 81 insertions(+), 69 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index f20d7bcc06..53dd59f6f6 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)
@@ -3771,7 +3703,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 8bd2d949ae..8e8753d9be 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -12,8 +12,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"
@@ -562,6 +564,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;
@@ -641,3 +652,71 @@ 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;
+}
diff --git a/migration/options.h b/migration/options.h
index 093bc907a1..1b78fa9f3d 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -64,6 +64,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);
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 32+ messages in thread

* Re: [PULL 00/30] Migration 20230424 patches
  2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
                   ` (29 preceding siblings ...)
  2023-04-24 13:27 ` [PULL 30/30] migration: Create migrate_max_bandwidth() function Juan Quintela
@ 2023-04-24 16:35 ` Richard Henderson
  30 siblings, 0 replies; 32+ messages in thread
From: Richard Henderson @ 2023-04-24 16:35 UTC (permalink / raw)
  To: Juan Quintela, qemu-devel

On 4/24/23 14:27, Juan Quintela wrote:
> The following changes since commit 81072abf1575b11226b3779af76dc71dfa85ee5d:
> 
>    Merge tag 'migration-20230420-pull-request' ofhttps://gitlab.com/juan.quintela/qemu  into staging (2023-04-24 12:06:17 +0100)
> 
> are available in the Git repository at:
> 
>    https://gitlab.com/juan.quintela/qemu.git  tags/migration-20230424-pull-request
> 
> for you to fetch changes up to 9c894df3a37d675652390f7dbbe2f65b7bad7efa:
> 
>    migration: Create migrate_max_bandwidth() function (2023-04-24 15:01:47 +0200)
> 
> ----------------------------------------------------------------
> Migration Pull request
> 
> Everything that was reviewed since last PULL request:
> - fix to control flow (eric)
> - rearrange of hmp commands (juan)
> - Make capabilities more consistent and coherent (juan)
>    Not all of them reviewed yet, so only the ones reviewed.
> 
> Later, Juan.
> 
> PD.  I am waiting to finish review of the compression fixes to send
> them.
> 
> ----------------------------------------------------------------

Applied, thanks.  Please update https://wiki.qemu.org/ChangeLog/8.1 as appropriate.


r~



^ permalink raw reply	[flat|nested] 32+ messages in thread

end of thread, other threads:[~2023-04-24 16:36 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-24 13:27 [PULL 00/30] Migration 20230424 patches Juan Quintela
2023-04-24 13:27 ` [PULL 01/30] migration: Minor control flow simplification Juan Quintela
2023-04-24 13:27 ` [PULL 02/30] migration: move migration_global_dump() to migration-hmp-cmds.c Juan Quintela
2023-04-24 13:27 ` [PULL 03/30] spice: move client_migrate_info command to ui/ Juan Quintela
2023-04-24 13:27 ` [PULL 04/30] migration: Create migrate_cap_set() Juan Quintela
2023-04-24 13:27 ` [PULL 05/30] migration: Create options.c Juan Quintela
2023-04-24 13:27 ` [PULL 06/30] migration: Move migrate_colo_enabled() to options.c Juan Quintela
2023-04-24 13:27 ` [PULL 07/30] migration: Move migrate_use_compression() " Juan Quintela
2023-04-24 13:27 ` [PULL 08/30] migration: Move migrate_use_events() " Juan Quintela
2023-04-24 13:27 ` [PULL 09/30] migration: Move migrate_use_multifd() " Juan Quintela
2023-04-24 13:27 ` [PULL 10/30] migration: Move migrate_use_zero_copy_send() " Juan Quintela
2023-04-24 13:27 ` [PULL 11/30] migration: Move migrate_use_xbzrle() " Juan Quintela
2023-04-24 13:27 ` [PULL 12/30] migration: Move migrate_use_block() " Juan Quintela
2023-04-24 13:27 ` [PULL 13/30] migration: Move migrate_use_return() " Juan Quintela
2023-04-24 13:27 ` [PULL 14/30] migration: Create migrate_rdma_pin_all() function Juan Quintela
2023-04-24 13:27 ` [PULL 15/30] migration: Move migrate_caps_check() to options.c Juan Quintela
2023-04-24 13:27 ` [PULL 16/30] migration: Move qmp_query_migrate_capabilities() " Juan Quintela
2023-04-24 13:27 ` [PULL 17/30] migration: Move qmp_migrate_set_capabilities() " Juan Quintela
2023-04-24 13:27 ` [PULL 18/30] migration: Move migrate_cap_set() " Juan Quintela
2023-04-24 13:27 ` [PULL 19/30] migration: Move parameters functions to option.c Juan Quintela
2023-04-24 13:27 ` [PULL 20/30] migration: Use migrate_max_postcopy_bandwidth() Juan Quintela
2023-04-24 13:27 ` [PULL 21/30] migration: Move migrate_use_block_incremental() to option.c Juan Quintela
2023-04-24 13:27 ` [PULL 22/30] migration: Create migrate_throttle_trigger_threshold() Juan Quintela
2023-04-24 13:27 ` [PULL 23/30] migration: Create migrate_checkpoint_delay() Juan Quintela
2023-04-24 13:27 ` [PULL 24/30] migration: Create migrate_max_cpu_throttle() Juan Quintela
2023-04-24 13:27 ` [PULL 25/30] migration: Move migrate_announce_params() to option.c Juan Quintela
2023-04-24 13:27 ` [PULL 26/30] migration: Create migrate_cpu_throttle_initial() " Juan Quintela
2023-04-24 13:27 ` [PULL 27/30] migration: Create migrate_cpu_throttle_increment() function Juan Quintela
2023-04-24 13:27 ` [PULL 28/30] migration: Create migrate_cpu_throttle_tailslow() function Juan Quintela
2023-04-24 13:27 ` [PULL 29/30] migration: Move migrate_postcopy() to options.c Juan Quintela
2023-04-24 13:27 ` [PULL 30/30] migration: Create migrate_max_bandwidth() function Juan Quintela
2023-04-24 16:35 ` [PULL 00/30] Migration 20230424 patches Richard Henderson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).