tap: fix vcpu long time io blocking on tap
[Adjusted doc comment for grammar. --Stefan] Signed-off-by: Wangkai <wangkai86@huawei.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
86b182ac0e
commit
756ae78b27
12
net/tap.c
12
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user