summaryrefslogtreecommitdiff
path: root/hif
diff options
context:
space:
mode:
authorArunk Khandavalli <akhandav@codeaurora.org>2017-04-03 21:40:26 +0530
committersnandini <snandini@codeaurora.org>2017-09-27 20:08:51 -0700
commite14e8e9fcfb4aaa017fa7af3c4af44508d1493ad (patch)
tree65ac6fc1bd40d4c22ce9d1594f0dae8c05d68220 /hif
parent84613b085a1c70c5bda09ec7c52670b8623aea46 (diff)
downloadqca-wfi-host-cmn-e14e8e9fcfb4aaa017fa7af3c4af44508d1493ad.tar.gz
qcacmn: Fix Dma memory allocation leak from Hif layer
HIF close is not freeing RRI memory allocated during HIF initialization resulting in memory leak of RRI memory after driver unload To mitigate the issue, freeing RRI memory in HIF close. Change-Id: Ib3daba8de0cabc1d8e303d7148448d21c47905e7 CRs-Fixed: 2019147
Diffstat (limited to 'hif')
-rw-r--r--hif/src/ce/ce_main.c1
-rw-r--r--hif/src/hif_main.c7
-rw-r--r--hif/src/hif_main.h1
3 files changed, 9 insertions, 0 deletions
diff --git a/hif/src/ce/ce_main.c b/hif/src/ce/ce_main.c
index ba7076058..a30f09860 100644
--- a/hif/src/ce/ce_main.c
+++ b/hif/src/ce/ce_main.c
@@ -2971,6 +2971,7 @@ static inline void hif_config_rri_on_ddr(struct hif_softc *scn)
scn->qdf_dev->dev, (CE_COUNT*sizeof(uint32_t)),
&paddr_rri_on_ddr);
+ scn->paddr_rri_on_ddr = paddr_rri_on_ddr;
low_paddr = BITS0_TO_31(paddr_rri_on_ddr);
high_paddr = BITS32_TO_35(paddr_rri_on_ddr);
diff --git a/hif/src/hif_main.c b/hif/src/hif_main.c
index 35a2835a8..afecf3b7d 100644
--- a/hif/src/hif_main.c
+++ b/hif/src/hif_main.c
@@ -462,6 +462,13 @@ void hif_close(struct hif_opaque_softc *hif_ctx)
qdf_mem_free(hw_name);
}
+ if (scn->vaddr_rri_on_ddr)
+ qdf_mem_free_consistent(scn->qdf_dev, scn->qdf_dev->dev,
+ (CE_COUNT*sizeof(uint32_t)),
+ scn->vaddr_rri_on_ddr, scn->paddr_rri_on_ddr,
+ 0);
+
+ scn->vaddr_rri_on_ddr = NULL;
hif_bus_close(scn);
qdf_mem_free(scn);
}
diff --git a/hif/src/hif_main.h b/hif/src/hif_main.h
index 40f7779c7..7f33f6b83 100644
--- a/hif/src/hif_main.h
+++ b/hif/src/hif_main.h
@@ -150,6 +150,7 @@ struct hif_softc {
atomic_t active_grp_tasklet_cnt;
atomic_t link_suspended;
uint32_t *vaddr_rri_on_ddr;
+ qdf_dma_addr_t paddr_rri_on_ddr;
int linkstate_vote;
bool fastpath_mode_on;
atomic_t tasklet_from_intr;