qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC PATCH 0/6] Run incoming migration in a coroutine
@ 2012-08-07 15:51 Paolo Bonzini
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 1/6] migration: clean up server sockets and handlers before invoking process_incoming_migration Paolo Bonzini
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Paolo Bonzini @ 2012-08-07 15:51 UTC (permalink / raw)
  To: qemu-devel; +Cc: owasserm, quintela

Howdy,

this series moves incoming migration to a coroutine, so that the monitor
remains usable.  I did this is as a step towards implementing an NBD
server inside QEMU (which needs to configured and/or to serve requests
during migration), but I think it is useful in general.

Coroutines work very simply by making the file descriptor non-blocking.
On EAGAIN you call qemu_coroutine_yield(); when the file descriptor
becomes readable, you call qemu_coroutine_enter().

This is mostly an RFC on the approach.  Still, it mostly consists of
cleanups and the first 3 patches could be applied right away.  What
needs some refinement is the hideous passing of file descriptors in
patch 4 and especially the last patch.

Paolo Bonzini (6):
  migration: clean up server sockets and handlers before invoking process_incoming_migration
  migration: close socket QEMUFile from socket_close
  migration: move qemu_fclose to process_incoming_migration
  migration: remove iohandlers before closing the file
  migration: handle EAGAIN while reading QEMUFile
  migration: move process_incoming_migration to a coroutine

 migration-exec.c |  3 +--
 migration-fd.c   |  3 +--
 migration-tcp.c  | 12 ++++++------
 migration-unix.c | 12 ++++++------
 migration.c      | 23 +++++++++++++++++++++--
 migration.h      |  2 +-
 savevm.c         | 34 ++++++++++++++++++++++++++++------
 7 file modificati, 64 inserzioni(+), 25 rimozioni(-)

-- 
1.7.11.2

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 1/6] migration: clean up server sockets and handlers before invoking process_incoming_migration
  2012-08-07 15:51 [Qemu-devel] [RFC PATCH 0/6] Run incoming migration in a coroutine Paolo Bonzini
@ 2012-08-07 15:51 ` Paolo Bonzini
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 2/6] migration: close socket QEMUFile from socket_close Paolo Bonzini
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2012-08-07 15:51 UTC (permalink / raw)
  To: qemu-devel; +Cc: owasserm, quintela

We will not accept any other migration from the server socket, so
we can close it.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 migration-exec.c | 2 +-
 migration-fd.c   | 2 +-
 migration-tcp.c  | 7 +++----
 migration-unix.c | 7 +++----
 4 file modificati, 8 inserzioni(+), 10 rimozioni(-)

diff --git a/migration-exec.c b/migration-exec.c
index 6c97db9..061131a 100644
--- a/migration-exec.c
+++ b/migration-exec.c
@@ -97,8 +97,8 @@ static void exec_accept_incoming_migration(void *opaque)
 {
     QEMUFile *f = opaque;
 
-    process_incoming_migration(f);
     qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
+    process_incoming_migration(f);
     qemu_fclose(f);
 }
 
diff --git a/migration-fd.c b/migration-fd.c
index 50138ed..87705c0 100644
--- a/migration-fd.c
+++ b/migration-fd.c
@@ -103,8 +103,8 @@ static void fd_accept_incoming_migration(void *opaque)
 {
     QEMUFile *f = opaque;
 
-    process_incoming_migration(f);
     qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
+    process_incoming_migration(f);
     qemu_fclose(f);
 }
 
diff --git a/migration-tcp.c b/migration-tcp.c
index 440804d..587413e 100644
--- a/migration-tcp.c
+++ b/migration-tcp.c
@@ -119,12 +119,14 @@ static void tcp_accept_incoming_migration(void *opaque)
     do {
         c = qemu_accept(s, (struct sockaddr *)&addr, &addrlen);
     } while (c == -1 && socket_error() == EINTR);
+    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
+    close(s);
 
     DPRINTF("accepted migration\n");
 
     if (c == -1) {
         fprintf(stderr, "could not accept migration connection\n");
-        goto out2;
+        goto out;
     }
 
     f = qemu_fopen_socket(c);
@@ -137,9 +139,6 @@ static void tcp_accept_incoming_migration(void *opaque)
     qemu_fclose(f);
 out:
     close(c);
-out2:
-    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
-    close(s);
 }
 
 int tcp_start_incoming_migration(const char *host_port, Error **errp)
diff --git a/migration-unix.c b/migration-unix.c
index 169de88..a407af2 100644
--- a/migration-unix.c
+++ b/migration-unix.c
@@ -129,12 +129,14 @@ static void unix_accept_incoming_migration(void *opaque)
     do {
         c = qemu_accept(s, (struct sockaddr *)&addr, &addrlen);
     } while (c == -1 && errno == EINTR);
+    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
+    close(s);
 
     DPRINTF("accepted migration\n");
 
     if (c == -1) {
         fprintf(stderr, "could not accept migration connection\n");
-        goto out2;
+        goto out;
     }
 
     f = qemu_fopen_socket(c);
@@ -147,9 +149,6 @@ static void unix_accept_incoming_migration(void *opaque)
     qemu_fclose(f);
 out:
     close(c);
-out2:
-    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
-    close(s);
 }
 
 int unix_start_incoming_migration(const char *path)
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 2/6] migration: close socket QEMUFile from socket_close
  2012-08-07 15:51 [Qemu-devel] [RFC PATCH 0/6] Run incoming migration in a coroutine Paolo Bonzini
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 1/6] migration: clean up server sockets and handlers before invoking process_incoming_migration Paolo Bonzini
@ 2012-08-07 15:51 ` Paolo Bonzini
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 3/6] migration: move qemu_fclose to process_incoming_migration Paolo Bonzini
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2012-08-07 15:51 UTC (permalink / raw)
  To: qemu-devel; +Cc: owasserm, quintela

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 migration-tcp.c  | 2 ++
 migration-unix.c | 2 ++
 savevm.c         | 1 +
 3 file modificati, 5 inserzioni(+)

diff --git a/migration-tcp.c b/migration-tcp.c
index 587413e..62a6891 100644
--- a/migration-tcp.c
+++ b/migration-tcp.c
@@ -137,6 +137,8 @@ static void tcp_accept_incoming_migration(void *opaque)
 
     process_incoming_migration(f);
     qemu_fclose(f);
+    return;
+
 out:
     close(c);
 }
diff --git a/migration-unix.c b/migration-unix.c
index a407af2..57aca11 100644
--- a/migration-unix.c
+++ b/migration-unix.c
@@ -147,6 +147,8 @@ static void unix_accept_incoming_migration(void *opaque)
 
     process_incoming_migration(f);
     qemu_fclose(f);
+    return;
+
 out:
     close(c);
 }
diff --git a/savevm.c b/savevm.c
index 6e82b2d..57cae52 100644
--- a/savevm.c
+++ b/savevm.c
@@ -210,6 +210,7 @@ static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 static int socket_close(void *opaque)
 {
     QEMUFileSocket *s = opaque;
+    close(s->fd);
     g_free(s);
     return 0;
 }
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 3/6] migration: move qemu_fclose to process_incoming_migration
  2012-08-07 15:51 [Qemu-devel] [RFC PATCH 0/6] Run incoming migration in a coroutine Paolo Bonzini
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 1/6] migration: clean up server sockets and handlers before invoking process_incoming_migration Paolo Bonzini
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 2/6] migration: close socket QEMUFile from socket_close Paolo Bonzini
@ 2012-08-07 15:51 ` Paolo Bonzini
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 4/6] migration: remove iohandlers before closing the file Paolo Bonzini
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2012-08-07 15:51 UTC (permalink / raw)
  To: qemu-devel; +Cc: owasserm, quintela

This patch starts moving all tasks coming after process_incoming_migration
to process_incoming_migration itself.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 migration-exec.c | 1 -
 migration-fd.c   | 1 -
 migration-tcp.c  | 1 -
 migration-unix.c | 1 -
 migration.c      | 6 +++++-
 5 file modificati, 5 inserzioni(+), 5 rimozioni(-)

diff --git a/migration-exec.c b/migration-exec.c
index 061131a..84796be 100644
--- a/migration-exec.c
+++ b/migration-exec.c
@@ -99,7 +99,6 @@ static void exec_accept_incoming_migration(void *opaque)
 
     qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
     process_incoming_migration(f);
-    qemu_fclose(f);
 }
 
 int exec_start_incoming_migration(const char *command)
diff --git a/migration-fd.c b/migration-fd.c
index 87705c0..21ad196 100644
--- a/migration-fd.c
+++ b/migration-fd.c
@@ -105,7 +105,6 @@ static void fd_accept_incoming_migration(void *opaque)
 
     qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
     process_incoming_migration(f);
-    qemu_fclose(f);
 }
 
 int fd_start_incoming_migration(const char *infd)
diff --git a/migration-tcp.c b/migration-tcp.c
index 62a6891..62c9309 100644
--- a/migration-tcp.c
+++ b/migration-tcp.c
@@ -136,7 +136,6 @@ static void tcp_accept_incoming_migration(void *opaque)
     }
 
     process_incoming_migration(f);
-    qemu_fclose(f);
     return;
 
 out:
diff --git a/migration-unix.c b/migration-unix.c
index 57aca11..d8d5dfa 100644
--- a/migration-unix.c
+++ b/migration-unix.c
@@ -146,7 +146,6 @@ static void unix_accept_incoming_migration(void *opaque)
     }
 
     process_incoming_migration(f);
-    qemu_fclose(f);
     return;
 
 out:
diff --git a/migration.c b/migration.c
index 8db1b43..a27ceb3 100644
--- a/migration.c
+++ b/migration.c
@@ -84,7 +84,11 @@ int qemu_start_incoming_migration(const char *uri, Error **errp)
 
 void process_incoming_migration(QEMUFile *f)
 {
-    if (qemu_loadvm_state(f) < 0) {
+    int ret;
+
+    ret = qemu_loadvm_state(f);
+    qemu_fclose(f);
+    if (ret < 0) {
         fprintf(stderr, "load of migration failed\n");
         exit(0);
     }
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 4/6] migration: remove iohandlers before closing the file
  2012-08-07 15:51 [Qemu-devel] [RFC PATCH 0/6] Run incoming migration in a coroutine Paolo Bonzini
                   ` (2 preceding siblings ...)
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 3/6] migration: move qemu_fclose to process_incoming_migration Paolo Bonzini
@ 2012-08-07 15:51 ` Paolo Bonzini
  2012-08-07 18:46   ` Anthony Liguori
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 5/6] migration: handle EAGAIN while reading QEMUFile Paolo Bonzini
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 6/6] migration: move process_incoming_migration to a coroutine Paolo Bonzini
  5 siblings, 1 reply; 9+ messages in thread
From: Paolo Bonzini @ 2012-08-07 15:51 UTC (permalink / raw)
  To: qemu-devel; +Cc: owasserm, quintela

This will be needed as soon as process_incoming_migration will set
handlers on the file.  The patch may be removed if 

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 savevm.c | 3 +++
 1 file modificato, 3 inserzioni(+)

diff --git a/savevm.c b/savevm.c
index 57cae52..8f075e5 100644
--- a/savevm.c
+++ b/savevm.c
@@ -210,6 +210,7 @@ static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 static int socket_close(void *opaque)
 {
     QEMUFileSocket *s = opaque;
+    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
     close(s->fd);
     g_free(s);
     return 0;
@@ -238,6 +239,7 @@ static int stdio_pclose(void *opaque)
 {
     QEMUFileStdio *s = opaque;
     int ret;
+    qemu_set_fd_handler(fileno(s->stdio_file), NULL, NULL, NULL);
     ret = pclose(s->stdio_file);
     if (ret == -1) {
         ret = -errno;
@@ -250,6 +252,7 @@ static int stdio_fclose(void *opaque)
 {
     QEMUFileStdio *s = opaque;
     int ret = 0;
+    qemu_set_fd_handler(fileno(s->stdio_file), NULL, NULL, NULL);
     if (fclose(s->stdio_file) == EOF) {
         ret = -errno;
     }
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 5/6] migration: handle EAGAIN while reading QEMUFile
  2012-08-07 15:51 [Qemu-devel] [RFC PATCH 0/6] Run incoming migration in a coroutine Paolo Bonzini
                   ` (3 preceding siblings ...)
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 4/6] migration: remove iohandlers before closing the file Paolo Bonzini
@ 2012-08-07 15:51 ` Paolo Bonzini
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 6/6] migration: move process_incoming_migration to a coroutine Paolo Bonzini
  5 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2012-08-07 15:51 UTC (permalink / raw)
  To: qemu-devel; +Cc: owasserm, quintela

This will never happen right now (the assertion would fail).  The
next patch will set the socket or pipe in non-blocking mode, thus
enabling this part of the code.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 savevm.c | 30 ++++++++++++++++++++++++------
 1 file modificato, 24 inserzioni(+), 6 rimozioni(-)

diff --git a/savevm.c b/savevm.c
index 8f075e5..336b53b 100644
--- a/savevm.c
+++ b/savevm.c
@@ -197,13 +197,22 @@ static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
     QEMUFileSocket *s = opaque;
     ssize_t len;
 
-    do {
+    for (;;) {
         len = qemu_recv(s->fd, buf, size, 0);
-    } while (len == -1 && socket_error() == EINTR);
+        if (len != -1) {
+            break;
+        }
+        if (errno == EAGAIN) {
+            assert(qemu_in_coroutine());
+            qemu_coroutine_yield();
+        } else if (errno != EINTR) {
+            break;
+        }
+    }
 
-    if (len == -1)
+    if (len == -1) {
         len = -socket_error();
-
+    }
     return len;
 }
 
@@ -228,10 +237,19 @@ static int stdio_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
     FILE *fp = s->stdio_file;
     int bytes;
 
-    do {
+    for (;;) {
         clearerr(fp);
         bytes = fread(buf, 1, size, fp);
-    } while ((bytes == 0) && ferror(fp) && (errno == EINTR));
+        if (bytes != 0 || !ferror(fp)) {
+            break;
+        }
+        if (errno == EAGAIN) {
+            assert(qemu_in_coroutine());
+            qemu_coroutine_yield();
+        } else if (errno != EINTR) {
+            break;
+        }
+    }
     return bytes;
 }
 
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 6/6] migration: move process_incoming_migration to a coroutine
  2012-08-07 15:51 [Qemu-devel] [RFC PATCH 0/6] Run incoming migration in a coroutine Paolo Bonzini
                   ` (4 preceding siblings ...)
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 5/6] migration: handle EAGAIN while reading QEMUFile Paolo Bonzini
@ 2012-08-07 15:51 ` Paolo Bonzini
  5 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2012-08-07 15:51 UTC (permalink / raw)
  To: qemu-devel; +Cc: owasserm, quintela

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 migration-exec.c |  2 +-
 migration-fd.c   |  2 +-
 migration-tcp.c  |  2 +-
 migration-unix.c |  2 +-
 migration.c      | 17 ++++++++++++++++-
 migration.h      |  2 +-
 6 file modificati, 21 inserzioni(+), 6 rimozioni(-)

diff --git a/migration-exec.c b/migration-exec.c
index 84796be..e8ed144 100644
--- a/migration-exec.c
+++ b/migration-exec.c
@@ -98,7 +98,7 @@ static void exec_accept_incoming_migration(void *opaque)
     QEMUFile *f = opaque;
 
     qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
-    process_incoming_migration(f);
+    process_incoming_migration(f, qemu_stdio_fd(f));
 }
 
 int exec_start_incoming_migration(const char *command)
diff --git a/migration-fd.c b/migration-fd.c
index 21ad196..e9a06d9 100644
--- a/migration-fd.c
+++ b/migration-fd.c
@@ -104,7 +104,7 @@ static void fd_accept_incoming_migration(void *opaque)
     QEMUFile *f = opaque;
 
     qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
-    process_incoming_migration(f);
+    process_incoming_migration(f, qemu_stdio_fd(f));
 }
 
 int fd_start_incoming_migration(const char *infd)
diff --git a/migration-tcp.c b/migration-tcp.c
index 62c9309..765970c 100644
--- a/migration-tcp.c
+++ b/migration-tcp.c
@@ -135,7 +135,7 @@ static void tcp_accept_incoming_migration(void *opaque)
         goto out;
     }
 
-    process_incoming_migration(f);
+    process_incoming_migration(f, c);
     return;
 
 out:
diff --git a/migration-unix.c b/migration-unix.c
index d8d5dfa..071d4fb 100644
--- a/migration-unix.c
+++ b/migration-unix.c
@@ -145,7 +145,7 @@ static void unix_accept_incoming_migration(void *opaque)
         goto out;
     }
 
-    process_incoming_migration(f);
+    process_incoming_migration(f, c);
     return;
 
 out:
diff --git a/migration.c b/migration.c
index a27ceb3..d821971 100644
--- a/migration.c
+++ b/migration.c
@@ -82,8 +82,9 @@ 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);
@@ -106,6 +107,20 @@ 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, int fd)
+{
+    Coroutine *co = qemu_coroutine_create(process_incoming_migration_co);
+    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
diff --git a/migration.h b/migration.h
index 57572a6..4a35ea7 100644
--- a/migration.h
+++ b/migration.h
@@ -41,7 +41,7 @@ struct MigrationState
     int64_t total_time;
 };
 
-void process_incoming_migration(QEMUFile *f);
+void process_incoming_migration(QEMUFile *f, int fd);
 
 int qemu_start_incoming_migration(const char *uri, Error **errp);
 
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 4/6] migration: remove iohandlers before closing the file
  2012-08-07 15:51 ` [Qemu-devel] [PATCH 4/6] migration: remove iohandlers before closing the file Paolo Bonzini
@ 2012-08-07 18:46   ` Anthony Liguori
  2012-08-08  8:00     ` Paolo Bonzini
  0 siblings, 1 reply; 9+ messages in thread
From: Anthony Liguori @ 2012-08-07 18:46 UTC (permalink / raw)
  To: Paolo Bonzini, qemu-devel; +Cc: owasserm, quintela

Paolo Bonzini <pbonzini@redhat.com> writes:

> This will be needed as soon as process_incoming_migration will set
> handlers on the file.  The patch may be removed if

...?

Regards,

Anthony Liguori
 
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  savevm.c | 3 +++
>  1 file modificato, 3 inserzioni(+)
>
> diff --git a/savevm.c b/savevm.c
> index 57cae52..8f075e5 100644
> --- a/savevm.c
> +++ b/savevm.c
> @@ -210,6 +210,7 @@ static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
>  static int socket_close(void *opaque)
>  {
>      QEMUFileSocket *s = opaque;
> +    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
>      close(s->fd);
>      g_free(s);
>      return 0;
> @@ -238,6 +239,7 @@ static int stdio_pclose(void *opaque)
>  {
>      QEMUFileStdio *s = opaque;
>      int ret;
> +    qemu_set_fd_handler(fileno(s->stdio_file), NULL, NULL, NULL);
>      ret = pclose(s->stdio_file);
>      if (ret == -1) {
>          ret = -errno;
> @@ -250,6 +252,7 @@ static int stdio_fclose(void *opaque)
>  {
>      QEMUFileStdio *s = opaque;
>      int ret = 0;
> +    qemu_set_fd_handler(fileno(s->stdio_file), NULL, NULL, NULL);
>      if (fclose(s->stdio_file) == EOF) {
>          ret = -errno;
>      }
> -- 
> 1.7.11.2

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 4/6] migration: remove iohandlers before closing the file
  2012-08-07 18:46   ` Anthony Liguori
@ 2012-08-08  8:00     ` Paolo Bonzini
  0 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2012-08-08  8:00 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: owasserm, qemu-devel, quintela

Il 07/08/2012 20:46, Anthony Liguori ha scritto:
> 
>> > This will be needed as soon as process_incoming_migration will set
>> > handlers on the file.  The patch may be removed if
> ...?

... we get access to the file descriptor of a QEMUFile in a better way
(i.e. improve patch 6).

Paolo

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2012-08-08  8:01 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-07 15:51 [Qemu-devel] [RFC PATCH 0/6] Run incoming migration in a coroutine Paolo Bonzini
2012-08-07 15:51 ` [Qemu-devel] [PATCH 1/6] migration: clean up server sockets and handlers before invoking process_incoming_migration Paolo Bonzini
2012-08-07 15:51 ` [Qemu-devel] [PATCH 2/6] migration: close socket QEMUFile from socket_close Paolo Bonzini
2012-08-07 15:51 ` [Qemu-devel] [PATCH 3/6] migration: move qemu_fclose to process_incoming_migration Paolo Bonzini
2012-08-07 15:51 ` [Qemu-devel] [PATCH 4/6] migration: remove iohandlers before closing the file Paolo Bonzini
2012-08-07 18:46   ` Anthony Liguori
2012-08-08  8:00     ` Paolo Bonzini
2012-08-07 15:51 ` [Qemu-devel] [PATCH 5/6] migration: handle EAGAIN while reading QEMUFile Paolo Bonzini
2012-08-07 15:51 ` [Qemu-devel] [PATCH 6/6] migration: move process_incoming_migration to a coroutine Paolo Bonzini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).