summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortinlin <tinlin@codeaurora.org>2017-07-26 21:00:23 +0800
committersnandini <snandini@codeaurora.org>2017-07-28 02:38:04 -0700
commit9a360761375c33e16f19ffd96bfab72b44683b9b (patch)
tree45af034b0a97f1ff852e95f26b160e08b093c3da
parenteaa67cb8e070ea56c3023946e93f01204b7baa8b (diff)
qcacld-2.0: Alloc sme config on heap instead of on stack
Currently, sme config is allocated on stack which occupy 2k bytes. Refine it by alloc sme config on heap. Change-Id: If4e1277dc11fb4c25864ce44ab1a52ea1466af30 CRs-Fixed: 2083333
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index d83718e984d1..4b77307dbba0 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -16982,7 +16982,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
v_SINT_t i;
hdd_config_t *iniConfig;
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pHostapdAdapter);
- tSmeConfigParams sme_config;
+ tSmeConfigParams *sme_config_ptr = NULL;
v_BOOL_t MFPCapable = VOS_FALSE;
v_BOOL_t MFPRequired = VOS_FALSE;
u_int16_t prev_rsn_length = 0;
@@ -17500,16 +17500,22 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
* As per spec 11n/11AC STA are QOS STA and may not connect to nonQOS 11n AP
* Default enable QOS for SAP
*/
- vos_mem_zero(&sme_config, sizeof(tSmeConfigParams));
- sme_GetConfigParam(pHddCtx->hHal, &sme_config);
- sme_config.csrConfig.WMMSupportMode = eCsrRoamWmmAuto;
+ sme_config_ptr = vos_mem_malloc(sizeof(*sme_config_ptr));
+ if (!sme_config_ptr) {
+ hddLog(LOGE, FL("memory allocation failed for sme_config"));
+ return -ENOMEM;
+ }
+ vos_mem_zero(sme_config_ptr, sizeof(tSmeConfigParams));
+ sme_GetConfigParam(pHddCtx->hHal, sme_config_ptr);
+ sme_config_ptr->csrConfig.WMMSupportMode = eCsrRoamWmmAuto;
+
pIe = wlan_hdd_get_vendor_oui_ie_ptr(WMM_OUI_TYPE, WMM_OUI_TYPE_SIZE,
pBeacon->tail, pBeacon->tail_len);
if (!pIe && (pConfig->SapHw_mode == eCSR_DOT11_MODE_11a ||
pConfig->SapHw_mode == eCSR_DOT11_MODE_11g ||
pConfig->SapHw_mode == eCSR_DOT11_MODE_11b))
- sme_config.csrConfig.WMMSupportMode = eCsrRoamWmmNoQos;
- sme_UpdateConfig(pHddCtx->hHal, &sme_config);
+ sme_config_ptr->csrConfig.WMMSupportMode = eCsrRoamWmmNoQos;
+ sme_UpdateConfig(pHddCtx->hHal, sme_config_ptr);
#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)) && !defined(WITH_BACKPORTS)
/* Linux kernel < 3.8 does not support ch width param. So for
@@ -17586,6 +17592,7 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
WLANSAP_ResetSapConfigAddIE(pConfig, eUPDATE_IE_ALL);
//Bss already started. just return.
//TODO Probably it should update some beacon params.
+ vos_mem_free(sme_config_ptr);
hddLog( LOGE, "Bss Already started...Ignore the request");
EXIT();
return 0;
@@ -17688,11 +17695,13 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
hdd_unsafe_channel_restart_sap(pHddCtx);
pHostapdState->bCommit = TRUE;
+ vos_mem_free(sme_config_ptr);
EXIT();
return 0;
error:
+ vos_mem_free(sme_config_ptr);
clear_bit(SOFTAP_INIT_DONE, &pHostapdAdapter->event_flags);
if (pHostapdAdapter->sessionCtx.ap.sapConfig.acs_cfg.ch_list) {
vos_mem_free(pHostapdAdapter->sessionCtx.ap.sapConfig.acs_cfg.ch_list);