Commit 8aeff62d authored by Mark McLoughlin's avatar Mark McLoughlin
Browse files

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: default avatarMark McLoughlin <markmc@redhat.com>
parent e19eb224
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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;