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

Function mlx5_create_mr_ext

dpdk/drivers/common/mlx5/mlx5_common_mr.c:1184–1215  ·  view source on GitHub ↗

* Creates a memory region for external memory, that is memory which is not * part of the DPDK memory segments. * * @param pd * Pointer to pd of a device (net, regex, vdpa,...). * @param addr * Starting virtual address of memory. * @param len * Length of memory segment being mapped. * @param socked_id * Socket to allocate heap memory for the control structures. * * @return *

Source from the content-addressed store, hash-verified

1182 * Pointer to MR structure on success, NULL otherwise.
1183 */
1184struct mlx5_mr *
1185mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id,
1186 mlx5_reg_mr_t reg_mr_cb)
1187{
1188 struct mlx5_mr *mr = NULL;
1189
1190 mr = mlx5_malloc(MLX5_MEM_RTE | MLX5_MEM_ZERO,
1191 RTE_ALIGN_CEIL(sizeof(*mr), RTE_CACHE_LINE_SIZE),
1192 RTE_CACHE_LINE_SIZE, socket_id);
1193 if (mr == NULL)
1194 return NULL;
1195 reg_mr_cb(pd, (void *)addr, len, &mr->pmd_mr);
1196 if (mr->pmd_mr.obj == NULL) {
1197 DRV_LOG(WARNING,
1198 "Fail to create MR for address (%p)",
1199 (void *)addr);
1200 mlx5_free(mr);
1201 return NULL;
1202 }
1203 mr->msl = NULL; /* Mark it is external memory. */
1204 mr->ms_bmp = NULL;
1205 mr->ms_n = 1;
1206 mr->ms_bmp_n = 1;
1207 DRV_LOG(DEBUG,
1208 "MR CREATED (%p) for external memory %p:\n"
1209 " [0x%" PRIxPTR ", 0x%" PRIxPTR "),"
1210 " lkey=0x%x base_idx=%u ms_n=%u, ms_bmp_n=%u",
1211 (void *)mr, (void *)addr,
1212 addr, addr + len, rte_cpu_to_be_32(mr->pmd_mr.lkey),
1213 mr->ms_base_idx, mr->ms_n, mr->ms_bmp_n);
1214 return mr;
1215}
1216
1217/**
1218 * Callback for memory free event. Iterate freed memsegs and check whether it

Callers 1

mlx5_common_dev_dma_mapFunction · 0.85

Calls 2

mlx5_mallocFunction · 0.85
mlx5_freeFunction · 0.85

Tested by

no test coverage detected