提交 e85ba9b2 编写于 作者: A Amit Shah 提交者: Anthony Liguori

virtio-serial: Handle scatter/gather input from the guest

Current guests don't send more than one iov but it can change later.
Ensure we handle that case.
Signed-off-by: NAmit Shah <amit.shah@redhat.com>
CC: Avi Kivity <avi@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 e61da14d
......@@ -351,7 +351,8 @@ static void handle_output(VirtIODevice *vdev, VirtQueue *vq)
while (virtqueue_pop(vq, &elem)) {
VirtIOSerialPort *port;
size_t ret;
uint8_t *buf;
size_t ret, buf_size;
port = find_port_by_vq(vser, vq);
if (!port) {
......@@ -374,9 +375,12 @@ static void handle_output(VirtIODevice *vdev, VirtQueue *vq)
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);
buf_size = iov_size(elem.out_sg, elem.out_num);
buf = qemu_malloc(buf_size);
ret = iov_to_buf(elem.out_sg, elem.out_num, buf, 0, buf_size);
ret = port->info->have_data(port, buf, ret);
qemu_free(buf);
next_buf:
virtqueue_push(vq, &elem, ret);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册