qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]