| From 738da364d19bd99b70c79cb1174eef0e19f8e368 Mon Sep 17 00:00:00 2001 |
| From: Amit Shah <amit.shah@redhat.com> |
| Date: Mon, 21 Mar 2011 22:06:41 +0100 |
| Subject: [PATCH 108/114] virtio-console: Enable port throttling when chardev |
| is slow to consume data |
| |
| When a chardev indicates it can't accept more data, we tell the |
| virtio-serial code to stop sending us any more data till we tell |
| otherwise. This helps in guests continuing to run normally while the vq |
| keeps getting full and eventually the guest stops queueing more data. |
| As soon as the chardev indicates it can accept more data, start pushing! |
| |
| Signed-off-by: Amit Shah <amit.shah@redhat.com> |
| |
| hw/virtio-console.c | 11 +++++++++++ |
| 1 file changed, 11 insertions(+) |
| |
| diff --git a/hw/virtio-console.c b/hw/virtio-console.c |
| index 066590c..2b5e515 100644 |
| |
| |
| @@ -20,6 +20,16 @@ typedef struct VirtConsole { |
| CharDriverState *chr; |
| } VirtConsole; |
| |
| +/* |
| + * Callback function that's called from chardevs when backend becomes |
| + * writable. |
| + */ |
| +static void chr_write_unblocked(void *opaque) |
| +{ |
| + VirtConsole *vcon = opaque; |
| + |
| + virtio_serial_throttle_port(&vcon->port, false); |
| +} |
| |
| /* Callback function that's called when the guest sends us data */ |
| static ssize_t flush_buf(VirtIOSerialPort *port, const uint8_t *buf, size_t len) |
| @@ -110,6 +120,7 @@ static const QemuChrHandlers chr_handlers = { |
| .fd_can_read = chr_can_read, |
| .fd_read = chr_read, |
| .fd_event = chr_event, |
| + .fd_write_unblocked = chr_write_unblocked, |
| }; |
| |
| static int virtconsole_initfn(VirtIOSerialPort *port) |
| -- |
| 1.7.10.4 |
| |