summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/drivers/virtio/virtio-net.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/components/drivers/virtio/virtio-net.c b/components/drivers/virtio/virtio-net.c
index e2e1b559a6..c078425cc3 100644
--- a/components/drivers/virtio/virtio-net.c
+++ b/components/drivers/virtio/virtio-net.c
@@ -124,6 +124,19 @@ static struct pbuf *virtio_net_rx(rt_device_t dev)
if (!p)
{
+ level = rt_spin_lock_irqsave(&vnet->rx_lock);
+
+ if (!rt_virtqueue_poll(vq, packet - vnet->rx_packet))
+ {
+ rt_list_remove(&vq->user_list);
+ }
+
+ rt_virtqueue_add_inbuf(vq, packet, sizeof(*packet));
+
+ rt_virtqueue_kick(vq);
+
+ rt_spin_unlock_irqrestore(&vnet->rx_lock, level);
+
return RT_NULL;
}