From: Mark McLoughlin Date: Wed, 29 Apr 2009 12:40:02 +0000 (+0100) Subject: virtio-net: implement rx packet queueing X-Git-Tag: v0.11.0-rc0~433^2~7 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=8aeff62d75b72263d855a0b5892b8d52ad6f09e0;p=qemu-xen-4.5-testing.git virtio-net: implement rx packet queueing If we don't have room to receive a packet, we return zero from virtio_net_receive() and call qemu_flush_queued_packets() as soon as space becomes available. Signed-off-by: Mark McLoughlin --- diff --git a/hw/virtio-net.c b/hw/virtio-net.c index 6b34c5afc..a3ba89031 100644 --- a/hw/virtio-net.c +++ b/hw/virtio-net.c @@ -269,6 +269,9 @@ static void virtio_net_handle_ctrl(VirtIODevice *vdev, VirtQueue *vq) static void virtio_net_handle_rx(VirtIODevice *vdev, VirtQueue *vq) { + VirtIONet *n = to_virtio_net(vdev); + + qemu_flush_queued_packets(n->vc); } static int do_virtio_net_can_receive(VirtIONet *n, int bufsize) @@ -368,7 +371,7 @@ static ssize_t virtio_net_receive(VLANClientState *vc, const uint8_t *buf, size_ size_t hdr_len, offset, i; if (!do_virtio_net_can_receive(n, size)) - return -1; + return 0; if (!receive_filter(n, buf, size)) return size;