]> git.proxmox.com Git - ceph.git/blob - ceph/src/seastar/dpdk/examples/ip_pipeline/mempool.c
import 15.2.0 Octopus source
[ceph.git] / ceph / src / seastar / dpdk / examples / ip_pipeline / mempool.c
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 }