[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 22/40] migration: wakeup dst ram-load-thread for reco
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PULL 22/40] migration: wakeup dst ram-load-thread for recover |
Date: |
Wed, 16 May 2018 01:39:59 +0200 |
From: Peter Xu <address@hidden>
On the destination side, we cannot wake up all the threads when we got
reconnected. The first thing to do is to wake up the main load thread,
so that we can continue to receive valid messages from source again and
reply when needed.
At this point, we switch the destination VM state from postcopy-paused
back to postcopy-recover.
Now we are finally ready to do the resume logic.
Reviewed-by: Dr. David Alan Gilbert <address@hidden>
Signed-off-by: Peter Xu <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>
---
migration/migration.c | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 4ab637a1fe..ec3bc9ae20 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -440,8 +440,34 @@ void migration_incoming_process(void)
void migration_fd_process_incoming(QEMUFile *f)
{
- migration_incoming_setup(f);
- migration_incoming_process();
+ MigrationIncomingState *mis = migration_incoming_get_current();
+
+ if (mis->state == MIGRATION_STATUS_POSTCOPY_PAUSED) {
+ /* Resumed from a paused postcopy migration */
+
+ mis->from_src_file = f;
+ /* Postcopy has standalone thread to do vm load */
+ qemu_file_set_blocking(f, true);
+
+ /* Re-configure the return path */
+ mis->to_src_file = qemu_file_get_return_path(f);
+
+ migrate_set_state(&mis->state, MIGRATION_STATUS_POSTCOPY_PAUSED,
+ MIGRATION_STATUS_POSTCOPY_RECOVER);
+
+ /*
+ * Here, we only wake up the main loading thread (while the
+ * fault thread will still be waiting), so that we can receive
+ * commands from source now, and answer it if needed. The
+ * fault thread will be woken up afterwards until we are sure
+ * that source is ready to reply to page requests.
+ */
+ qemu_sem_post(&mis->postcopy_pause_sem_dst);
+ } else {
+ /* New incoming migration */
+ migration_incoming_setup(f);
+ migration_incoming_process();
+ }
}
void migration_ioc_process_incoming(QIOChannel *ioc)
--
2.17.0
- [Qemu-devel] [PULL 13/40] migration: let incoming side use thread context, (continued)
- [Qemu-devel] [PULL 13/40] migration: let incoming side use thread context, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 12/40] migration: Define MultifdRecvParams sooner, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 07/40] migration: Be sure all recv channels are created, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 14/40] migration: new postcopy-pause state, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 16/40] migration: allow dst vm pause on postcopy, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 17/40] migration: allow src return path to pause, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 18/40] migration: allow fault thread to pause, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 19/40] qmp: hmp: add migrate "resume" option, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 15/40] migration: implement "postcopy-pause" src logic, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 20/40] migration: rebuild channel on source, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 22/40] migration: wakeup dst ram-load-thread for recover,
Juan Quintela <=
- [Qemu-devel] [PULL 23/40] migration: new cmd MIG_CMD_RECV_BITMAP, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 21/40] migration: new state "postcopy-recover", Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 25/40] migration: new cmd MIG_CMD_POSTCOPY_RESUME, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 24/40] migration: new message MIG_RP_MSG_RECV_BITMAP, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 26/40] migration: new message MIG_RP_MSG_RESUME_ACK, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 27/40] migration: introduce SaveVMHandlers.resume_prepare, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 30/40] migration: final handshake for the resume, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 31/40] migration: init dst in migration_object_init too, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 28/40] migration: synchronize dirty bitmap for resume, Juan Quintela, 2018/05/15
- [Qemu-devel] [PULL 29/40] migration: setup ramstate for resume, Juan Quintela, 2018/05/15