[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 16/18] migration-local: implementation of incoming p
From: |
Lei Li |
Subject: |
[Qemu-devel] [PATCH 16/18] migration-local: implementation of incoming part |
Date: |
Wed, 21 Aug 2013 15:18:53 +0800 |
Implementation of incoming part of localhost migration.
Signed-off-by: Lei Li <address@hidden>
---
include/migration/migration.h | 2 +
include/migration/qemu-file.h | 8 ++--
migration-local.c | 99 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 105 insertions(+), 4 deletions(-)
diff --git a/include/migration/migration.h b/include/migration/migration.h
index a04f050..232f1d5 100644
--- a/include/migration/migration.h
+++ b/include/migration/migration.h
@@ -94,6 +94,8 @@ void rdma_start_incoming_migration(const char *host_port,
Error **errp);
void local_start_outgoing_migration(void *opaque, const char *uri, Error
**errp);
+void local_start_incoming_migration(const char *uri, Error **errp);
+
void migrate_fd_error(MigrationState *s);
void migrate_fd_connect(MigrationState *s);
diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h
index 0f757fb..a34d418 100644
--- a/include/migration/qemu-file.h
+++ b/include/migration/qemu-file.h
@@ -77,10 +77,10 @@ typedef int (QEMURamHookFunc)(QEMUFile *f, void *opaque,
uint64_t flags);
* is saved (such as RDMA, for example.)
*/
typedef size_t (QEMURamSaveFunc)(QEMUFile *f, void *opaque,
- ram_addr_t block_offset,
- ram_addr_t offset,
- size_t size,
- int *bytes_sent);
+ ram_addr_t block_offset,
+ ram_addr_t offset,
+ size_t size,
+ int *bytes_sent);
typedef struct QEMUFileOps {
QEMUFilePutBufferFunc *put_buffer;
diff --git a/migration-local.c b/migration-local.c
index cf4a091..501371a 100644
--- a/migration-local.c
+++ b/migration-local.c
@@ -294,3 +294,102 @@ fail:
g_free(local);
migrate_fd_error(s);
}
+
+
+/**********************************************************************
+ * Incoming part
+ */
+
+static void unix_accept_local_incoming(void *opaque)
+{
+ struct sockaddr_un addr;
+ socklen_t addrlen = sizeof(addr);
+ int s = (intptr_t)opaque;
+ QEMUFile *f;
+ int c;
+
+ 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 out;
+ }
+
+ f = qemu_fopen_local(c, "rb");
+ if (f == NULL) {
+ fprintf(stderr, "could not qemu_fopen socket\n");
+ goto out;
+ }
+
+ start_local_incoming_migration(f);
+
+ return;
+
+out:
+ close(c);
+}
+
+static void unix_local_incoming_connect(const char *path, Error **errp)
+{
+ int ret;
+
+ ret = unix_listen(path, NULL, 0, errp);
+ if (ret < 0) {
+ return;
+ }
+
+ qemu_set_fd_handler2(ret, NULL, unix_accept_local_incoming, NULL,
+ (void *)(intptr_t)ret);
+}
+void local_start_incoming_migration(const char *uri, Error **errp)
+{
+ QEMUFileLocal *s = g_malloc0(sizeof(*s));
+ Error *local_err = NULL;
+
+ DPRINTF("Starting local incoming migration\n");
+
+ if (uri) {
+ unix_local_incoming_connect(uri, errp);
+ } else {
+ goto err;
+ }
+
+ DPRINTF("unix_listen success\n");
+
+ return;
+
+err:
+ error_propagate(errp, local_err);
+ g_free(s);
+}
+
+static void start_local_incoming_migration(QEMUFile *f)
+{
+ int ret;
+
+ ret = qemu_loadvm_state(f);
+ if (ret < 0) {
+ fprintf(stderr, "load of migration failed\n");
+ exit(EXIT_FAILURE);
+ }
+ qemu_announce_self();
+
+ DPRINTF("successfully loaded vm state\n");
+
+ bdrv_clear_incoming_migration_all();
+ /* Make sure all file formats flush their mutable metadata */
+ bdrv_invalidate_cache_all();
+
+ if (autostart) {
+ vm_start();
+ } else {
+ runstate_set(RUN_STATE_PAUSED);
+ }
+}
--
1.7.7.6
- Re: [Qemu-devel] [PATCH 11/18] migration: introduce capability localhost, (continued)
- Re: [Qemu-devel] [PATCH 11/18] migration: introduce capability localhost, Eric Blake, 2013/08/21
- Re: [Qemu-devel] [PATCH 11/18] migration: introduce capability localhost, Paolo Bonzini, 2013/08/21
- Re: [Qemu-devel] [PATCH 11/18] migration: introduce capability localhost, Michael R. Hines, 2013/08/22
- Re: [Qemu-devel] [PATCH 11/18] migration: introduce capability localhost, Paolo Bonzini, 2013/08/23
- Re: [Qemu-devel] [PATCH 11/18] migration: introduce capability localhost, Lei Li, 2013/08/23
- Re: [Qemu-devel] [PATCH 11/18] migration: introduce capability localhost, Paolo Bonzini, 2013/08/23
- Re: [Qemu-devel] [PATCH 11/18] migration: introduce capability localhost, Lei Li, 2013/08/23
[Qemu-devel] [PATCH 12/18] arch_init: factor out ram_save_blocks(), Lei Li, 2013/08/21
[Qemu-devel] [PATCH 14/18] arch_init: skip migration_bitmap_sync for local migration, Lei Li, 2013/08/21
[Qemu-devel] [PATCH 16/18] migration-local: implementation of incoming part,
Lei Li <=
[Qemu-devel] [PATCH 15/18] migration: adjust migration_thread for local migration, Lei Li, 2013/08/21
[Qemu-devel] [PATCH 13/18] arch_init: adjust ram_save_setup() for migrate_is_localhost, Lei Li, 2013/08/21