07/10/2022 16:37, Andrew Rybchenko: > From: Hanumanth Pothula <hpoth...@marvell.com> > > Some of the HW has support for choosing memory pools based on the > packet's size. The capability allows to choose a memory pool based > on the packet's length.
The second sentence is redundant. > This is often useful for saving the memory where the application > can create a different pool to steer the specific size of the > packet, thus enabling more efficient usage of memory. [...] > +* **Added support for mulitiple mbuf pools per ethdev Rx queue.** mulitiple -> multiple > + > + * Added support for multiple mbuf pools per Rx queue. The capability allows No need to repeat the title. > + application to provide many mempools of different size and PMD to choose > + a memory pool based on the packet's length and/or Rx buffers > availability. [...] > + /* Ensure that we have one and only one source of Rx buffers */ > + if ((mp != NULL) + + operator? Are we sure a boolean is always translated as 1? > + (rx_conf != NULL && rx_conf->rx_nseg > 0) + > + (rx_conf != NULL && rx_conf->rx_nmempool > 0) != 1) { > + RTE_ETHDEV_LOG(ERR, > + "Ambiguous Rx mempools configuration\n"); > + return -EINVAL; > + } [...] > @@ -1067,6 +1067,24 @@ struct rte_eth_rxconf { > */ > union rte_eth_rxseg *rx_seg; > > + /** > + * Array of mempools to allocate Rx buffers from. > + * > + * This provides support for multiple mbuf pools per Rx queue. > + * The capability is reported in device info via positive > + * max_rx_mempools. > + * > + * It could be useful for more efficient usage of memory when an > + * application creates different mempools to steer the specific > + * size of the packet. > + * > + * Note that if Rx scatter is enabled, a packet may be delivered using > + * a chain of mbufs obtained from single mempool or multiple mempools > + * based on the NIC implementation. > + */ > + struct rte_mempool **rx_mempools; > + uint16_t rx_nmempool; /** < Number of Rx mempools */ The commit message suggests a configuration per packet size. I guess it is not configurable in ethdev API? If it is hard-configured in the HW or the driver only, it should be specified here. [...] > + /** > + * Maximum number of Rx mempools supported per Rx queue. > + * > + * Value greater than 0 means that the driver supports Rx queue > + * mempools specification via rx_conf->rx_mempools. > + */ > + uint16_t max_rx_mempools;