|
![](https://seccdn.libravatar.org/avatar/e0cb5334e5a1824445e4ed5d9488fcffc5d667adb8665f37581b8d299b22ec59?s=16&d=retro) |
5544c1b |
From 542fa14530022044ab577c543fba83202d52b703 Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
From: Amit Shah <amit.shah@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
Date: Mon, 21 Mar 2011 22:05:10 +0100
|
|
![](https://seccdn.libravatar.org/avatar/e0cb5334e5a1824445e4ed5d9488fcffc5d667adb8665f37581b8d299b22ec59?s=16&d=retro) |
5544c1b |
Subject: [PATCH] char: Throttle when host connection is down#
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
When the host-side connection goes down, throttle the virtio-serial bus
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
and later unthrottle when a connection gets established. This helps
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
prevent any lost IO (guest->host) while the host connection was down.
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
Bugzilla: 621484
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
This commit actually helps the bug mentioned above as no writes will now
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
get lost because of the throttling done here. With just the patches
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
sent earlier for that bug, one write will end up getting lost in the
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
worst case (host d/c, guest write, host connect).
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/e0cb5334e5a1824445e4ed5d9488fcffc5d667adb8665f37581b8d299b22ec59?s=16&d=retro) |
bd56df9 |
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
---
|
|
![](https://seccdn.libravatar.org/avatar/e0cb5334e5a1824445e4ed5d9488fcffc5d667adb8665f37581b8d299b22ec59?s=16&d=retro) |
b6dd5ac |
qemu-char.c | 14 ++++++++++++++
|
|
![](https://seccdn.libravatar.org/avatar/a90c8fc1fa6bf435277bf1a6f0e8dcfa5081a34b29502febdc7c45358f87105e?s=16&d=retro) |
329b588 |
1 file changed, 14 insertions(+)
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
diff --git a/qemu-char.c b/qemu-char.c
|
|
![](https://seccdn.libravatar.org/avatar/e0cb5334e5a1824445e4ed5d9488fcffc5d667adb8665f37581b8d299b22ec59?s=16&d=retro) |
5544c1b |
index 9f8608a..bfc94a5 100644
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
--- a/qemu-char.c
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+++ b/qemu-char.c
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
@@ -140,6 +140,9 @@ static void qemu_chr_generic_open_bh(void *opaque)
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
{
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
CharDriverState *s = opaque;
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
qemu_chr_be_event(s, CHR_EVENT_OPENED);
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ if (s->write_blocked) {
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ char_write_unblocked(s);
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
qemu_bh_delete(s->bh);
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
s->bh = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
}
|
|
![](https://seccdn.libravatar.org/avatar/e0cb5334e5a1824445e4ed5d9488fcffc5d667adb8665f37581b8d299b22ec59?s=16&d=retro) |
5544c1b |
@@ -2244,6 +2247,17 @@ static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
ret = send_all(chr, s->fd, buf, len);
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
if (ret == -1 && errno == EPIPE) {
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
tcp_closed(chr);
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ if (chr->chr_enable_write_fd_handler && chr->chr_write_unblocked) {
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ /*
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ * Since we haven't written out anything, let's say
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ * we're throttled. This will prevent any output from
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ * the guest getting lost if host-side chardev goes
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ * down. Unthrottle when we re-connect.
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ */
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ chr->write_blocked = true;
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
}
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
return ret;
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
} else {
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
--
|
|
![](https://seccdn.libravatar.org/avatar/e0cb5334e5a1824445e4ed5d9488fcffc5d667adb8665f37581b8d299b22ec59?s=16&d=retro) |
5544c1b |
1.7.12.1
|
|
![](https://seccdn.libravatar.org/avatar/70cc2f818f82d9376966cb929baa882ad4848e1a2dcae81bc5eaf64ed1894721?s=16&d=retro) |
d4cdad5 |
|