[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 06/17] migration-local: introduce qemu_fopen_socket_
From: |
Lei Li |
Subject: |
[Qemu-devel] [PATCH 06/17] migration-local: introduce qemu_fopen_socket_local() |
Date: |
Tue, 22 Oct 2013 11:25:30 +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..6214ff9 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
- Re: [Qemu-devel] [PATCH 01/17] rename is_active to is_block_active, (continued)
- [Qemu-devel] [PATCH 02/17] QAPI: introduce magration capability unix_page_flipping, Lei Li, 2013/10/21
- [Qemu-devel] [PATCH 03/17] migration: add migrate_unix_page_flipping(), Lei Li, 2013/10/21
- [Qemu-devel] [PATCH 04/17] qmp-command.hx: add missing docs for migration capabilites, Lei Li, 2013/10/21
- [Qemu-devel] [PATCH 05/17] migration-local: add QEMUFileLocal with socket based QEMUFile, Lei Li, 2013/10/21
- [Qemu-devel] [PATCH 06/17] migration-local: introduce qemu_fopen_socket_local(),
Lei Li <=
- [Qemu-devel] [PATCH 07/17] migration-local: add send_pipefd(), Lei Li, 2013/10/21
- [Qemu-devel] [PATCH 08/17] migration-local: add recv_pipefd(), Lei Li, 2013/10/21
- [Qemu-devel] [PATCH 09/17] migration-local: override before_ram_iterate to send pipefd, Lei Li, 2013/10/21
[Qemu-devel] [PATCH 10/17] migration-local: override save_page for page transmit, Lei Li, 2013/10/21
[Qemu-devel] [PATCH 11/17] savevm: adjust ram_control_save_page for page flipping, Lei Li, 2013/10/21