From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53522) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y1xSX-0003le-Mf for qemu-devel@nongnu.org; Fri, 19 Dec 2014 08:19:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Y1xSS-00005t-QH for qemu-devel@nongnu.org; Fri, 19 Dec 2014 08:19:09 -0500 Received: from mx1.redhat.com ([209.132.183.28]:54001) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y1xSS-00005S-JP for qemu-devel@nongnu.org; Fri, 19 Dec 2014 08:19:04 -0500 From: Stefan Hajnoczi Date: Fri, 19 Dec 2014 13:18:20 +0000 Message-Id: <1418995104-26262-2-git-send-email-stefanha@redhat.com> In-Reply-To: <1418995104-26262-1-git-send-email-stefanha@redhat.com> References: <1418995104-26262-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [PULL 1/5] tap: fix vcpu long time io blocking on tap List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , Stefan Hajnoczi , "Wangkai (Kevin, C)" From: "Wangkai (Kevin,C)" [Adjusted doc comment for grammar. --Stefan] Signed-off-by: Wangkai Signed-off-by: Stefan Hajnoczi --- 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