* Query LKey from a packet buffer. * * @param mr_ctrl * Pointer to per-queue MR control structure. * @param mbuf * Pointer to mbuf. * * @return * Searched LKey on success, UINT32_MAX on no match. */
| 190 | * Searched LKey on success, UINT32_MAX on no match. |
| 191 | */ |
| 192 | static __rte_always_inline uint32_t |
| 193 | mlx5_mr_mb2mr(struct mlx5_mr_ctrl *mr_ctrl, struct rte_mbuf *mbuf) |
| 194 | { |
| 195 | uint32_t lkey; |
| 196 | |
| 197 | /* Check generation bit to see if there's any change on existing MRs. */ |
| 198 | if (unlikely(*mr_ctrl->dev_gen_ptr != mr_ctrl->cur_gen)) |
| 199 | mlx5_mr_flush_local_cache(mr_ctrl); |
| 200 | /* Linear search on MR cache array. */ |
| 201 | lkey = mlx5_mr_lookup_lkey(mr_ctrl->cache, &mr_ctrl->mru, |
| 202 | MLX5_MR_CACHE_N, (uintptr_t)mbuf->buf_addr); |
| 203 | if (likely(lkey != UINT32_MAX)) |
| 204 | return lkey; |
| 205 | /* Take slower bottom-half on miss. */ |
| 206 | return mlx5_mr_mb2mr_bh(mr_ctrl, mbuf); |
| 207 | } |
| 208 | |
| 209 | /* mlx5_common_mr.c */ |
| 210 |
no test coverage detected