From: Michal Krawczyk Date: Mon, 10 Apr 2017 14:28:09 +0000 (+0200) Subject: net/ena: fix delayed cleanup of Rx descriptors X-Git-Tag: spdx-start~3597 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=ec78af6bc0556cf2a1133185ca33fb835b38afe0;p=dpdk.git net/ena: fix delayed cleanup of Rx descriptors On RX path, after receiving bunch of packets, variable tracking available descriptors in HW queue was not updated. To fix this issue, variable tracking used descriptors must be updated after receiving packets - it must be reduced by the amount of received descriptors in current batch. Additionally, variable next_to_clean in rx_ring must be updated before entering ena_populate_rx_queue() to keep it up to date with the current ring state. Fixes: 1daff5260ff8 ("net/ena: use unmasked head and tail") Cc: stable@dpdk.org Signed-off-by: Michal Krawczyk Reviewed-by: Jakub Palider Acked-by: Jan Medala --- diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 6367ad4a74..55f5191226 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1576,13 +1576,13 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, recv_idx++; } - desc_in_use += 1; + rx_ring->next_to_clean = next_to_clean; + + desc_in_use = desc_in_use - completed + 1; /* Burst refill to save doorbells, memory barriers, const interval */ if (ring_size - desc_in_use > ENA_RING_DESCS_RATIO(ring_size)) ena_populate_rx_queue(rx_ring, ring_size - desc_in_use); - rx_ring->next_to_clean = next_to_clean; - return recv_idx; }