No need to allocate one mempool per port. The number of mbufs is fixed for simplicity.
Signed-off-by: Thomas Monjalon <tho...@monjalon.net> --- examples/ethtool/ethtool-app/main.c | 32 ++++++++--------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/examples/ethtool/ethtool-app/main.c b/examples/ethtool/ethtool-app/main.c index e23d3afd2..e7185ca79 100644 --- a/examples/ethtool/ethtool-app/main.c +++ b/examples/ethtool/ethtool-app/main.c @@ -22,7 +22,7 @@ #define MAX_BURST_LENGTH 32 #define PORT_RX_QUEUE_SIZE 1024 #define PORT_TX_QUEUE_SIZE 1024 -#define PKTPOOL_EXTRA_SIZE 512 +#define NUM_MBUFS 8191 #define PKTPOOL_CACHE 32 @@ -38,7 +38,6 @@ struct app_port { int port_active; int port_dirty; int idx_port; - struct rte_mempool *pkt_pool; }; struct app_config { @@ -89,36 +88,23 @@ void mark_port_newmac(int idx_port) static void setup_ports(struct app_config *app_cfg, int cnt_ports) { int idx_port; - int size_pktpool; struct rte_eth_conf cfg_port; - struct rte_eth_dev_info dev_info; - char str_name[16]; uint16_t nb_rxd = PORT_RX_QUEUE_SIZE; uint16_t nb_txd = PORT_TX_QUEUE_SIZE; + struct rte_mempool *pkt_pool; memset(&cfg_port, 0, sizeof(cfg_port)); cfg_port.txmode.mq_mode = ETH_MQ_TX_NONE; + pkt_pool = rte_pktmbuf_pool_create("mbuf pool", + NUM_MBUFS, PKTPOOL_CACHE, 0, RTE_MBUF_DEFAULT_BUF_SIZE, + rte_socket_id()); + if (pkt_pool == NULL) + rte_exit(EXIT_FAILURE, "rte_pktmbuf_pool_create failed"); + for (idx_port = 0; idx_port < cnt_ports; idx_port++) { struct app_port *ptr_port = &app_cfg->ports[idx_port]; - rte_eth_dev_info_get(idx_port, &dev_info); - size_pktpool = dev_info.rx_desc_lim.nb_max + - dev_info.tx_desc_lim.nb_max + PKTPOOL_EXTRA_SIZE; - - snprintf(str_name, 16, "pkt_pool%i", idx_port); - ptr_port->pkt_pool = rte_pktmbuf_pool_create( - str_name, - size_pktpool, PKTPOOL_CACHE, - 0, - RTE_MBUF_DEFAULT_BUF_SIZE, - rte_socket_id() - ); - if (ptr_port->pkt_pool == NULL) - rte_exit(EXIT_FAILURE, - "rte_pktmbuf_pool_create failed" - ); - printf("Init port %i..\n", idx_port); ptr_port->port_active = 1; ptr_port->port_dirty = 0; @@ -135,7 +121,7 @@ static void setup_ports(struct app_config *app_cfg, int cnt_ports) if (rte_eth_rx_queue_setup( idx_port, 0, nb_rxd, rte_eth_dev_socket_id(idx_port), NULL, - ptr_port->pkt_pool) < 0) + pkt_pool) < 0) rte_exit(EXIT_FAILURE, "rte_eth_rx_queue_setup failed" ); -- 2.20.1