[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 5/9] virtio-serial: Handle scatter/gather input from
From: |
Amit Shah |
Subject: |
[Qemu-devel] [PATCH 5/9] virtio-serial: Handle scatter/gather input from the guest |
Date: |
Fri, 19 Mar 2010 17:28:42 +0530 |
Current guests don't send more than one iov but it can change later.
Ensure we handle that case.
Signed-off-by: Amit Shah <address@hidden>
CC: Avi Kivity <address@hidden>
---
hw/virtio-serial-bus.c | 22 +++++++++++++++-------
1 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
index d5887ab..19e8c59 100644
--- a/hw/virtio-serial-bus.c
+++ b/hw/virtio-serial-bus.c
@@ -338,11 +338,12 @@ static void handle_output(VirtIODevice *vdev, VirtQueue
*vq)
while (virtqueue_pop(vq, &elem)) {
VirtIOSerialPort *port;
- size_t ret;
+ size_t len;
+ unsigned int i;
+ len = 0;
port = find_port_by_vq(vser, vq);
if (!port) {
- ret = 0;
goto next_buf;
}
@@ -352,16 +353,23 @@ static void handle_output(VirtIODevice *vdev, VirtQueue
*vq)
* with it. Just ignore the data in that case.
*/
if (!port->info->have_data) {
- ret = 0;
goto next_buf;
}
- /* The guest always sends only one sg */
- ret = port->info->have_data(port, elem.out_sg[0].iov_base,
- elem.out_sg[0].iov_len);
+ for (i = 0; i < elem.out_num; i++) {
+ size_t ret;
+
+ ret = port->info->have_data(port, elem.out_sg[0].iov_base,
+ elem.out_sg[0].iov_len);
+ if (ret < elem.out_sg[0].iov_len) {
+ /* We couldn't write the entire iov; stop processing now */
+ break;
+ }
+ len += ret;
+ }
next_buf:
- virtqueue_push(vq, &elem, ret);
+ virtqueue_push(vq, &elem, len);
}
virtio_notify(vdev, vq);
}
--
1.6.2.5
- [Qemu-devel] [PATCH 0/9] virtio-serial fixes, ABI updates, Amit Shah, 2010/03/19
- [Qemu-devel] [PATCH 1/9] virtio-serial-bus: save/load: Ensure target has enough ports, Amit Shah, 2010/03/19
- [Qemu-devel] [PATCH 2/9] virtio-serial-bus: save/load: Ensure nr_ports on src and dest are same., Amit Shah, 2010/03/19
- [Qemu-devel] [PATCH 3/9] virtio-serial: save/load: Ensure we have hot-plugged ports instantiated, Amit Shah, 2010/03/19
- [Qemu-devel] [PATCH 4/9] virtio-serial: Handle scatter-gather buffers for control messages, Amit Shah, 2010/03/19
- [Qemu-devel] [PATCH 5/9] virtio-serial: Handle scatter/gather input from the guest,
Amit Shah <=
- [Qemu-devel] [PATCH 6/9] virtio-serial: Remove redundant check for 0-sized write request, Amit Shah, 2010/03/19
- [Qemu-devel] [PATCH 7/9] virtio-serial: Update copyright year to 2010, Amit Shah, 2010/03/19
- [Qemu-devel] [PATCH 8/9] virtio-serial-bus: Use a bitmap in virtio config space for active ports, Amit Shah, 2010/03/19
- [Qemu-devel] [PATCH 9/9] virtio-serial-bus: Let the guest know of host connection changes after migration, Amit Shah, 2010/03/19
- [Qemu-devel] Re: [PATCH 4/9] virtio-serial: Handle scatter-gather buffers for control messages, Avi Kivity, 2010/03/20
- Re: [Qemu-devel] Re: [PATCH 4/9] virtio-serial: Handle scatter-gather buffers for control messages, Amit Shah, 2010/03/22
- Re: [Qemu-devel] Re: [PATCH 4/9] virtio-serial: Handle scatter-gather buffers for control messages, Michael S. Tsirkin, 2010/03/23
- Re: [Qemu-devel] Re: [PATCH 4/9] virtio-serial: Handle scatter-gather buffers for control messages, Amit Shah, 2010/03/23
- Re: [Qemu-devel] Re: [PATCH 4/9] virtio-serial: Handle scatter-gather buffers for control messages, Michael S. Tsirkin, 2010/03/23
[Qemu-devel] Re: [PATCH 0/9] virtio-serial fixes, ABI updates, Michael S. Tsirkin, 2010/03/21