Configuring buffer size based following parameters: - max-pkt-len - max supported segments per MTU
Buffer size are configured as given below: - If platform supports infinite segments per packet then default buffer size is used. - If platform supports nb_mtu_seg_max segments then buffer size is configured as (max-pkt-len / nb_mtu_seg_max) + headroom Signed-off-by: Sunil Kumar Kori <sk...@marvell.com> --- app/test-pmd/testpmd.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index f0061d9..b8c006b 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1100,6 +1100,8 @@ struct extmem_param { uint8_t port_per_socket[RTE_MAX_NUMA_NODES]; struct rte_gro_param gro_param; uint32_t gso_types; + uint16_t data_size; + bool warning = 0; int k; memset(port_per_socket,0,RTE_MAX_NUMA_NODES); @@ -1167,8 +1169,27 @@ struct extmem_param { port->need_reconfig = 1; port->need_reconfig_queues = 1; port->tx_metadata = 0; + + /* Check for maximum number of segments per MTU. Accordingly + * update the mbuf data size. + */ + if (port->dev_info.rx_desc_lim.nb_mtu_seg_max != UINT16_MAX) { + data_size = rx_mode.max_rx_pkt_len / + port->dev_info.rx_desc_lim.nb_mtu_seg_max; + + if ((data_size + RTE_PKTMBUF_HEADROOM) > + mbuf_data_size) { + mbuf_data_size = data_size + + RTE_PKTMBUF_HEADROOM; + warning = 1; + } + } } + if (warning) + TESTPMD_LOG(WARNING, "Configured mbuf size %hu\n", + mbuf_data_size); + /* * Create pools of mbuf. * If NUMA support is disabled, create a single pool of mbuf in -- 1.8.3.1