From 23fbb8796bbbf9e1498830554bcf619834848bfa Mon Sep 17 00:00:00 2001 From: Varun Reddy Yeturu Date: Thu, 2 May 2019 22:37:55 -0700 Subject: [PATCH] qcacmn: Free pdev configuration parameters during pdev detach Free the memory allocated for the pdev configuration parameters during pdev detach so that there are no memory leaks Change-Id: I856cc6e6082197e98ad105053f1e4cffc2d25c53 CRs-Fixed: 2444000 --- dp/wifi3.0/dp_main.c | 13 ++++++++----- wlan_cfg/wlan_cfg.c | 3 ++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 87b79eb7d561..fa538f5c9d27 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -3484,6 +3484,8 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc, return (struct cdp_pdev *)pdev; fail1: + if (pdev->invalid_peer) + qdf_mem_free(pdev->invalid_peer); dp_pdev_detach((struct cdp_pdev *)pdev, 0); fail0: @@ -3501,12 +3503,8 @@ fail0: static void dp_rxdma_ring_cleanup(struct dp_soc *soc, struct dp_pdev *pdev) { - int max_mac_rings = - wlan_cfg_get_num_mac_rings(pdev->wlan_cfg_ctx); int i; - max_mac_rings = max_mac_rings < MAX_RX_MAC_RINGS ? - max_mac_rings : MAX_RX_MAC_RINGS; for (i = 0; i < MAX_RX_MAC_RINGS; i++) dp_srng_cleanup(soc, &pdev->rx_mac_buf_ring[i], RXDMA_BUF, 1); @@ -3720,7 +3718,8 @@ static void dp_pdev_deinit(struct cdp_pdev *txrx_pdev, int force) soc->pdev_count--; wlan_cfg_pdev_detach(pdev->wlan_cfg_ctx); - qdf_mem_free(pdev->invalid_peer); + if (pdev->invalid_peer) + qdf_mem_free(pdev->invalid_peer); qdf_mem_free(pdev->dp_txrx_handle); dp_pdev_mem_reset(pdev); } @@ -3772,8 +3771,11 @@ static void dp_pdev_detach(struct cdp_pdev *txrx_pdev, int force) dp_srng_cleanup(soc, &soc->reo_dest_ring[pdev->pdev_id], REO_DST, pdev->pdev_id); } + dp_rxdma_ring_cleanup(soc, pdev); + wlan_cfg_pdev_detach(pdev->wlan_cfg_ctx); dp_srng_cleanup(soc, &pdev->rx_refill_buf_ring, RXDMA_BUF, 0); + dp_cleanup_ipa_rx_refill_buf_ring(soc, pdev); for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) { dp_mon_ring_cleanup(soc, pdev, mac_id); @@ -4031,6 +4033,7 @@ static void dp_soc_detach(void *txrx_soc) /* Rx release ring */ dp_srng_cleanup(soc, &soc->rx_rel_ring, WBM2SW_RELEASE, 0); + dp_srng_cleanup(soc, &soc->rx_rel_ring, WBM2SW_RELEASE, 3); /* Rx exception ring */ /* TODO: Better to store ring_type and ring_num in diff --git a/wlan_cfg/wlan_cfg.c b/wlan_cfg/wlan_cfg.c index 299b669f2ff7..9de7abd8b209 100644 --- a/wlan_cfg/wlan_cfg.c +++ b/wlan_cfg/wlan_cfg.c @@ -365,7 +365,8 @@ struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_pdev_attach(void *psoc) void wlan_cfg_pdev_detach(struct wlan_cfg_dp_pdev_ctxt *wlan_cfg_ctx) { - qdf_mem_free(wlan_cfg_ctx); + if (wlan_cfg_ctx) + qdf_mem_free(wlan_cfg_ctx); } void wlan_cfg_set_num_contexts(struct wlan_cfg_dp_soc_ctxt *cfg, int num)