Based on a request from Damjan Marion and seconded by Keith Wiles, see dpdk-dev mailling list from 11/21/2016, add a new API to free consumed buffers on TX ring. This addresses two scenarios: 1) Flooding a packet and want to reuse existing mbuf to avoid a packet copy. Increment the reference count of the packet and poll new API until reference count is decremented. 2) Application runs out of mbufs so call API to free consumed packets so processing can continue.
API will return the number of packets freed (0-n) or error code if feature not supported (-ENOTSUP) or input invalid (-ENODEV). API for e1000 igb driver and vHost driver have been implemented. Other drivers can be implemented over time. Some drivers implement a TX done flush routine that should be reused where possible. e1000 igb driver and vHost driver do not have such functions. Billy McFall (3): ethdev: New API to free consumed buffers in TX ring driver: e1000 igb support to free consumed buffers driver: vHost support to free consumed buffers drivers/net/e1000/e1000_ethdev.h | 2 + drivers/net/e1000/igb_ethdev.c | 1 + drivers/net/e1000/igb_rxtx.c | 126 ++++++++++++++++++++++++++++++++++++++ drivers/net/vhost/rte_eth_vhost.c | 11 ++++ lib/librte_ether/rte_ethdev.h | 56 +++++++++++++++++ 5 files changed, 196 insertions(+) -- 2.9.3