qcacld-3.0: Fix memory leak when SSR is triggered

qcacld-2.0 to qcacld-3.0 propagation.

Packets are not freed from cache buffer and causes memory
leak in SSR case. Flush cache RX frame queue to avoid this memory leak.

Change-Id: Idd9edde6fdb3b9ff3ecbe7d8139f9a66468b70af
CRs-Fixed: 1051019
This commit is contained in:
Poddar, Siddarth 2016-09-29 18:58:45 +05:30 • committed by qcabuildsw
commit 1ab0a3db60
3 changed files with 26 additions and 0 deletions

View file

@ -206,6 +206,13 @@ QDF_STATUS cds_enable(v_CONTEXT_t cds_context);
QDF_STATUS cds_disable(v_CONTEXT_t cds_context);
/**
* cds_flush_cache_rx_queue() - flush cache rx queue frame
*
* Return: None
*/
void cds_flush_cache_rx_queue(void);
QDF_STATUS cds_close(v_CONTEXT_t cds_context);
QDF_STATUS cds_shutdown(v_CONTEXT_t cds_context);

View file

@ -817,6 +817,22 @@ QDF_STATUS cds_close(v_CONTEXT_t cds_context)
return QDF_STATUS_SUCCESS;
}
void cds_flush_cache_rx_queue(void)
{
uint8_t sta_id;
struct ol_txrx_peer_t *peer;
struct ol_txrx_pdev_t *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
for (sta_id = 0; sta_id < WLAN_MAX_STA_COUNT; sta_id++) {
peer = ol_txrx_peer_find_by_local_id(pdev, sta_id);
if (!peer)
continue;
ol_txrx_flush_rx_frames(peer, 1);
}
return;
}
/**
* cds_get_context() - get context data area
*

View file

@ -1448,6 +1448,9 @@ QDF_STATUS hdd_wlan_shutdown(void)
hdd_cleanup_scan_queue(pHddCtx);
hdd_reset_all_adapters(pHddCtx);
/* Flush cached rx frame queue */
cds_flush_cache_rx_queue();
/* De-register the HDD callbacks */
hdd_deregister_cb(pHddCtx);
hdd_ipa_uc_ssr_deinit();