qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 12/12] migration: move process_incoming_migratio


From: Orit Wasserman
Subject: Re: [Qemu-devel] [PATCH 12/12] migration: move process_incoming_migration to a coroutine
Date: Sun, 28 Oct 2012 12:07:32 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120911 Thunderbird/15.0.1

On 10/18/2012 12:22 PM, Paolo Bonzini wrote:
> The final part of incoming migration, which now consists of
> process_incoming_migration for all protocols, is thus made non-blocking.
> 
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
>  migration.c | 21 ++++++++++++++++++++-
>  1 file modificato, 20 inserzioni(+). 1 rimozione(-)
> 
> diff --git a/migration.c b/migration.c
> index 0d74753..32d43e7 100644
> --- a/migration.c
> +++ b/migration.c
> @@ -86,11 +86,13 @@ int qemu_start_incoming_migration(const char *uri, Error 
> **errp)
>      return ret;
>  }
>  
> -void process_incoming_migration(QEMUFile *f)
> +static void process_incoming_migration_co(void *opaque)
>  {
> +    QEMUFile *f = opaque;
>      int ret;
>  
>      ret = qemu_loadvm_state(f);
> +    qemu_set_fd_handler(qemu_get_fd(f), NULL, NULL, NULL);
>      qemu_fclose(f);
>      if (ret < 0) {
>          fprintf(stderr, "load of migration failed\n");
> @@ -110,6 +112,23 @@ void process_incoming_migration(QEMUFile *f)
>      }
>  }
>  
> +static void enter_migration_coroutine(void *opaque)
> +{
> +    Coroutine *co = opaque;
> +    qemu_coroutine_enter(co, NULL);
> +}
> +
> +void process_incoming_migration(QEMUFile *f)
> +{
> +    Coroutine *co = qemu_coroutine_create(process_incoming_migration_co);
> +    int fd = qemu_get_fd(f);
> +
> +    assert(fd != -1);
> +    socket_set_nonblock(fd);
> +    qemu_set_fd_handler(fd, enter_migration_coroutine, NULL, co);
> +    qemu_coroutine_enter(co, f);
> +}
> +
>  /* amount of nanoseconds we are willing to wait for migration to be down.
>   * the choice of nanoseconds is because it is the maximum resolution that
>   * get_clock() can achieve. It is an internal measure. All user-visible
> 
Reviewed-by: Orit Wasserman <address@hidden>



reply via email to

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