[PATCH RFC 12/15] migration: Move migrate_allow_multifd and helpers into migration.c

Peter Xu posted 15 patches 4 years ago
Maintainers: Juan Quintela <quintela@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, "Dr. David Alan Gilbert" <dgilbert@redhat.com>, Thomas Huth <thuth@redhat.com>, Markus Armbruster <armbru@redhat.com>, Eric Blake <eblake@redhat.com>, Laurent Vivier <lvivier@redhat.com>
There is a newer version of this series
[PATCH RFC 12/15] migration: Move migrate_allow_multifd and helpers into migration.c
Posted by Peter Xu 4 years ago
This variable, along with its helpers, is used to detect whether multiple
channel will be supported for migration.  In follow up patches, there'll be
other capability that requires multi-channels.  Hence move it outside multifd
specific code and make it public.  Meanwhile rename it from "multifd" to
"multi_channels" to show its real meaning.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 migration/migration.c | 22 +++++++++++++++++-----
 migration/migration.h |  3 +++
 migration/multifd.c   | 19 ++++---------------
 migration/multifd.h   |  2 --
 4 files changed, 24 insertions(+), 22 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index 252ce1eaec..15a48b548a 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -180,6 +180,18 @@ static int migration_maybe_pause(MigrationState *s,
                                  int new_state);
 static void migrate_fd_cancel(MigrationState *s);
 
+static bool migrate_allow_multi_channels = true;
+
+void migrate_protocol_allow_multi_channels(bool allow)
+{
+    migrate_allow_multi_channels = allow;
+}
+
+bool migrate_multi_channels_is_allowed(void)
+{
+    return migrate_allow_multi_channels;
+}
+
 static gint page_request_addr_cmp(gconstpointer ap, gconstpointer bp)
 {
     uintptr_t a = (uintptr_t) ap, b = (uintptr_t) bp;
@@ -463,12 +475,12 @@ static void qemu_start_incoming_migration(const char *uri, Error **errp)
 {
     const char *p = NULL;
 
-    migrate_protocol_allow_multifd(false); /* reset it anyway */
+    migrate_protocol_allow_multi_channels(false); /* reset it anyway */
     qapi_event_send_migration(MIGRATION_STATUS_SETUP);
     if (strstart(uri, "tcp:", &p) ||
         strstart(uri, "unix:", NULL) ||
         strstart(uri, "vsock:", NULL)) {
-        migrate_protocol_allow_multifd(true);
+        migrate_protocol_allow_multi_channels(true);
         socket_start_incoming_migration(p ? p : uri, errp);
 #ifdef CONFIG_RDMA
     } else if (strstart(uri, "rdma:", &p)) {
@@ -1252,7 +1264,7 @@ static bool migrate_caps_check(bool *cap_list,
 
     /* incoming side only */
     if (runstate_check(RUN_STATE_INMIGRATE) &&
-        !migrate_multifd_is_allowed() &&
+        !migrate_multi_channels_is_allowed() &&
         cap_list[MIGRATION_CAPABILITY_MULTIFD]) {
         error_setg(errp, "multifd is not supported by current protocol");
         return false;
@@ -2310,11 +2322,11 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
         }
     }
 
-    migrate_protocol_allow_multifd(false);
+    migrate_protocol_allow_multi_channels(false);
     if (strstart(uri, "tcp:", &p) ||
         strstart(uri, "unix:", NULL) ||
         strstart(uri, "vsock:", NULL)) {
-        migrate_protocol_allow_multifd(true);
+        migrate_protocol_allow_multi_channels(true);
         socket_start_outgoing_migration(s, p ? p : uri, &local_err);
 #ifdef CONFIG_RDMA
     } else if (strstart(uri, "rdma:", &p)) {
diff --git a/migration/migration.h b/migration/migration.h
index 34b79cb961..d0c0902ec9 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -425,4 +425,7 @@ void migration_cancel(const Error *error);
 
 void populate_vfio_info(MigrationInfo *info);
 
+bool migrate_multi_channels_is_allowed(void);
+void migrate_protocol_allow_multi_channels(bool allow);
+
 #endif
diff --git a/migration/multifd.c b/migration/multifd.c
index 3242f688e5..64ca50de62 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -535,7 +535,7 @@ void multifd_save_cleanup(void)
 {
     int i;
 
-    if (!migrate_use_multifd() || !migrate_multifd_is_allowed()) {
+    if (!migrate_use_multifd() || !migrate_multi_channels_is_allowed()) {
         return;
     }
     multifd_send_terminate_threads(NULL);
@@ -870,17 +870,6 @@ cleanup:
     multifd_new_send_channel_cleanup(p, sioc, local_err);
 }
 
-static bool migrate_allow_multifd = true;
-void migrate_protocol_allow_multifd(bool allow)
-{
-    migrate_allow_multifd = allow;
-}
-
-bool migrate_multifd_is_allowed(void)
-{
-    return migrate_allow_multifd;
-}
-
 int multifd_save_setup(Error **errp)
 {
     int thread_count;
@@ -891,7 +880,7 @@ int multifd_save_setup(Error **errp)
     if (!migrate_use_multifd()) {
         return 0;
     }
-    if (!migrate_multifd_is_allowed()) {
+    if (!migrate_multi_channels_is_allowed()) {
         error_setg(errp, "multifd is not supported by current protocol");
         return -1;
     }
@@ -989,7 +978,7 @@ int multifd_load_cleanup(Error **errp)
 {
     int i;
 
-    if (!migrate_use_multifd() || !migrate_multifd_is_allowed()) {
+    if (!migrate_use_multifd() || !migrate_multi_channels_is_allowed()) {
         return 0;
     }
     multifd_recv_terminate_threads(NULL);
@@ -1138,7 +1127,7 @@ int multifd_load_setup(Error **errp)
     if (!migrate_use_multifd()) {
         return 0;
     }
-    if (!migrate_multifd_is_allowed()) {
+    if (!migrate_multi_channels_is_allowed()) {
         error_setg(errp, "multifd is not supported by current protocol");
         return -1;
     }
diff --git a/migration/multifd.h b/migration/multifd.h
index e57adc783b..0ed07794b6 100644
--- a/migration/multifd.h
+++ b/migration/multifd.h
@@ -13,8 +13,6 @@
 #ifndef QEMU_MIGRATION_MULTIFD_H
 #define QEMU_MIGRATION_MULTIFD_H
 
-bool migrate_multifd_is_allowed(void);
-void migrate_protocol_allow_multifd(bool allow);
 int multifd_save_setup(Error **errp);
 void multifd_save_cleanup(void);
 int multifd_load_setup(Error **errp);
-- 
2.32.0


Re: [PATCH RFC 12/15] migration: Move migrate_allow_multifd and helpers into migration.c
Posted by Dr. David Alan Gilbert 4 years ago
* Peter Xu (peterx@redhat.com) wrote:
> This variable, along with its helpers, is used to detect whether multiple
> channel will be supported for migration.  In follow up patches, there'll be
> other capability that requires multi-channels.  Hence move it outside multifd
> specific code and make it public.  Meanwhile rename it from "multifd" to
> "multi_channels" to show its real meaning.
> 
> Signed-off-by: Peter Xu <peterx@redhat.com>

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
>  migration/migration.c | 22 +++++++++++++++++-----
>  migration/migration.h |  3 +++
>  migration/multifd.c   | 19 ++++---------------
>  migration/multifd.h   |  2 --
>  4 files changed, 24 insertions(+), 22 deletions(-)
> 
> diff --git a/migration/migration.c b/migration/migration.c
> index 252ce1eaec..15a48b548a 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -180,6 +180,18 @@ static int migration_maybe_pause(MigrationState *s,
>                                   int new_state);
>  static void migrate_fd_cancel(MigrationState *s);
>  
> +static bool migrate_allow_multi_channels = true;
> +
> +void migrate_protocol_allow_multi_channels(bool allow)
> +{
> +    migrate_allow_multi_channels = allow;
> +}
> +
> +bool migrate_multi_channels_is_allowed(void)
> +{
> +    return migrate_allow_multi_channels;
> +}
> +
>  static gint page_request_addr_cmp(gconstpointer ap, gconstpointer bp)
>  {
>      uintptr_t a = (uintptr_t) ap, b = (uintptr_t) bp;
> @@ -463,12 +475,12 @@ static void qemu_start_incoming_migration(const char *uri, Error **errp)
>  {
>      const char *p = NULL;
>  
> -    migrate_protocol_allow_multifd(false); /* reset it anyway */
> +    migrate_protocol_allow_multi_channels(false); /* reset it anyway */
>      qapi_event_send_migration(MIGRATION_STATUS_SETUP);
>      if (strstart(uri, "tcp:", &p) ||
>          strstart(uri, "unix:", NULL) ||
>          strstart(uri, "vsock:", NULL)) {
> -        migrate_protocol_allow_multifd(true);
> +        migrate_protocol_allow_multi_channels(true);
>          socket_start_incoming_migration(p ? p : uri, errp);
>  #ifdef CONFIG_RDMA
>      } else if (strstart(uri, "rdma:", &p)) {
> @@ -1252,7 +1264,7 @@ static bool migrate_caps_check(bool *cap_list,
>  
>      /* incoming side only */
>      if (runstate_check(RUN_STATE_INMIGRATE) &&
> -        !migrate_multifd_is_allowed() &&
> +        !migrate_multi_channels_is_allowed() &&
>          cap_list[MIGRATION_CAPABILITY_MULTIFD]) {
>          error_setg(errp, "multifd is not supported by current protocol");
>          return false;
> @@ -2310,11 +2322,11 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
>          }
>      }
>  
> -    migrate_protocol_allow_multifd(false);
> +    migrate_protocol_allow_multi_channels(false);
>      if (strstart(uri, "tcp:", &p) ||
>          strstart(uri, "unix:", NULL) ||
>          strstart(uri, "vsock:", NULL)) {
> -        migrate_protocol_allow_multifd(true);
> +        migrate_protocol_allow_multi_channels(true);
>          socket_start_outgoing_migration(s, p ? p : uri, &local_err);
>  #ifdef CONFIG_RDMA
>      } else if (strstart(uri, "rdma:", &p)) {
> diff --git a/migration/migration.h b/migration/migration.h
> index 34b79cb961..d0c0902ec9 100644
> --- a/migration/migration.h
> +++ b/migration/migration.h
> @@ -425,4 +425,7 @@ void migration_cancel(const Error *error);
>  
>  void populate_vfio_info(MigrationInfo *info);
>  
> +bool migrate_multi_channels_is_allowed(void);
> +void migrate_protocol_allow_multi_channels(bool allow);
> +
>  #endif
> diff --git a/migration/multifd.c b/migration/multifd.c
> index 3242f688e5..64ca50de62 100644
> --- a/migration/multifd.c
> +++ b/migration/multifd.c
> @@ -535,7 +535,7 @@ void multifd_save_cleanup(void)
>  {
>      int i;
>  
> -    if (!migrate_use_multifd() || !migrate_multifd_is_allowed()) {
> +    if (!migrate_use_multifd() || !migrate_multi_channels_is_allowed()) {
>          return;
>      }
>      multifd_send_terminate_threads(NULL);
> @@ -870,17 +870,6 @@ cleanup:
>      multifd_new_send_channel_cleanup(p, sioc, local_err);
>  }
>  
> -static bool migrate_allow_multifd = true;
> -void migrate_protocol_allow_multifd(bool allow)
> -{
> -    migrate_allow_multifd = allow;
> -}
> -
> -bool migrate_multifd_is_allowed(void)
> -{
> -    return migrate_allow_multifd;
> -}
> -
>  int multifd_save_setup(Error **errp)
>  {
>      int thread_count;
> @@ -891,7 +880,7 @@ int multifd_save_setup(Error **errp)
>      if (!migrate_use_multifd()) {
>          return 0;
>      }
> -    if (!migrate_multifd_is_allowed()) {
> +    if (!migrate_multi_channels_is_allowed()) {
>          error_setg(errp, "multifd is not supported by current protocol");
>          return -1;
>      }
> @@ -989,7 +978,7 @@ int multifd_load_cleanup(Error **errp)
>  {
>      int i;
>  
> -    if (!migrate_use_multifd() || !migrate_multifd_is_allowed()) {
> +    if (!migrate_use_multifd() || !migrate_multi_channels_is_allowed()) {
>          return 0;
>      }
>      multifd_recv_terminate_threads(NULL);
> @@ -1138,7 +1127,7 @@ int multifd_load_setup(Error **errp)
>      if (!migrate_use_multifd()) {
>          return 0;
>      }
> -    if (!migrate_multifd_is_allowed()) {
> +    if (!migrate_multi_channels_is_allowed()) {
>          error_setg(errp, "multifd is not supported by current protocol");
>          return -1;
>      }
> diff --git a/migration/multifd.h b/migration/multifd.h
> index e57adc783b..0ed07794b6 100644
> --- a/migration/multifd.h
> +++ b/migration/multifd.h
> @@ -13,8 +13,6 @@
>  #ifndef QEMU_MIGRATION_MULTIFD_H
>  #define QEMU_MIGRATION_MULTIFD_H
>  
> -bool migrate_multifd_is_allowed(void);
> -void migrate_protocol_allow_multifd(bool allow);
>  int multifd_save_setup(Error **errp);
>  void multifd_save_cleanup(void);
>  int multifd_load_setup(Error **errp);
> -- 
> 2.32.0
> 
-- 
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK