* Peter Xu (pet...@redhat.com) wrote: > Store the task tag for migration types: tcp/unix/fd/exec in current > MigrationIncomingState struct. > > For defered migration, no need to store task tag since there is no task > running in the main loop at all. For RDMA, let's mark it as todo. > > Signed-off-by: Peter Xu <pet...@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > migration/migration.c | 22 ++++++++++++++++++---- > migration/migration.h | 2 ++ > 2 files changed, 20 insertions(+), 4 deletions(-) > > diff --git a/migration/migration.c b/migration/migration.c > index c9b7085..daf356b 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -171,6 +171,7 @@ void migration_incoming_state_destroy(void) > mis->from_src_file = NULL; > } > > + mis->listen_task_tag = 0; > qemu_event_destroy(&mis->main_thread_load_event); > } > > @@ -265,25 +266,31 @@ int migrate_send_rp_req_pages(MigrationIncomingState > *mis, const char *rbname, > void qemu_start_incoming_migration(const char *uri, Error **errp) > { > const char *p; > + guint task_tag = 0; > + MigrationIncomingState *mis = migration_incoming_get_current(); > > qapi_event_send_migration(MIGRATION_STATUS_SETUP, &error_abort); > if (!strcmp(uri, "defer")) { > deferred_incoming_migration(errp); > } else if (strstart(uri, "tcp:", &p)) { > - tcp_start_incoming_migration(p, errp); > + task_tag = tcp_start_incoming_migration(p, errp); > #ifdef CONFIG_RDMA > } else if (strstart(uri, "rdma:", &p)) { > + /* TODO: store task tag for RDMA migrations */ > rdma_start_incoming_migration(p, errp); > #endif > } else if (strstart(uri, "exec:", &p)) { > - exec_start_incoming_migration(p, errp); > + task_tag = exec_start_incoming_migration(p, errp); > } else if (strstart(uri, "unix:", &p)) { > - unix_start_incoming_migration(p, errp); > + task_tag = unix_start_incoming_migration(p, errp); > } else if (strstart(uri, "fd:", &p)) { > - fd_start_incoming_migration(p, errp); > + task_tag = fd_start_incoming_migration(p, errp); > } else { > error_setg(errp, "unknown migration protocol: %s", uri); > + return; > } > + > + mis->listen_task_tag = task_tag; > } > > static void process_incoming_migration_bh(void *opaque) > @@ -422,6 +429,13 @@ void migration_fd_process_incoming(QEMUFile *f) > co = qemu_coroutine_create(process_incoming_migration_co, f); > qemu_coroutine_enter(co); > } > + > + /* > + * When reach here, we should not need the listening port any > + * more. We'll detach the listening task soon, let's reset the > + * listen task tag. > + */ > + mis->listen_task_tag = 0; > } > > /* > diff --git a/migration/migration.h b/migration/migration.h > index d041369..1f4faef 100644 > --- a/migration/migration.h > +++ b/migration/migration.h > @@ -26,6 +26,8 @@ > /* State for the incoming migration */ > struct MigrationIncomingState { > QEMUFile *from_src_file; > + /* Task tag for incoming listen port. Valid when >0. */ > + guint listen_task_tag; > > /* > * Free at the start of the main state load, set as the main thread > finishes > -- > 2.7.4 > > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK