1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2010-2018 Intel Corporation 3 */ 4 5 #include <stdlib.h> 6 #include <string.h> 7 8 #include <rte_mbuf.h> 9 #include <rte_string_fns.h> 10 11 #include "mempool.h" 12 13 #define BUFFER_SIZE_MIN (sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM) 14 15 static struct mempool_list mempool_list; 16 17 int 18 mempool_init(void) 19 { 20 TAILQ_INIT(&mempool_list); 21 22 return 0; 23 } 24 25 struct mempool * 26 mempool_find(const char *name) 27 { 28 struct mempool *mempool; 29 30 if (name == NULL) 31 return NULL; 32 33 TAILQ_FOREACH(mempool, &mempool_list, node) 34 if (strcmp(mempool->name, name) == 0) 35 return mempool; 36 37 return NULL; 38 } 39 40 struct mempool * 41 mempool_create(const char *name, struct mempool_params *params) 42 { 43 struct mempool *mempool; 44 struct rte_mempool *m; 45 46 /* Check input params */ 47 if ((name == NULL) || 48 mempool_find(name) || 49 (params == NULL) || 50 (params->buffer_size < BUFFER_SIZE_MIN) || 51 (params->pool_size == 0)) 52 return NULL; 53 54 /* Resource create */ 55 m = rte_pktmbuf_pool_create( 56 name, 57 params->pool_size, 58 params->cache_size, 59 0, 60 params->buffer_size - sizeof(struct rte_mbuf), 61 params->cpu_id); 62 63 if (m == NULL) 64 return NULL; 65 66 /* Node allocation */ 67 mempool = calloc(1, sizeof(struct mempool)); 68 if (mempool == NULL) { 69 rte_mempool_free(m); 70 return NULL; 71 } 72 73 /* Node fill in */ 74 strlcpy(mempool->name, name, sizeof(mempool->name)); 75 mempool->m = m; 76 mempool->buffer_size = params->buffer_size; 77 78 /* Node add to list */ 79 TAILQ_INSERT_TAIL(&mempool_list, mempool, node); 80 81 return mempool; 82 } 83