[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 05/17] migration-local: introduce qemu_fopen_socket_
From: |
Lei Li |
Subject: |
[Qemu-devel] [PATCH 05/17] migration-local: introduce qemu_fopen_socket_local() |
Date: |
Thu, 21 Nov 2013 17:11:28 +0800 |
Add qemu_fopen_socket_local() to open QEMUFileLocal introduced
earlier. It will create a pipe in write mode if unix_page_flipping
is enabled, adjust qemu_local_close() to close pipe as well.
Signed-off-by: Lei Li <address@hidden>
---
include/migration/qemu-file.h | 2 +
migration-local.c | 46 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h
index 0f757fb..f9b104a 100644
--- a/include/migration/qemu-file.h
+++ b/include/migration/qemu-file.h
@@ -99,6 +99,8 @@ QEMUFile *qemu_fopen(const char *filename, const char *mode);
QEMUFile *qemu_fdopen(int fd, const char *mode);
QEMUFile *qemu_fopen_socket(int fd, const char *mode);
QEMUFile *qemu_popen_cmd(const char *command, const char *mode);
+QEMUFile *qemu_fopen_socket_local(int sockfd, const char *mode);
+
int qemu_get_fd(QEMUFile *f);
int qemu_fclose(QEMUFile *f);
int64_t qemu_ftell(QEMUFile *f);
diff --git a/migration-local.c b/migration-local.c
index 8b9e10e..28da05b 100644
--- a/migration-local.c
+++ b/migration-local.c
@@ -103,6 +103,12 @@ static int qemu_local_close(void *opaque)
QEMUFileLocal *s = opaque;
closesocket(s->sockfd);
+
+ if (s->unix_page_flipping) {
+ close(s->pipefd[0]);
+ close(s->pipefd[1]);
+ }
+
g_free(s);
return 0;
@@ -119,3 +125,43 @@ static const QEMUFileOps pipe_write_ops = {
.writev_buffer = qemu_local_writev_buffer,
.close = qemu_local_close,
};
+
+QEMUFile *qemu_fopen_socket_local(int sockfd, const char *mode)
+{
+ QEMUFileLocal *s;
+ int pipefd[2];
+
+ if (qemu_file_mode_is_not_valid(mode)) {
+ return NULL;
+ }
+
+ s = g_malloc0(sizeof(QEMUFileLocal));
+ s->sockfd = sockfd;
+
+ if (migrate_unix_page_flipping()) {
+ s->unix_page_flipping = 1;
+ }
+
+ if (mode[0] == 'w') {
+ if (s->unix_page_flipping) {
+ if (pipe(pipefd) < 0) {
+ fprintf(stderr, "failed to create PIPE\n");
+ goto fail;
+ }
+
+ s->pipefd[0] = pipefd[0];
+ s->pipefd[1] = pipefd[1];
+ }
+
+ qemu_set_block(s->sockfd);
+ s->file = qemu_fopen_ops(s, &pipe_write_ops);
+ } else {
+ s->file = qemu_fopen_ops(s, &pipe_read_ops);
+ }
+
+ return s->file;
+
+fail:
+ g_free(s);
+ return NULL;
+}
--
1.7.7.6
- [Qemu-devel] [PATCH 0/17 v3] Localhost migration with side channel for ram, Lei Li, 2013/11/21
- [Qemu-devel] [PATCH 02/17] migration: add migrate_unix_page_flipping(), Lei Li, 2013/11/21
- [Qemu-devel] [PATCH 03/17] qmp-command.hx: add missing docs for migration capabilites, Lei Li, 2013/11/21
- [Qemu-devel] [PATCH 01/17] QAPI: introduce migration capability unix_page_flipping, Lei Li, 2013/11/21
- [Qemu-devel] [PATCH 04/17] migration-local: add QEMUFileLocal with socket based QEMUFile, Lei Li, 2013/11/21
- [Qemu-devel] [PATCH 05/17] migration-local: introduce qemu_fopen_socket_local(),
Lei Li <=
- [Qemu-devel] [PATCH 06/17] migration-local: add send_pipefd(), Lei Li, 2013/11/21
- [Qemu-devel] [PATCH 07/17] migration-local: override before_ram_iterate to send pipefd, Lei Li, 2013/11/21
- [Qemu-devel] [PATCH 08/17] add unix_msgfd_lookup() to callback get_buffer, Lei Li, 2013/11/21
- [Qemu-devel] [PATCH 10/17] migration-local: override save_page for page transmit, Lei Li, 2013/11/21