Message ID | 20180601162749.27406-4-marcandre.lureau@redhat.com |
---|---|
State | New |
Headers | show |
Series | vhost-user for input & GPU | expand |
On 06/01/2018 01:27 PM, Marc-André Lureau wrote: > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > hw/virtio/vhost-user.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c > index ca554d4ff1..cc9298792d 100644 > --- a/hw/virtio/vhost-user.c > +++ b/hw/virtio/vhost-user.c > @@ -869,7 +869,10 @@ static void slave_read(void *opaque) > iov.iov_base = &hdr; > iov.iov_len = VHOST_USER_HDR_SIZE; > > - size = recvmsg(u->slave_fd, &msgh, 0); > + do { > + size = recvmsg(u->slave_fd, &msgh, 0); > + } while (size < 0 && (errno == EINTR || errno == EAGAIN)); > + > if (size != VHOST_USER_HDR_SIZE) { > error_report("Failed to read from slave."); > goto err; > @@ -898,7 +901,10 @@ static void slave_read(void *opaque) > } > > /* Read payload */ > - size = read(u->slave_fd, &payload, hdr.size); > + do { > + size = read(u->slave_fd, &payload, hdr.size); > + } while (size < 0 && (errno == EINTR || errno == EAGAIN)); > + > if (size != hdr.size) { > error_report("Failed to read payload from slave."); > goto err; > @@ -941,7 +947,10 @@ static void slave_read(void *opaque) > iovec[1].iov_base = &payload; > iovec[1].iov_len = hdr.size; > > - size = writev(u->slave_fd, iovec, ARRAY_SIZE(iovec)); > + do { > + size = writev(u->slave_fd, iovec, ARRAY_SIZE(iovec)); > + } while (size < 0 && (errno == EINTR || errno == EAGAIN)); > + > if (size != VHOST_USER_HDR_SIZE + hdr.size) { > error_report("Failed to send msg reply to slave."); > goto err; >
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index ca554d4ff1..cc9298792d 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -869,7 +869,10 @@ static void slave_read(void *opaque) iov.iov_base = &hdr; iov.iov_len = VHOST_USER_HDR_SIZE; - size = recvmsg(u->slave_fd, &msgh, 0); + do { + size = recvmsg(u->slave_fd, &msgh, 0); + } while (size < 0 && (errno == EINTR || errno == EAGAIN)); + if (size != VHOST_USER_HDR_SIZE) { error_report("Failed to read from slave."); goto err; @@ -898,7 +901,10 @@ static void slave_read(void *opaque) } /* Read payload */ - size = read(u->slave_fd, &payload, hdr.size); + do { + size = read(u->slave_fd, &payload, hdr.size); + } while (size < 0 && (errno == EINTR || errno == EAGAIN)); + if (size != hdr.size) { error_report("Failed to read payload from slave."); goto err; @@ -941,7 +947,10 @@ static void slave_read(void *opaque) iovec[1].iov_base = &payload; iovec[1].iov_len = hdr.size; - size = writev(u->slave_fd, iovec, ARRAY_SIZE(iovec)); + do { + size = writev(u->slave_fd, iovec, ARRAY_SIZE(iovec)); + } while (size < 0 && (errno == EINTR || errno == EAGAIN)); + if (size != VHOST_USER_HDR_SIZE + hdr.size) { error_report("Failed to send msg reply to slave."); goto err;
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- hw/virtio/vhost-user.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)