qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]