Hi Flavio, On 10/2/19 12:19 AM, Flavio Leitner wrote: > The rte_vhost_dequeue_burst supports two ways of dequeuing data. If > the data fits into a buffer, then all data is copied and a single > linear buffer is returned. Otherwise it allocates additional mbufs > and chains them together to return a multiple segments mbuf. > > While that covers most use cases, it forces applications that need > to work with larger data sizes to support multiple segments mbufs. > The non-linear characteristic brings complexity and performance > implications to the application. > > To resolve the issue, change the API so that the application can > optionally provide a second mempool containing larger mbufs. If that > is not provided (NULL), the behavior remains as before the change. > Otherwise, the data size is checked and the corresponding mempool > is used to return linear mbufs.
It is not necessary to break the API (and it would require a deprecation notice), but instead you could create a new API: static inline uint16_t vhost_dequeue_burst(int vid, uint16_t queue_id, struct rte_mempool *mbuf_pool, struct rte_mempool *mbuf_pool_large, struct rte_mbuf **pkts, uint16_t count); uint16_t rte_vhost_dequeue_burst(int vid, uint16_t queue_id, struct rte_mempool *mbuf_pool, struct rte_mbuf **pkts, uint16_t count) { return vhost_dequeue_burst(vid, queue_id, mbuf_pool, NULL, pkts, count); } uint16_t rte_vhost_dequeue_burst2(int vid, uint16_t queue_id, struct rte_mempool *mbuf_pool, struct rte_mempool *mbuf_pool_large, struct rte_mbuf **pkts, uint16_t count) { return vhost_dequeue_burst(vid, queue_id, mbuf_pool, mbuf_pool_large, pkts, count); } Yeah, the name isn't very creative, I'm sure you'll have better idea! > > Signed-off-by: Flavio Leitner <f...@sysclose.org> > --- > drivers/net/vhost/rte_eth_vhost.c | 4 +-- > examples/tep_termination/main.c | 2 +- > examples/vhost/main.c | 2 +- > lib/librte_vhost/rte_vhost.h | 5 ++- > lib/librte_vhost/virtio_net.c | 57 +++++++++++++++++++++++-------- > 5 files changed, 50 insertions(+), 20 deletions(-) Maxime