From b2d534cc4cb5ec6b91aad913b7fd9c05d2a36a9d Mon Sep 17 00:00:00 2001 From: Karthik Kantamneni Date: Thu, 11 Mar 2021 20:34:56 +0530 Subject: [PATCH] qcacmn: Fix memleaks in Rx refill buffer pool Rx refill lock is not in sync during deinit path causing mem leak of refill buffers. Set the Rx refill lock during deinit path. Change-Id: Ic7d07c0fcaae26f6a269afcba4d593be1d5eacad CRs-Fixed: 2898006 --- dp/wifi3.0/dp_rx_buffer_pool.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dp/wifi3.0/dp_rx_buffer_pool.c b/dp/wifi3.0/dp_rx_buffer_pool.c index 6f40039c3d62..fec91ee072fc 100644 --- a/dp/wifi3.0/dp_rx_buffer_pool.c +++ b/dp/wifi3.0/dp_rx_buffer_pool.c @@ -373,10 +373,12 @@ static void dp_rx_refill_buff_pool_deinit(struct dp_soc *soc, u8 mac_id) struct rx_refill_buff_pool *buff_pool = &soc->rx_refill_buff_pool; struct rx_desc_pool *rx_desc_pool = &soc->rx_desc_buf[mac_id]; qdf_nbuf_t nbuf; + uint32_t count = 0; if (!buff_pool->is_initialized) return; + buff_pool->in_rx_refill_lock = true; while ((nbuf = dp_rx_refill_buff_pool_dequeue_nbuf(soc))) { dp_ipa_handle_rx_buf_smmu_mapping(soc, nbuf, rx_desc_pool->buf_size, @@ -385,8 +387,14 @@ static void dp_rx_refill_buff_pool_deinit(struct dp_soc *soc, u8 mac_id) QDF_DMA_BIDIRECTIONAL, rx_desc_pool->buf_size); qdf_nbuf_free(nbuf); + count++; } + buff_pool->in_rx_refill_lock = false; + dp_info("Rx refill buffers freed during deinit %u qlen: %u", + count, buff_pool->bufq_len); + + qdf_spinlock_destroy(&buff_pool->bufq_lock); buff_pool->is_initialized = false; }