Commit 8aeff62d75b72263d855a0b5892b8d52ad6f09e0

Authored by Mark McLoughlin
1 parent e19eb224

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 <markmc@redhat.com>
Showing 1 changed file with 4 additions and 1 deletions
hw/virtio-net.c
@@ -269,6 +269,9 @@ static void virtio_net_handle_ctrl(VirtIODevice *vdev, VirtQueue *vq) @@ -269,6 +269,9 @@ static void virtio_net_handle_ctrl(VirtIODevice *vdev, VirtQueue *vq)
269 269
270 static void virtio_net_handle_rx(VirtIODevice *vdev, VirtQueue *vq) 270 static void virtio_net_handle_rx(VirtIODevice *vdev, VirtQueue *vq)
271 { 271 {
  272 + VirtIONet *n = to_virtio_net(vdev);
  273 +
  274 + qemu_flush_queued_packets(n->vc);
272 } 275 }
273 276
274 static int do_virtio_net_can_receive(VirtIONet *n, int bufsize) 277 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_ @@ -368,7 +371,7 @@ static ssize_t virtio_net_receive(VLANClientState *vc, const uint8_t *buf, size_
368 size_t hdr_len, offset, i; 371 size_t hdr_len, offset, i;
369 372
370 if (!do_virtio_net_can_receive(n, size)) 373 if (!do_virtio_net_can_receive(n, size))
371 - return -1; 374 + return 0;
372 375
373 if (!receive_filter(n, buf, size)) 376 if (!receive_filter(n, buf, size))
374 return size; 377 return size;