[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 1/5] tap: fix vcpu long time io blocking on tap
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 1/5] tap: fix vcpu long time io blocking on tap |
Date: |
Fri, 19 Dec 2014 13:18:20 +0000 |
From: "Wangkai (Kevin,C)" <address@hidden>
[Adjusted doc comment for grammar.
--Stefan]
Signed-off-by: Wangkai <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
net/tap.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/net/tap.c b/net/tap.c
index bde6b58..1fe0edf 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -189,6 +189,7 @@ static void tap_send(void *opaque)
{
TAPState *s = opaque;
int size;
+ int packets = 0;
while (qemu_can_send_packet(&s->nc)) {
uint8_t *buf = s->buf;
@@ -210,6 +211,17 @@ static void tap_send(void *opaque)
} else if (size < 0) {
break;
}
+
+ /*
+ * When the host keeps receiving more packets while tap_send() is
+ * running we can hog the QEMU global mutex. Limit the number of
+ * packets that are processed per tap_send() callback to prevent
+ * stalling the guest.
+ */
+ packets++;
+ if (packets >= 50) {
+ break;
+ }
}
}
--
2.1.0
- [Qemu-devel] [PULL 0/5] Net patches, Stefan Hajnoczi, 2014/12/19
- [Qemu-devel] [PULL 2/5] net: don't use set/get_pointer() in set/get_netdev(), Stefan Hajnoczi, 2014/12/19
- [Qemu-devel] [PULL 5/5] e1000: defer packets until BM enabled, Stefan Hajnoczi, 2014/12/19
- [Qemu-devel] [PULL 3/5] net: Fuse g_malloc(); memset() into g_new0(), Stefan Hajnoczi, 2014/12/19
- [Qemu-devel] [PULL 4/5] net: Use g_new() & friends where that makes obvious sense, Stefan Hajnoczi, 2014/12/19
- [Qemu-devel] [PULL 1/5] tap: fix vcpu long time io blocking on tap,
Stefan Hajnoczi <=
- Re: [Qemu-devel] [PULL 0/5] Net patches, Peter Maydell, 2014/12/21