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

Function drain_eth_rx

dpdk/examples/vhost/main.c:1379–1420  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1377}
1378
1379static __rte_always_inline void
1380drain_eth_rx(struct vhost_dev *vdev)
1381{
1382 uint16_t rx_count, enqueue_count;
1383 struct rte_mbuf *pkts[MAX_PKT_BURST];
1384
1385 rx_count = rte_eth_rx_burst(ports[0], vdev->vmdq_rx_q,
1386 pkts, MAX_PKT_BURST);
1387
1388 if (!rx_count)
1389 return;
1390
1391 enqueue_count = vdev_queue_ops[vdev->vid].enqueue_pkt_burst(vdev,
1392 VIRTIO_RXQ, pkts, rx_count);
1393
1394 /* Retry if necessary */
1395 if (enable_retry && unlikely(enqueue_count < rx_count)) {
1396 uint32_t retry = 0;
1397
1398 while (enqueue_count < rx_count && retry++ < burst_rx_retry_num) {
1399 rte_delay_us(burst_rx_delay_time);
1400 enqueue_count += vdev_queue_ops[vdev->vid].enqueue_pkt_burst(vdev,
1401 VIRTIO_RXQ, &pkts[enqueue_count],
1402 rx_count - enqueue_count);
1403 }
1404 }
1405
1406 if (enable_stats) {
1407 __atomic_fetch_add(&vdev->stats.rx_total_atomic, rx_count,
1408 __ATOMIC_SEQ_CST);
1409 __atomic_fetch_add(&vdev->stats.rx_atomic, enqueue_count,
1410 __ATOMIC_SEQ_CST);
1411 }
1412
1413 if (!dma_bind[vid2socketid[vdev->vid]].dmas[VIRTIO_RXQ].async_enabled) {
1414 free_pkts(pkts, rx_count);
1415 } else {
1416 uint16_t enqueue_fail = rx_count - enqueue_count;
1417 if (enqueue_fail > 0)
1418 free_pkts(&pkts[enqueue_count], enqueue_fail);
1419 }
1420}
1421
1422uint16_t async_dequeue_pkts(struct vhost_dev *dev, uint16_t queue_id,
1423 struct rte_mempool *mbuf_pool,

Callers 1

switch_workerFunction · 0.85

Calls 2

rte_eth_rx_burstFunction · 0.85
free_pktsFunction · 0.70

Tested by

no test coverage detected