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

Function virtqueue_enqueue_xmit_inorder

dpdk/drivers/net/virtio/virtio_rxtx.c:448–493  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

446
447
448static inline void
449virtqueue_enqueue_xmit_inorder(struct virtnet_tx *txvq,
450 struct rte_mbuf **cookies,
451 uint16_t num)
452{
453 struct vq_desc_extra *dxp;
454 struct virtqueue *vq = virtnet_txq_to_vq(txvq);
455 struct vring_desc *start_dp;
456 struct virtio_net_hdr *hdr;
457 uint16_t idx;
458 int16_t head_size = vq->hw->vtnet_hdr_size;
459 uint16_t i = 0;
460
461 idx = vq->vq_desc_head_idx;
462 start_dp = vq->vq_split.ring.desc;
463
464 while (i < num) {
465 idx = idx & (vq->vq_nentries - 1);
466 dxp = &vq->vq_descx[vq->vq_avail_idx & (vq->vq_nentries - 1)];
467 dxp->cookie = (void *)cookies[i];
468 dxp->ndescs = 1;
469 virtio_update_packet_stats(&txvq->stats, cookies[i]);
470
471 hdr = rte_pktmbuf_mtod_offset(cookies[i],
472 struct virtio_net_hdr *, -head_size);
473
474 /* if offload disabled, hdr is not zeroed yet, do it now */
475 if (!vq->hw->has_tx_offload)
476 virtqueue_clear_net_hdr(hdr);
477 else
478 virtqueue_xmit_offload(hdr, cookies[i]);
479
480 start_dp[idx].addr = VIRTIO_MBUF_DATA_DMA_ADDR(cookies[i], vq) - head_size;
481 start_dp[idx].len = cookies[i]->data_len + head_size;
482 start_dp[idx].flags = 0;
483
484
485 vq_update_avail_ring(vq, idx);
486
487 idx++;
488 i++;
489 };
490
491 vq->vq_free_cnt = (uint16_t)(vq->vq_free_cnt - num);
492 vq->vq_desc_head_idx = idx & (vq->vq_nentries - 1);
493}
494
495static inline void
496virtqueue_enqueue_xmit_packed_fast(struct virtnet_tx *txvq,

Callers 1

virtio_xmit_pkts_inorderFunction · 0.85

Calls 3

virtqueue_xmit_offloadFunction · 0.85
vq_update_avail_ringFunction · 0.70

Tested by

no test coverage detected