Skip to content

Commit

Permalink
migration: Move migrate_allow_multifd and helpers into migration.c
Browse files Browse the repository at this point in the history
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.

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <20220331150857.74406-5-peterx@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
  • Loading branch information
xzpeter authored and dagrh committed Apr 21, 2022
1 parent ea2faf0 commit f444eed
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 22 deletions.
22 changes: 17 additions & 5 deletions migration/migration.c
Expand Up @@ -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;
Expand Down Expand Up @@ -469,12 +481,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)) {
Expand Down Expand Up @@ -1261,7 +1273,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;
Expand Down Expand Up @@ -2322,11 +2334,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)) {
Expand Down
3 changes: 3 additions & 0 deletions migration/migration.h
Expand Up @@ -430,4 +430,7 @@ void migration_cancel(const Error *error);
void populate_vfio_info(MigrationInfo *info);
void postcopy_temp_page_reset(PostcopyTmpPage *tmp_page);

bool migrate_multi_channels_is_allowed(void);
void migrate_protocol_allow_multi_channels(bool allow);

#endif
19 changes: 4 additions & 15 deletions migration/multifd.c
Expand Up @@ -517,7 +517,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);
Expand Down Expand Up @@ -857,17 +857,6 @@ static void multifd_new_send_channel_async(QIOTask *task, gpointer opaque)
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;
Expand All @@ -877,7 +866,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;
}
Expand Down Expand Up @@ -976,7 +965,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);
Expand Down Expand Up @@ -1125,7 +1114,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;
}
Expand Down
2 changes: 0 additions & 2 deletions migration/multifd.h
Expand Up @@ -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);
Expand Down

0 comments on commit f444eed

Please sign in to comment.