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

Function mana_alloc_and_post_rx_wqe

dpdk/drivers/net/mana/rx.c:61–118  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

59}
60
61static int
62mana_alloc_and_post_rx_wqe(struct mana_rxq *rxq)
63{
64 struct rte_mbuf *mbuf = NULL;
65 struct gdma_sgl_element sgl[1];
66 struct gdma_work_request request;
67 uint32_t wqe_size_in_bu;
68 struct mana_priv *priv = rxq->priv;
69 int ret;
70 struct mana_mr_cache *mr;
71
72 mbuf = rte_pktmbuf_alloc(rxq->mp);
73 if (!mbuf) {
74 rxq->stats.nombuf++;
75 return -ENOMEM;
76 }
77
78 mr = mana_find_pmd_mr(&rxq->mr_btree, priv, mbuf);
79 if (!mr) {
80 DP_LOG(ERR, "failed to register RX MR");
81 rte_pktmbuf_free(mbuf);
82 return -ENOMEM;
83 }
84
85 request.gdma_header.struct_size = sizeof(request);
86
87 sgl[0].address = rte_cpu_to_le_64(rte_pktmbuf_mtod(mbuf, uint64_t));
88 sgl[0].memory_key = mr->lkey;
89 sgl[0].size =
90 rte_pktmbuf_data_room_size(rxq->mp) -
91 RTE_PKTMBUF_HEADROOM;
92
93 request.sgl = sgl;
94 request.num_sgl_elements = 1;
95 request.inline_oob_data = NULL;
96 request.inline_oob_size_in_bytes = 0;
97 request.flags = 0;
98 request.client_data_unit = NOT_USING_CLIENT_DATA_UNIT;
99
100 ret = gdma_post_work_request(&rxq->gdma_rq, &request, &wqe_size_in_bu);
101 if (!ret) {
102 struct mana_rxq_desc *desc =
103 &rxq->desc_ring[rxq->desc_ring_head];
104
105 /* update queue for tracking pending packets */
106 desc->pkt = mbuf;
107 desc->wqe_size_in_bu = wqe_size_in_bu;
108#ifdef RTE_ARCH_32
109 rxq->wqe_cnt_to_short_db += wqe_size_in_bu;
110#endif
111 rxq->desc_ring_head = (rxq->desc_ring_head + 1) % rxq->num_desc;
112 } else {
113 DP_LOG(DEBUG, "failed to post recv ret %d", ret);
114 return ret;
115 }
116
117 return 0;
118}

Callers 2

mana_rx_burstFunction · 0.85

Calls 5

rte_pktmbuf_allocFunction · 0.85
mana_find_pmd_mrFunction · 0.85
rte_pktmbuf_freeFunction · 0.85
gdma_post_work_requestFunction · 0.85

Tested by

no test coverage detected