|
From: | Lei Li |
Subject: | Re: [Qemu-devel] [PATCH 09/17] migration-local: override before_ram_iterate to send pipefd |
Date: | Fri, 25 Oct 2013 12:16:19 +0800 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 |
On 10/24/2013 10:07 PM, Paolo Bonzini wrote:
Il 22/10/2013 04:25, Lei Li ha scritto:Override befor_ram_iterate to send pipefd. It will write the RAM_SAVE_FLAG_HOOK flags which will trigger the load hook to receive it. Signed-off-by: Lei Li <address@hidden> --- migration-local.c | 26 ++++++++++++++++++++++++++ 1 files changed, 26 insertions(+), 0 deletions(-) diff --git a/migration-local.c b/migration-local.c index ed0ae6c..92c661c 100644 --- a/migration-local.c +++ b/migration-local.c @@ -114,6 +114,31 @@ static int qemu_local_close(void *opaque) return 0; }+static int send_pipefd(int sockfd, int pipefd);+ +static int qemu_local_send_pipefd(QEMUFile *f, void *opaque, + uint64_t flags) +{ + QEMUFileLocal *s = opaque; + int ret; + + if (s->unix_page_flipping) { + /* Avoid sending pipe fd again in ram_save_complete() stage */ + if (flags != RAM_CONTROL_FINISH) {Why not "flags == RAM_CONTROL_SETUP"?
As now it actually has two stages SETUP and FINISH, 'flags == RAM_CONTROL_SETUP' is more straight forward. Thanks!
+ qemu_put_be64(f, RAM_SAVE_FLAG_HOOK); + qemu_fflush(f); + ret = send_pipefd(s->sockfd, s->pipefd[0]); + if (ret < 0) { + fprintf(stderr, "failed to pass pipe\n"); + return ret; + } + DPRINTF("pipe fd was sent\n"); + } + } + + return 0; +} + static const QEMUFileOps pipe_read_ops = { .get_fd = qemu_local_get_sockfd, .get_buffer = qemu_local_get_buffer, @@ -124,6 +149,7 @@ static const QEMUFileOps pipe_write_ops = { .get_fd = qemu_local_get_sockfd, .writev_buffer = qemu_local_writev_buffer, .close = qemu_local_close, + .before_ram_iterate = qemu_local_send_pipefd, };QEMUFile *qemu_fopen_socket_local(int sockfd, const char *mode)Otherwise looks good. Paolo
-- Lei
[Prev in Thread] | Current Thread | [Next in Thread] |