qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH 7/8] migration-unix: side channel support on unix ou


From: Lei Li
Subject: [Qemu-devel] [PATCH 7/8] migration-unix: side channel support on unix outgoing
Date: Wed, 25 Sep 2013 22:32:47 +0800

This patch adds side channel support on the outgoing of unix
migration. It will create a pipe and pass the read pipe fd to
destination process by send_pipefd(). If the pipe fd was passed
successfully, the qemu_fopen_pipe will be called with write mode
to send RAM to the write pipe fd.
 
Signed-off-by: Lei Li <address@hidden>
---
 migration-unix.c |   34 +++++++++++++++++++++++++++++++---
 1 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/migration-unix.c b/migration-unix.c
index 651fc5b..0bfc1c7 100644
--- a/migration-unix.c
+++ b/migration-unix.c
@@ -33,16 +33,44 @@
 static void unix_wait_for_connect(int fd, void *opaque)
 {
     MigrationState *s = opaque;
+    int pipefd[2];
 
     if (fd < 0) {
         DPRINTF("migrate connect error\n");
-        s->file = NULL;
-        migrate_fd_error(s);
+        goto fail;
     } else {
         DPRINTF("migrate connect success\n");
-        s->file = qemu_fopen_socket(fd, "wb");
+
+        if (s->enabled_capabilities[MIGRATION_CAPABILITY_UNIX_PAGE_FLIPPING]) {
+            if (pipe(pipefd) < 0) {
+                DPRINTF("qemu_fopen_pipe: %s", strerror(errno));
+                goto fail;
+            }
+
+            /* Send pipefd[0] to destination QEMU process */
+            if (send_pipefd(fd, pipefd[0]) < 0) {
+                DPRINTF("failed to pass pipe\n");
+                goto fail;
+            }
+
+            s->file = qemu_fopen_pipe(pipefd[1], "w");
+        } else {
+            s->file = qemu_fopen_socket(fd, "wb");
+        }
+
+        if (s->file == NULL) {
+            DPRINTF("failed to open migration target");
+            migrate_fd_error(s);
+            return;
+        }
+
         migrate_fd_connect(s);
+        return;
     }
+
+fail:
+    s->file = NULL;
+    migrate_fd_error(s);
 }
 
 void unix_start_outgoing_migration(MigrationState *s, const char *path, Error 
**errp)
-- 
1.7.7.6




reply via email to

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