Looking at the i40e driver source code, I think it doesn't conform to the API 
when requesting small bursts.

Let's say the hardware has received 31 packets.
rte_eth_rx_burst(...,16) will return 16 packets and leave 15 in the driver's 
staging buffer (which has capacity for 32 packets).

Time passes, and more packets are received.

Now, rte_eth_rx_burst(...,16) will only return the 15 packets from the staging 
buffer, and not proceed to check for more [1].
It thereby (according to my interpretation of the API description) informs the 
application that no more packets are ready to be received, which is incorrect.

[1]: 
https://elixir.bootlin.com/dpdk/v25.07-rc2/source/drivers/net/intel/i40e/i40e_rxtx.c#L640

PS: I stumbled across this while reviewing how the very old 32 packet limit 
bugs (where it truncated large rx/tx requests to 32 packets) had been fixed.

Reply via email to