Re: [PATCH v2] eventdev: fix Rx adapter stalls on event device backpressure
From: Jerin Jacob <hidden>
Date: 2021-11-10 18:56:59
On Wed, Nov 10, 2021 at 4:53 PM Jayatheerthan, Jay [off-list ref] wrote:
Looks good. Thanks for posting this change! Acked-by: Jay Jayatheerthan <redacted>
Changed the subject to: eventdev/eth_rx: fix stalls on event device backpressure Applied to dpdk-next-net-eventdev/for-main. Thanks
quoted
-----Original Message----- From: Mattias Rönnblom <redacted> Sent: Wednesday, November 10, 2021 4:44 PM To: jerinjacobk@gmail.com; Jayatheerthan, Jay <redacted>; Kundapura, Ganapati [off-list ref]; jerinj@marvell.com Cc: dev @ dpdk . org <redacted>; mattias.ronnblom <redacted> Subject: [PATCH v2] eventdev: fix Rx adapter stalls on event device backpressure In the Eventdev Ethernet RX Adapter, correctly handle the case where the circular enqueue buffer head and last index point to the same element. This bug may be triggered in case there is backpressure from the event device to the RX adapter. v2: * Corrected bug description Fixes: 8113fd15e229 ("eventdev/eth_rx: make enqueue buffer circular") Cc: ganapati.kundapura@intel.com Signed-off-by: Mattias Rönnblom <redacted> --- lib/eventdev/rte_event_eth_rx_adapter.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-)diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c index 56318b5a6f..809416d9b7 100644 --- a/lib/eventdev/rte_event_eth_rx_adapter.c +++ b/lib/eventdev/rte_event_eth_rx_adapter.c@@ -777,19 +777,25 @@ rxa_flush_event_buffer(struct event_eth_rx_adapter *rx_adapter, struct eth_event_enqueue_buffer *buf, struct rte_event_eth_rx_adapter_stats *stats) { - uint16_t count = buf->last ? buf->last - buf->head : buf->count; + uint16_t count = buf->count; + uint16_t n = 0; if (!count) return 0; - uint16_t n = rte_event_enqueue_new_burst(rx_adapter->eventdev_id, - rx_adapter->event_port_id, - &buf->events[buf->head], - count); - if (n != count) - stats->rx_enq_retry++; + if (buf->last) + count = buf->last - buf->head; + + if (count) { + n = rte_event_enqueue_new_burst(rx_adapter->eventdev_id, + rx_adapter->event_port_id, + &buf->events[buf->head], + count); + if (n != count) + stats->rx_enq_retry++; - buf->head += n; + buf->head += n; + } if (buf->last && n == count) { uint16_t n1; --2.25.1