Message ID | 20220119080929.39485-13-peterx@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | migration: Postcopy Preemption | expand |
* 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 >
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);
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(-)