virtio-serial-bus: let chardev know the exact number of bytes requested
Using the virtqueue_avail_bytes() function had an unnecessarily crippling effect on the number of bytes needed by the guest as reported to the chardev layer in the can_read() callback. Using the new virtqueue_get_avail_bytes() function will let us advertise the exact number of bytes we can send to the guest. Signed-off-by: Amit Shah <amit.shah@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
0d8d769085
commit
ad3005ad8c
@ -287,6 +287,7 @@ ssize_t virtio_serial_write(VirtIOSerialPort *port, const uint8_t *buf,
|
||||
size_t virtio_serial_guest_ready(VirtIOSerialPort *port)
|
||||
{
|
||||
VirtQueue *vq = port->ivq;
|
||||
unsigned int bytes;
|
||||
|
||||
if (!virtio_queue_ready(vq) ||
|
||||
!(port->vser->vdev.status & VIRTIO_CONFIG_S_DRIVER_OK) ||
|
||||
@ -296,14 +297,8 @@ size_t virtio_serial_guest_ready(VirtIOSerialPort *port)
|
||||
if (use_multiport(port->vser) && !port->guest_connected) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (virtqueue_avail_bytes(vq, 4096, 0)) {
|
||||
return 4096;
|
||||
}
|
||||
if (virtqueue_avail_bytes(vq, 1, 0)) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
virtqueue_get_avail_bytes(vq, &bytes, NULL);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
static void flush_queued_data_bh(void *opaque)
|
||||
|
Loading…
Reference in New Issue
Block a user