* [PATCH] net/gve: fix mbuf allocation memory leak for DQ Rx
@ 2024-10-01 23:48 Joshua Washington
2024-10-04 4:37 ` Ferruh Yigit
0 siblings, 1 reply; 2+ messages in thread
From: Joshua Washington @ 2024-10-01 23:48 UTC (permalink / raw)
To: Jeroen de Borst, Rushil Gupta, Joshua Washington, Junfeng Guo
Cc: dev, stable, Ferruh Yigit, Praveen Kaligineedi
Currently, gve_rxq_mbufs_alloc_dqo() allocates RING_SIZE buffers, but
only posts RING_SIZE - 1 of them, inevitably leaking a buffer every
time queues are stopped/started. This could eventually lead to running
out of mbufs if an application stops/starts traffic enough.
Fixes: b044845bb015 ("net/gve: support queue start/stop")
Cc: stable@dpdk.org
Signed-off-by: Joshua Washington <joshwash@google.com>
Reviewed-by: Rushil Gupta <rushilg@google.com>
Reviewed-by: Praveen Kaligineedi <pkaligineedi@google.com>
---
drivers/net/gve/gve_rx_dqo.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/net/gve/gve_rx_dqo.c b/drivers/net/gve/gve_rx_dqo.c
index 60702d4100..e4084bc0dd 100644
--- a/drivers/net/gve/gve_rx_dqo.c
+++ b/drivers/net/gve/gve_rx_dqo.c
@@ -393,34 +393,36 @@ static int
gve_rxq_mbufs_alloc_dqo(struct gve_rx_queue *rxq)
{
struct rte_mbuf *nmb;
+ uint16_t rx_mask;
uint16_t i;
int diag;
- diag = rte_pktmbuf_alloc_bulk(rxq->mpool, &rxq->sw_ring[0], rxq->nb_rx_desc);
+ rx_mask = rxq->nb_rx_desc - 1;
+ diag = rte_pktmbuf_alloc_bulk(rxq->mpool, &rxq->sw_ring[0],
+ rx_mask);
if (diag < 0) {
rxq->stats.no_mbufs_bulk++;
- for (i = 0; i < rxq->nb_rx_desc - 1; i++) {
+ for (i = 0; i < rx_mask; i++) {
nmb = rte_pktmbuf_alloc(rxq->mpool);
if (!nmb)
break;
rxq->sw_ring[i] = nmb;
}
if (i < rxq->nb_rx_desc - 1) {
- rxq->stats.no_mbufs += rxq->nb_rx_desc - 1 - i;
+ rxq->stats.no_mbufs += rx_mask - i;
return -ENOMEM;
}
}
- for (i = 0; i < rxq->nb_rx_desc; i++) {
- if (i == rxq->nb_rx_desc - 1)
- break;
+ for (i = 0; i < rx_mask; i++) {
nmb = rxq->sw_ring[i];
rxq->rx_ring[i].buf_addr = rte_cpu_to_le_64(rte_mbuf_data_iova_default(nmb));
rxq->rx_ring[i].buf_id = rte_cpu_to_le_16(i);
}
+ rxq->rx_ring[rx_mask].buf_id = rte_cpu_to_le_16(rx_mask);
rxq->nb_rx_hold = 0;
- rxq->bufq_tail = rxq->nb_rx_desc - 1;
+ rxq->bufq_tail = rx_mask;
rte_write32(rxq->bufq_tail, rxq->qrx_tail);
--
2.46.1.824.gd892dcdcdd-goog
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] net/gve: fix mbuf allocation memory leak for DQ Rx
2024-10-01 23:48 [PATCH] net/gve: fix mbuf allocation memory leak for DQ Rx Joshua Washington
@ 2024-10-04 4:37 ` Ferruh Yigit
0 siblings, 0 replies; 2+ messages in thread
From: Ferruh Yigit @ 2024-10-04 4:37 UTC (permalink / raw)
To: Joshua Washington, Jeroen de Borst, Rushil Gupta, Junfeng Guo
Cc: dev, stable, Praveen Kaligineedi
On 10/2/2024 12:48 AM, Joshua Washington wrote:
> Currently, gve_rxq_mbufs_alloc_dqo() allocates RING_SIZE buffers, but
> only posts RING_SIZE - 1 of them, inevitably leaking a buffer every
> time queues are stopped/started. This could eventually lead to running
> out of mbufs if an application stops/starts traffic enough.
>
> Fixes: b044845bb015 ("net/gve: support queue start/stop")
> Cc: stable@dpdk.org
>
> Signed-off-by: Joshua Washington <joshwash@google.com>
> Reviewed-by: Rushil Gupta <rushilg@google.com>
> Reviewed-by: Praveen Kaligineedi <pkaligineedi@google.com>
>
Applied to dpdk-next-net/main, thanks.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-10-04 4:37 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-10-01 23:48 [PATCH] net/gve: fix mbuf allocation memory leak for DQ Rx Joshua Washington
2024-10-04 4:37 ` Ferruh Yigit
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).