[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 9/9] virtio-serial: Handle scatter/gather input from
From: |
Amit Shah |
Subject: |
[Qemu-devel] [PATCH 9/9] virtio-serial: Handle scatter/gather input from the guest |
Date: |
Tue, 23 Mar 2010 20:00:19 +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 fe976ec..2ca3c0a 100644
--- a/hw/virtio-serial-bus.c
+++ b/hw/virtio-serial-bus.c
@@ -355,11 +355,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;
}
@@ -369,16 +370,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] v2: Fixes, new way of discovering ports, Amit Shah, 2010/03/23
- [Qemu-devel] [PATCH 1/9] virtio-serial-bus: save/load: Ensure target has enough ports, Amit Shah, 2010/03/23
- [Qemu-devel] [PATCH 2/9] virtio-serial-bus: save/load: Ensure nr_ports on src and dest are same., Amit Shah, 2010/03/23
- [Qemu-devel] [PATCH 3/9] virtio-serial: Remove redundant check for 0-sized write request, Amit Shah, 2010/03/23
- [Qemu-devel] [PATCH 4/9] virtio-serial: Update copyright year to 2010, Amit Shah, 2010/03/23
- [Qemu-devel] [PATCH 5/9] virtio-serial: save/load: Ensure we have hot-plugged ports instantiated, Amit Shah, 2010/03/23
- [Qemu-devel] [PATCH 6/9] virtio-serial-bus: Use control messages to notify guest of new ports, Amit Shah, 2010/03/23
- [Qemu-devel] [PATCH 7/9] virtio-serial-bus: Let the guest know of host connection changes after migration, Amit Shah, 2010/03/23
- [Qemu-devel] [PATCH 8/9] virtio-serial: Handle scatter-gather buffers for control messages, Amit Shah, 2010/03/23
- [Qemu-devel] [PATCH 9/9] virtio-serial: Handle scatter/gather input from the guest,
Amit Shah <=
- [Qemu-devel] Re: [PATCH 9/9] virtio-serial: Handle scatter/gather input from the guest, Amit Shah, 2010/03/23
[Qemu-devel] Re: [PATCH 0/9] v2: Fixes, new way of discovering ports, Juan Quintela, 2010/03/23