xref: /dpdk/app/graph/mempool.c (revision 0f32dac4bbf74761972249090523f4581ca13126)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2023 Marvell.
3  */
4 
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8 
9 #include <cmdline_parse.h>
10 #include <cmdline_parse_num.h>
11 #include <cmdline_parse_string.h>
12 #include <cmdline_socket.h>
13 #include <rte_common.h>
14 #include <rte_mbuf.h>
15 
16 #include "mempool_priv.h"
17 #include "module_api.h"
18 
19 static const char
20 cmd_mempool_help[] = "mempool <mempool_name> size <mbuf_size> buffers <number_of_buffers> "
21 		     "cache <cache_size> numa <numa_id>";
22 
23 struct mempools mpconfig;
24 
25 int
mempool_process(struct mempool_config * config)26 mempool_process(struct mempool_config *config)
27 {
28 	struct rte_mempool *mp;
29 	uint8_t nb_pools;
30 
31 	nb_pools = mpconfig.nb_pools;
32 	rte_strscpy(mpconfig.config[nb_pools].name, config->name, RTE_MEMPOOL_NAMESIZE);
33 	mpconfig.config[nb_pools].pool_size = config->pool_size;
34 	mpconfig.config[nb_pools].buffer_size = config->buffer_size;
35 	mpconfig.config[nb_pools].cache_size = config->cache_size;
36 	mpconfig.config[nb_pools].numa_node = config->numa_node;
37 
38 	mp = rte_pktmbuf_pool_create(config->name, config->pool_size, config->cache_size,
39 		128, config->buffer_size, config->numa_node);
40 	if (!mp)
41 		return -EINVAL;
42 
43 	mpconfig.mp[nb_pools] = mp;
44 	nb_pools++;
45 	mpconfig.nb_pools = nb_pools;
46 
47 	return 0;
48 }
49 
50 void
cmd_help_mempool_parsed(__rte_unused void * parsed_result,__rte_unused struct cmdline * cl,__rte_unused void * data)51 cmd_help_mempool_parsed(__rte_unused void *parsed_result, __rte_unused struct cmdline *cl,
52 			__rte_unused void *data)
53 {
54 	size_t len;
55 
56 	len = strlen(conn->msg_out);
57 	conn->msg_out += len;
58 	snprintf(conn->msg_out, conn->msg_out_len_max, "\n%s\n%s\n",
59 		 "----------------------------- mempool command help -----------------------------",
60 		 cmd_mempool_help);
61 
62 	len = strlen(conn->msg_out);
63 	conn->msg_out_len_max -= len;
64 }
65 
66 void
cmd_mempool_parsed(void * parsed_result,__rte_unused struct cmdline * cl,__rte_unused void * data)67 cmd_mempool_parsed(void *parsed_result, __rte_unused struct cmdline *cl, __rte_unused void *data)
68 {
69 	struct cmd_mempool_result *res = parsed_result;
70 	struct mempool_config config;
71 	int rc = -EINVAL;
72 
73 
74 	rte_strscpy(config.name, res->name, RTE_MEMPOOL_NAMESIZE);
75 	config.name[strlen(res->name)] = '\0';
76 	config.pool_size = res->nb_bufs;
77 	config.buffer_size = res->buf_sz;
78 	config.cache_size = res->cache_size;
79 	config.numa_node = res->node;
80 
81 	rc = mempool_process(&config);
82 	if (rc < 0)
83 		printf(MSG_CMD_FAIL, "mempool");
84 }
85