diff options
| author | Naveen Rawat <nrawat@qca.qualcomm.com> | 2016-04-27 13:52:38 -0700 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-05-02 12:29:43 +0530 |
| commit | fa714fc70ea41cd1dc16313a87223dc26153bffa (patch) | |
| tree | bbadef05ee27f346433c029fb07c27936bd5ad76 | |
| parent | 6c04da68c4e7f4b57625d37cbc20dba8ed4eefd0 (diff) | |
qcacld-2.0: Free up ndp sme command resources at sme close
Free up memory allocated for NDP SME commands at sme_close, so that in
the event of unload while NDP command response was awaited, resources
can be freed.
Change-Id: I287ad77cbdca4b816f38bea436173b88e6eafc93
CRs-Fixed: 962367
| -rw-r--r-- | CORE/SME/inc/sme_nan_datapath.h | 12 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 12 | ||||
| -rw-r--r-- | CORE/SME/src/nan/nan_datapath_api.c | 72 |
3 files changed, 83 insertions, 13 deletions
diff --git a/CORE/SME/inc/sme_nan_datapath.h b/CORE/SME/inc/sme_nan_datapath.h index 30b0a00a8516..be1b285fb67d 100644 --- a/CORE/SME/inc/sme_nan_datapath.h +++ b/CORE/SME/inc/sme_nan_datapath.h @@ -125,6 +125,11 @@ void sme_ndp_msg_processor(tpAniSirGlobal mac_ctx, vos_msg_t *msg); eHalStatus csr_process_ndp_responder_request(tpAniSirGlobal mac_ctx, tSmeCmd *cmd); + +void csr_release_ndp_initiator_req(tpAniSirGlobal mac_ctx, tSmeCmd *cmd); +void csr_release_ndp_responder_req(tpAniSirGlobal mac_ctx, tSmeCmd *cmd); +void csr_release_ndp_data_end_req(tpAniSirGlobal mac_ctx, tSmeCmd *cmd); + #else /* Start NDI BSS */ @@ -182,6 +187,13 @@ static inline eHalStatus csr_process_ndp_data_end_request( return eHAL_STATUS_SUCCESS; } +static inline void csr_release_ndp_initiator_req(tpAniSirGlobal mac_ctx, + tSmeCmd *cmd) {} +static inline void csr_release_ndp_responder_req(tpAniSirGlobal mac_ctx, + tSmeCmd *cmd) {} +static inline void csr_release_ndp_data_end_req(tpAniSirGlobal mac_ctx, + tSmeCmd *cmd) {} + #endif /* WLAN_FEATURE_NAN_DATAPATH */ #endif /* __SME_NAN_DATAPATH_H */ diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index d99607844737..711e324fa8fa 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -1131,6 +1131,18 @@ void csrAbortCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand, tANI_BOOLEAN fStop csrReleaseCommandRemoveKey( pMac, pCommand ); break; + case eSmeCommandNdpInitiatorRequest: + csr_release_ndp_initiator_req(pMac, pCommand); + break; + + case eSmeCommandNdpResponderRequest: + csr_release_ndp_responder_req(pMac, pCommand); + break; + + case eSmeCommandNdpDataEndInitiatorRequest: + csr_release_ndp_data_end_req(pMac, pCommand); + break; + default: smsLog( pMac, LOGW, " CSR abort standard command %d", pCommand->command ); csrReleaseCommand( pMac, pCommand ); diff --git a/CORE/SME/src/nan/nan_datapath_api.c b/CORE/SME/src/nan/nan_datapath_api.c index aee4c18c3bd3..1764a916c690 100644 --- a/CORE/SME/src/nan/nan_datapath_api.c +++ b/CORE/SME/src/nan/nan_datapath_api.c @@ -72,6 +72,7 @@ eHalStatus sme_ndp_initiator_req_handler(tHalHandle hal, cmd->u.initiator_req.ndp_info.ndp_app_info = vos_mem_malloc(req_params->ndp_info.ndp_app_info_len); if (NULL == cmd->u.initiator_req.ndp_info.ndp_app_info) { + csrReleaseCommandRoam(mac_ctx, cmd); sme_ReleaseGlobalLock(&mac_ctx->sme); return eHAL_STATUS_FAILED_ALLOC; } @@ -100,11 +101,7 @@ eHalStatus sme_ndp_initiator_req_handler(tHalHandle hal, if (eHAL_STATUS_SUCCESS != status) { smsLog(mac_ctx, LOGE, FL("SME enqueue failed, status:%d"), status); - vos_mem_free(cmd->u.initiator_req.ndp_info.ndp_app_info); - vos_mem_free(cmd->u.initiator_req.ndp_config.ndp_cfg); - cmd->u.initiator_req.ndp_info.ndp_app_info_len = 0; - cmd->u.initiator_req.ndp_config.ndp_cfg_len = 0; - csrReleaseCommandRoam(mac_ctx, cmd); + csr_release_ndp_initiator_req(mac_ctx, cmd); } sme_ReleaseGlobalLock(&mac_ctx->sme); @@ -187,11 +184,7 @@ eHalStatus sme_ndp_responder_req_handler(tHalHandle hal, if (eHAL_STATUS_SUCCESS != status) { smsLog(mac_ctx, LOGE, FL("SME enqueue failed, status:%d"), status); - vos_mem_free(cmd->u.responder_req.ndp_info.ndp_app_info); - vos_mem_free(cmd->u.responder_req.ndp_config.ndp_cfg); - cmd->u.responder_req.ndp_info.ndp_app_info_len = 0; - cmd->u.responder_req.ndp_config.ndp_cfg_len = 0; - csrReleaseCommandRoam(mac_ctx, cmd); + csr_release_ndp_responder_req(mac_ctx, cmd); } sme_ReleaseGlobalLock(&mac_ctx->sme); return status; @@ -247,10 +240,8 @@ VOS_STATUS sme_ndp_end_req_handler(tHalHandle hal, struct ndp_end_req *req) if (eHAL_STATUS_SUCCESS != status) { smsLog(mac_ctx, LOGE, FL("SME enqueue failed, status:%d"), status); - vos_mem_free(cmd->u.data_end_req); - cmd->u.data_end_req = NULL; ret = VOS_STATUS_E_FAILURE; - csrReleaseCommandRoam(mac_ctx, cmd); + csr_release_ndp_data_end_req(mac_ctx, cmd); } sme_ReleaseGlobalLock(&mac_ctx->sme); @@ -773,3 +764,58 @@ void sme_ndp_msg_processor(tpAniSirGlobal mac_ctx, vos_msg_t *msg) smeProcessPendingQueue(mac_ctx); } } + +/** + * csr_release_ndp_initiator_req() - free resouces from sme command for ndp + * initiator request + * @mac_ctx: Global MAC context + * @cmd: sme command msg + * + * Return: None + */ +void csr_release_ndp_initiator_req(tpAniSirGlobal mac_ctx, tSmeCmd *cmd) +{ + vos_mem_free(cmd->u.initiator_req.ndp_config.ndp_cfg); + cmd->u.initiator_req.ndp_config.ndp_cfg = NULL; + cmd->u.initiator_req.ndp_config.ndp_cfg_len = 0; + vos_mem_free(cmd->u.initiator_req.ndp_info.ndp_app_info); + cmd->u.initiator_req.ndp_info.ndp_app_info = NULL; + cmd->u.initiator_req.ndp_info.ndp_app_info_len = 0; + smeReleaseCommand(mac_ctx, cmd); +} + + +/** + * csr_release_ndp_responder_req() - free resouces from sme command for ndp + * responder request + * @mac_ctx: Global MAC context + * @cmd: sme command msg + * + * Return: None + */ +void csr_release_ndp_responder_req(tpAniSirGlobal mac_ctx, tSmeCmd *cmd) +{ + vos_mem_free(cmd->u.responder_req.ndp_config.ndp_cfg); + cmd->u.responder_req.ndp_config.ndp_cfg = NULL; + cmd->u.responder_req.ndp_config.ndp_cfg_len = 0; + vos_mem_free(cmd->u.responder_req.ndp_info.ndp_app_info); + cmd->u.responder_req.ndp_info.ndp_app_info = NULL; + cmd->u.responder_req.ndp_info.ndp_app_info_len = 0; + smeReleaseCommand(mac_ctx, cmd); +} + + +/** + * csr_release_ndp_data_end_req() - free resouces from sme command for ndp + * data end request + * @mac_ctx: Global MAC context + * @cmd: sme command msg + * + * Return: None + */ +void csr_release_ndp_data_end_req(tpAniSirGlobal mac_ctx, tSmeCmd *cmd) +{ + vos_mem_free(cmd->u.data_end_req); + cmd->u.data_end_req = NULL; + smeReleaseCommand(mac_ctx, cmd); +} |
