https://bugs.dpdk.org/show_bug.cgi?id=516
Bug ID: 516 Summary: Multiple Intel Ethernet drivers do not conform to rte_eth_rx_burst() API Product: DPDK Version: unspecified Hardware: All OS: All Status: UNCONFIRMED Severity: normal Priority: Normal Component: ethdev Assignee: dev@dpdk.org Reporter: m...@smartsharesystems.com Target Milestone: --- When calling rte_eth_rx_burst() with nb_pkts > 32, many of the receive function implementations in the Intel Ethernet drivers only return 32 packets, but they must return all available packets, up to nb_pkts. The API description of rte_eth_rx_burst() says: <quote> The rte_eth_rx_burst() function returns the number of packets actually retrieved, which is the number of rte_mbuf data structures effectively supplied into the rx_pkts array. A return value equal to nb_pkts indicates that the RX queue contained at least rx_pkts packets, and this is likely to signify that other received packets remain in the input queue. Applications implementing a "retrieve as much received packets as possible" policy can check this specific case and keep invoking the rte_eth_rx_burst() function until a value less than nb_pkts is returned. </quote> The driver implementation does not conform to the documented behavior for "retrieve as much received packets as possible" applications. I initially ran into this bug on the ixgbe driver using the SSE vector receive routine. It looks like some of the receive function implementations in most of the Intel Ethernet drivers assume that rte_eth_rx_burst() will not be called with nb_pkts > 32. Looking at the source code, at least the ixgbe, i40e and fm10k drivers have the same bug. Originally posted on the mailing list: http://inbox.dpdk.org/dev/98cbd80474fa8b44bf855df32c47dc35c61...@smartserver.smartshare.dk/ -- You are receiving this mail because: You are the assignee for the bug.