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

Function mana_find_pmd_mr

dpdk/drivers/net/mana/mr.c:126–190  ·  view source on GitHub ↗

* Find a MR from cache. If not found, register a new MR. */

Source from the content-addressed store, hash-verified

124 * Find a MR from cache. If not found, register a new MR.
125 */
126struct mana_mr_cache *
127mana_find_pmd_mr(struct mana_mr_btree *local_mr_btree, struct mana_priv *priv,
128 struct rte_mbuf *mbuf)
129{
130 struct rte_mempool *pool = mbuf->pool;
131 int ret, second_try = 0;
132 struct mana_mr_cache *mr;
133 uint16_t idx;
134
135 DP_LOG(DEBUG, "finding mr for mbuf addr %p len %d",
136 mbuf->buf_addr, mbuf->buf_len);
137
138try_again:
139 /* First try to find the MR in local queue tree */
140 ret = mana_mr_btree_lookup(local_mr_btree, &idx,
141 (uintptr_t)mbuf->buf_addr, mbuf->buf_len,
142 &mr);
143 if (ret)
144 return NULL;
145
146 if (mr) {
147 DP_LOG(DEBUG, "Local mr lkey %u addr 0x%" PRIxPTR " len %zu",
148 mr->lkey, mr->addr, mr->len);
149 return mr;
150 }
151
152 /* If not found, try to find the MR in global tree */
153 rte_spinlock_lock(&priv->mr_btree_lock);
154 ret = mana_mr_btree_lookup(&priv->mr_btree, &idx,
155 (uintptr_t)mbuf->buf_addr,
156 mbuf->buf_len, &mr);
157 rte_spinlock_unlock(&priv->mr_btree_lock);
158
159 if (ret)
160 return NULL;
161
162 /* If found in the global tree, add it to the local tree */
163 if (mr) {
164 ret = mana_mr_btree_insert(local_mr_btree, mr);
165 if (ret) {
166 DP_LOG(ERR, "Failed to add MR to local tree.");
167 return NULL;
168 }
169
170 DP_LOG(DEBUG,
171 "Added local MR key %u addr 0x%" PRIxPTR " len %zu",
172 mr->lkey, mr->addr, mr->len);
173 return mr;
174 }
175
176 if (second_try) {
177 DP_LOG(ERR, "Internal error second try failed");
178 return NULL;
179 }
180
181 ret = mana_new_pmd_mr(local_mr_btree, priv, pool);
182 if (ret) {
183 DP_LOG(ERR, "Failed to allocate MR ret %d addr %p len %d",

Callers 2

mana_tx_burstFunction · 0.85

Calls 5

mana_mr_btree_lookupFunction · 0.85
mana_mr_btree_insertFunction · 0.85
mana_new_pmd_mrFunction · 0.85
rte_spinlock_lockFunction · 0.50
rte_spinlock_unlockFunction · 0.50

Tested by

no test coverage detected