summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaveen Rawat <nrawat@qca.qualcomm.com>2016-04-27 13:52:38 -0700
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-05-02 12:29:43 +0530
commitfa714fc70ea41cd1dc16313a87223dc26153bffa (patch)
treebbadef05ee27f346433c029fb07c27936bd5ad76
parent6c04da68c4e7f4b57625d37cbc20dba8ed4eefd0 (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.h12
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c12
-rw-r--r--CORE/SME/src/nan/nan_datapath_api.c72
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);
+}