diff options
Diffstat (limited to 'components')
| -rw-r--r-- | components/drivers/virtio/virtio-net.c | 13 |
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; } |
