MCPcopy Create free account
hub / github.com/F-Stack/f-stack / async_poll_dequeue_completed

Function async_poll_dequeue_completed

dpdk/lib/vhost/virtio_net.c:3672–3718  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3670}
3671
3672static __rte_always_inline uint16_t
3673async_poll_dequeue_completed(struct virtio_net *dev, struct vhost_virtqueue *vq,
3674 struct rte_mbuf **pkts, uint16_t count, int16_t dma_id,
3675 uint16_t vchan_id, bool legacy_ol_flags)
3676 __rte_shared_locks_required(&vq->access_lock)
3677{
3678 uint16_t start_idx, from, i;
3679 uint16_t nr_cpl_pkts = 0;
3680 struct async_inflight_info *pkts_info = vq->async->pkts_info;
3681
3682 vhost_async_dma_check_completed(dev, dma_id, vchan_id, VHOST_DMA_MAX_COPY_COMPLETE);
3683
3684 start_idx = async_get_first_inflight_pkt_idx(vq);
3685
3686 from = start_idx;
3687 while (vq->async->pkts_cmpl_flag[from] && count--) {
3688 vq->async->pkts_cmpl_flag[from] = false;
3689 from = (from + 1) % vq->size;
3690 nr_cpl_pkts++;
3691 }
3692
3693 if (nr_cpl_pkts == 0)
3694 return 0;
3695
3696 for (i = 0; i < nr_cpl_pkts; i++) {
3697 from = (start_idx + i) % vq->size;
3698 pkts[i] = pkts_info[from].mbuf;
3699
3700 if (virtio_net_with_host_offload(dev))
3701 vhost_dequeue_offload(dev, &pkts_info[from].nethdr, pkts[i],
3702 legacy_ol_flags);
3703 }
3704
3705 /* write back completed descs to used ring and update used idx */
3706 if (vq_is_packed(dev)) {
3707 write_back_completed_descs_packed(vq, nr_cpl_pkts);
3708 vhost_vring_call_packed(dev, vq);
3709 } else {
3710 write_back_completed_descs_split(vq, nr_cpl_pkts);
3711 rte_atomic_fetch_add_explicit((unsigned short __rte_atomic *)&vq->used->idx,
3712 nr_cpl_pkts, rte_memory_order_release);
3713 vhost_vring_call_split(dev, vq);
3714 }
3715 vq->async->pkts_inflight_n -= nr_cpl_pkts;
3716
3717 return nr_cpl_pkts;
3718}
3719
3720static __rte_always_inline uint16_t
3721virtio_dev_tx_async_split(struct virtio_net *dev, struct vhost_virtqueue *vq,

Callers 4

rte_vhost_clear_queueFunction · 0.85

Tested by

no test coverage detected