in src/nccl_ofi_net.c [32:84]
static ncclResult_t allocate_ofi_fl(free_list_t **nccl_ofi_req_fl, size_t fl_size,
size_t buffer_size)
{
ncclResult_t ret = ncclSuccess, idx;
free_list_t *fl = NULL;
size_t alloc_size = sizeof(free_list_t) + fl_size * buffer_size;
/* Validate free list size and buffer size */
if (fl_size < 1 || buffer_size < 1) {
ret = ncclSystemError;
NCCL_OFI_WARN("Invalid free list size and/or buffer size. Provided fl_size: %zu and buffer size: %zu",
fl_size, buffer_size);
goto error;
}
/* Allocate free list structure */
fl = (free_list_t *)malloc(alloc_size);
if (fl == NULL) {
NCCL_OFI_WARN("Unable to allocate free list");
ret = ncclSystemError;
goto error;
}
memset(fl, 0, alloc_size);
fl->size = fl_size;
/* Allocate stack of free indexes */
fl->free_index = allocate_stack(fl->size);
if (fl->free_index == NULL) {
NCCL_OFI_WARN("Couldn't allocate free index stack");
ret = ncclSystemError;
goto error;
}
/* Initialise stack */
for (idx = 0; idx < fl->free_index->size; idx++) {
ret = stack_push(fl->free_index, idx);
if (ret != 0)
goto error;
}
*nccl_ofi_req_fl = fl;
goto exit;
error:
if (fl->free_index)
free_stack(fl->free_index);
if (fl)
free(fl);
exit:
return ret;
}