Before this patch, gve_rx_refill_dqo() is only called if the number of packets received in a cycle is non-zero. However, in a memory-constrained scenario, this doesn't behave well, as this could be a potential source of lockup, if there is no memory and all buffers have been received before memory is freed up for the driver to use.
This patch moves the gve_rx_refill_dqo() call to occur regardless of whether packets have been received so that in the case that enough memory is freed, the driver can recover. Fixes: 45da16b5b18 ("net/gve: support for basic Rx data path for DQO") Signed-off-by: Joshua Washington <joshw...@google.com> Reviewed-by: Praveen Kaligineedi <pkaligine...@google.com> Reviewed-by: Rushil Gupta <rush...@google.com> --- .mailmap | 1 + drivers/net/gve/gve_rx_dqo.c | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.mailmap b/.mailmap index 09fa253e12..2fc689a4de 100644 --- a/.mailmap +++ b/.mailmap @@ -1172,6 +1172,7 @@ Prashant Bhole <bhole_prashant...@lab.ntt.co.jp> Prashant Upadhyaya <prashant.upadhy...@aricent.com> <praupadhy...@gmail.com> Prateek Agarwal <pratee...@cse.iitb.ac.in> Prathisna Padmasanan <prathisna.padmasa...@intel.com> +Praveen Kaligineedi <pkaligine...@google.com> Praveen Shetty <praveen.she...@intel.com> Pravin Pathak <pravin.pat...@intel.com> Prince Takkar <ptak...@marvell.com> diff --git a/drivers/net/gve/gve_rx_dqo.c b/drivers/net/gve/gve_rx_dqo.c index d8e9eee4a8..60702d4100 100644 --- a/drivers/net/gve/gve_rx_dqo.c +++ b/drivers/net/gve/gve_rx_dqo.c @@ -195,14 +195,12 @@ gve_rx_burst_dqo(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) if (nb_rx > 0) { rxq->rx_tail = rx_id; - if (rx_id_bufq != rxq->next_avail) - rxq->next_avail = rx_id_bufq; - - gve_rx_refill_dqo(rxq); + rxq->next_avail = rx_id_bufq; rxq->stats.packets += nb_rx; rxq->stats.bytes += bytes; } + gve_rx_refill_dqo(rxq); return nb_rx; } -- 2.46.1.824.gd892dcdcdd-goog