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

Function malloc_heap_create_external_seg

dpdk/lib/eal/common/malloc_heap.c:1181–1242  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1179}
1180
1181struct rte_memseg_list *
1182malloc_heap_create_external_seg(void *va_addr, rte_iova_t iova_addrs[],
1183 unsigned int n_pages, size_t page_sz, const char *seg_name,
1184 unsigned int socket_id)
1185{
1186 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
1187 char fbarray_name[RTE_FBARRAY_NAME_LEN];
1188 struct rte_memseg_list *msl = NULL;
1189 struct rte_fbarray *arr;
1190 size_t seg_len = n_pages * page_sz;
1191 unsigned int i;
1192
1193 /* first, find a free memseg list */
1194 for (i = 0; i < RTE_MAX_MEMSEG_LISTS; i++) {
1195 struct rte_memseg_list *tmp = &mcfg->memsegs[i];
1196 if (tmp->base_va == NULL) {
1197 msl = tmp;
1198 break;
1199 }
1200 }
1201 if (msl == NULL) {
1202 RTE_LOG(ERR, EAL, "Couldn't find empty memseg list\n");
1203 rte_errno = ENOSPC;
1204 return NULL;
1205 }
1206
1207 snprintf(fbarray_name, sizeof(fbarray_name), "%s_%p",
1208 seg_name, va_addr);
1209
1210 /* create the backing fbarray */
1211 if (rte_fbarray_init(&msl->memseg_arr, fbarray_name, n_pages,
1212 sizeof(struct rte_memseg)) < 0) {
1213 RTE_LOG(ERR, EAL, "Couldn't create fbarray backing the memseg list\n");
1214 return NULL;
1215 }
1216 arr = &msl->memseg_arr;
1217
1218 /* fbarray created, fill it up */
1219 for (i = 0; i < n_pages; i++) {
1220 struct rte_memseg *ms;
1221
1222 rte_fbarray_set_used(arr, i);
1223 ms = rte_fbarray_get(arr, i);
1224 ms->addr = RTE_PTR_ADD(va_addr, i * page_sz);
1225 ms->iova = iova_addrs == NULL ? RTE_BAD_IOVA : iova_addrs[i];
1226 ms->hugepage_sz = page_sz;
1227 ms->len = page_sz;
1228 ms->nchannel = rte_memory_get_nchannel();
1229 ms->nrank = rte_memory_get_nrank();
1230 ms->socket_id = socket_id;
1231 }
1232
1233 /* set up the memseg list */
1234 msl->base_va = va_addr;
1235 msl->page_sz = page_sz;
1236 msl->socket_id = socket_id;
1237 msl->len = seg_len;
1238 msl->version = 0;

Callers 2

rte_extmem_registerFunction · 0.85

Calls 7

snprintfFunction · 0.85
rte_fbarray_initFunction · 0.85
rte_fbarray_set_usedFunction · 0.85
rte_fbarray_getFunction · 0.85
rte_memory_get_nchannelFunction · 0.85
rte_memory_get_nrankFunction · 0.85

Tested by

no test coverage detected