diff options
| author | tinlin <tinlin@codeaurora.org> | 2017-07-26 21:00:23 +0800 |
|---|---|---|
| committer | snandini <snandini@codeaurora.org> | 2017-07-28 02:38:04 -0700 |
| commit | 9a360761375c33e16f19ffd96bfab72b44683b9b (patch) | |
| tree | 45af034b0a97f1ff852e95f26b160e08b093c3da | |
| parent | eaa67cb8e070ea56c3023946e93f01204b7baa8b (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.c | 21 |
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); |
