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