migration: Delay start of migration main routines
authorJuan Quintela <quintela@redhat.com>
Wed, 7 Mar 2018 07:40:52 +0000 (08:40 +0100)
committerJuan Quintela <quintela@redhat.com>
Tue, 15 May 2018 18:24:27 +0000 (20:24 +0200)
We need to make sure that we have started all the multifd threads.

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
migration/migration.c
migration/migration.h
migration/ram.c
migration/socket.c

index 8e5b421b97fb02b7a34e4d289e033c0d7d8ba396..61c4ee785071b7c2bb6279a26e9b8ee1249097ab 100644 (file)
@@ -430,7 +430,7 @@ static void migration_incoming_setup(QEMUFile *f)
     qemu_file_set_blocking(f, false);
 }
 
-static void migration_incoming_process(void)
+void migration_incoming_process(void)
 {
     Coroutine *co = qemu_coroutine_create(process_incoming_migration_co, NULL);
     qemu_coroutine_enter(co);
@@ -448,7 +448,7 @@ void migration_ioc_process_incoming(QIOChannel *ioc)
 
     if (!mis->from_src_file) {
         QEMUFile *f = qemu_fopen_channel_input(ioc);
-        migration_fd_process_incoming(f);
+        migration_incoming_setup(f);
         return;
     }
     multifd_recv_new_channel(ioc);
index 7c69598c54ab354f0d8a5fbb0b598e80142973bd..26e5951d56e7f3c8e399ec725f45fd1fbad753fd 100644 (file)
@@ -200,6 +200,7 @@ void migrate_set_state(int *state, int old_state, int new_state);
 
 void migration_fd_process_incoming(QEMUFile *f);
 void migration_ioc_process_incoming(QIOChannel *ioc);
+void migration_incoming_process(void);
 
 bool  migration_has_all_channels(void);
 
index 87434d3fce83aa8131c326bf072cddbfd0415b1f..f7e8615e1587d3d62cf93d8c83afc90940782ce4 100644 (file)
@@ -717,6 +717,9 @@ void multifd_recv_new_channel(QIOChannel *ioc)
     qemu_thread_create(&p->thread, p->name, multifd_recv_thread, p,
                        QEMU_THREAD_JOINABLE);
     atomic_inc(&multifd_recv_state->count);
+    if (multifd_recv_state->count == migrate_multifd_channels()) {
+        migration_incoming_process();
+    }
 }
 
 /**
index e09fd1aae5a4200004ca6d8c05063aa4c2e9988b..7a5eb562b8166bc325d014c44ed70c59547522f4 100644 (file)
@@ -170,6 +170,10 @@ static void socket_accept_incoming_migration(QIONetListener *listener,
         qio_net_listener_disconnect(listener);
 
         object_unref(OBJECT(listener));
+
+        if (!migrate_use_multifd()) {
+            migration_incoming_process();
+        }
     }
 }