From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: Re: [Qemu-devel] [PATCH 02/18] Introduce read() to FdMigrationState. Date: Thu, 10 Feb 2011 10:54:01 +0100 Message-ID: <4D53B5B9.8070509@codemonkey.ws> References: <1297330258-20494-1-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> <1297330258-20494-3-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, qemu-devel@nongnu.org, kwolf@redhat.com, aliguori@us.ibm.com, mtosatti@redhat.com, ananth@in.ibm.com, mst@redhat.com, dlaor@redhat.com, vatsa@linux.vnet.ibm.com, blauwirbel@gmail.com, ohmura.kei@lab.ntt.co.jp, avi@redhat.com, pbonzini@redhat.com, psuriset@linux.vnet.ibm.com, stefanha@linux.vnet.ibm.com To: Yoshiaki Tamura Return-path: Received: from mail-fx0-f46.google.com ([209.85.161.46]:59796 "EHLO mail-fx0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751111Ab1BJJyH (ORCPT ); Thu, 10 Feb 2011 04:54:07 -0500 Received: by fxm20 with SMTP id 20so1260510fxm.19 for ; Thu, 10 Feb 2011 01:54:05 -0800 (PST) In-Reply-To: <1297330258-20494-3-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> Sender: kvm-owner@vger.kernel.org List-ID: On 02/10/2011 10:30 AM, Yoshiaki Tamura wrote: > Currently FdMigrationState doesn't support read(), and this patch > introduces it to get response from the other side. > > Signed-off-by: Yoshiaki Tamura > Migration is unidirectional. Changing this is fundamental and not something to be done lightly. I thought we previously discussed using a protocol wrapper around the existing migration protocol? Regards, Anthony Liguori > --- > migration-tcp.c | 15 +++++++++++++++ > migration.c | 13 +++++++++++++ > migration.h | 3 +++ > 3 files changed, 31 insertions(+), 0 deletions(-) > > diff --git a/migration-tcp.c b/migration-tcp.c > index b55f419..55777c8 100644 > --- a/migration-tcp.c > +++ b/migration-tcp.c > @@ -39,6 +39,20 @@ static int socket_write(FdMigrationState *s, const void * buf, size_t size) > return send(s->fd, buf, size, 0); > } > > +static int socket_read(FdMigrationState *s, const void * buf, size_t size) > +{ > + ssize_t len; > + > + do { > + len = recv(s->fd, (void *)buf, size, 0); > + } while (len == -1&& socket_error() == EINTR); > + if (len == -1) { > + len = -socket_error(); > + } > + > + return len; > +} > + > static int tcp_close(FdMigrationState *s) > { > DPRINTF("tcp_close\n"); > @@ -94,6 +108,7 @@ MigrationState *tcp_start_outgoing_migration(Monitor *mon, > > s->get_error = socket_errno; > s->write = socket_write; > + s->read = socket_read; > s->close = tcp_close; > s->mig_state.cancel = migrate_fd_cancel; > s->mig_state.get_status = migrate_fd_get_status; > diff --git a/migration.c b/migration.c > index 3612572..f0df5fc 100644 > --- a/migration.c > +++ b/migration.c > @@ -340,6 +340,19 @@ ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size) > return ret; > } > > +int migrate_fd_get_buffer(void *opaque, uint8_t *data, int64_t pos, size_t size) > +{ > + FdMigrationState *s = opaque; > + int ret; > + > + ret = s->read(s, data, size); > + if (ret == -1) { > + ret = -(s->get_error(s)); > + } > + > + return ret; > +} > + > void migrate_fd_connect(FdMigrationState *s) > { > int ret; > diff --git a/migration.h b/migration.h > index 2170792..88a6987 100644 > --- a/migration.h > +++ b/migration.h > @@ -48,6 +48,7 @@ struct FdMigrationState > int (*get_error)(struct FdMigrationState*); > int (*close)(struct FdMigrationState*); > int (*write)(struct FdMigrationState*, const void *, size_t); > + int (*read)(struct FdMigrationState *, const void *, size_t); > void *opaque; > }; > > @@ -116,6 +117,8 @@ void migrate_fd_put_notify(void *opaque); > > ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size); > > +int migrate_fd_get_buffer(void *opaque, uint8_t *data, int64_t pos, size_t size); > + > void migrate_fd_connect(FdMigrationState *s); > > void migrate_fd_put_ready(void *opaque); >