[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC 20/29] migration: wakeup dst ram-load-thread for r
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [Qemu-devel] [RFC 20/29] migration: wakeup dst ram-load-thread for recover |
Date: |
Thu, 3 Aug 2017 10:28:20 +0100 |
User-agent: |
Mutt/1.8.3 (2017-05-23) |
* Peter Xu (address@hidden) wrote:
> 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.
>
> Signed-off-by: Peter Xu <address@hidden>
> ---
> migration/migration.c | 34 +++++++++++++++++++++++++++++++---
> 1 file changed, 31 insertions(+), 3 deletions(-)
>
> diff --git a/migration/migration.c b/migration/migration.c
> index 3aabe11..e498fa4 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -389,10 +389,38 @@ static void process_incoming_migration_co(void *opaque)
>
> void migration_fd_process_incoming(QEMUFile *f)
> {
> - Coroutine *co = qemu_coroutine_create(process_incoming_migration_co, f);
> + MigrationIncomingState *mis = migration_incoming_get_current();
> + Coroutine *co;
> +
> + mis->from_src_file = f;
> +
> + if (mis->state == MIGRATION_STATUS_POSTCOPY_PAUSED) {
> + /* Resumed migration to postcopy state */
> +
> + /* 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);
>
> - qemu_file_set_blocking(f, false);
> - qemu_coroutine_enter(co);
> + /* Reset the migration status to postcopy-active */
> + migrate_set_state(&mis->state, MIGRATION_STATUS_POSTCOPY_PAUSED,
> + MIGRATION_STATUS_POSTCOPY_RECOVER);
The comment doesn't match the code.
Other than that;
Reviewed-by: Dr. David Alan Gilbert <address@hidden>
> +
> + /*
> + * 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 waked 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 */
> + qemu_file_set_blocking(f, false);
> + co = qemu_coroutine_create(process_incoming_migration_co, f);
> + qemu_coroutine_enter(co);
> + }
> }
>
> /*
> --
> 2.7.4
>
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK
- Re: [Qemu-devel] [RFC 20/29] migration: wakeup dst ram-load-thread for recover,
Dr. David Alan Gilbert <=