From 4a4cf8a97ed1099ed1570133a4bf03b9c02c7ddf Mon Sep 17 00:00:00 2001 From: Park Ju Hyung Date: Wed, 26 Feb 2020 20:07:56 +0900 Subject: [PATCH] qcacld: free wlan_cfg_buf after loading Mark the buffer with __init to allow free after loading Signed-off-by: Park Ju Hyung Signed-off-by: UtsavBalar1231 --- .../qcacld-3.0/core/hdd/src/wlan_hdd_cfg.c | 34 +++++++++---------- scripts/wifi_header_generator.sh | 2 +- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_cfg.c b/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_cfg.c index d66926eba015..9e3513401003 100644 --- a/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_cfg.c +++ b/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_cfg.c @@ -43,6 +43,8 @@ #include "wlan_hdd_green_ap_cfg.h" #include "wlan_hdd_twt.h" +static char *wlan_cfg_buf; + static void cb_notify_set_roam_prefer5_g_hz(struct hdd_context *hdd_ctx, unsigned long notify_id) @@ -8699,28 +8701,14 @@ static void hdd_set_rx_mode_value(struct hdd_context *hdd_ctx) QDF_STATUS hdd_parse_config_ini(struct hdd_context *hdd_ctx) { int i = 0; - char *buffer, *line, *pTemp = NULL; - size_t size; + char *buffer = wlan_cfg_buf, *line; char *name, *value; /* cfgIniTable is static to avoid excess stack usage */ static struct hdd_cfg_entry cfgIniTable[MAX_CFG_INI_ITEMS]; QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; - #include "wlan_cfg_ini.h" memset(cfgIniTable, 0, sizeof(cfgIniTable)); - size = strlen(wlan_cfg) + 1; - buffer = (char *)qdf_mem_malloc(size); - - if (NULL == buffer) { - hdd_err("qdf_mem_malloc failure"); - qdf_status = QDF_STATUS_E_NOMEM; - goto config_exit; - } - pTemp = buffer; - - qdf_mem_copy((void *)buffer, (void *)wlan_cfg, size); - while (buffer != NULL) { line = get_next_line(buffer); buffer = i_trim(buffer); @@ -8768,8 +8756,7 @@ QDF_STATUS hdd_parse_config_ini(struct hdd_context *hdd_ctx) if (QDF_GLOBAL_MONITOR_MODE == cds_get_conparam()) hdd_override_all_ps(hdd_ctx); -config_exit: - qdf_mem_free(pTemp); + qdf_mem_free(wlan_cfg_buf); return qdf_status; } @@ -10780,3 +10767,16 @@ QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss) hdd_set_policy_mgr_user_cfg(hdd_ctx); return (status == false) ? QDF_STATUS_E_FAILURE : QDF_STATUS_SUCCESS; } + +static int __init wlan_copy_ini_buf(void) +{ + #include "wlan_cfg_ini.h" + + size_t len = strlen(wlan_cfg) + 1; + wlan_cfg_buf = kmalloc(len, GFP_KERNEL); + memcpy(wlan_cfg_buf, wlan_cfg, len); + + return 0; +} + +module_init(wlan_copy_ini_buf); diff --git a/scripts/wifi_header_generator.sh b/scripts/wifi_header_generator.sh index 5d71d24c3404..d594de49fa2b 100755 --- a/scripts/wifi_header_generator.sh +++ b/scripts/wifi_header_generator.sh @@ -5,6 +5,6 @@ if [ ! -e "$@" ] || [ -z "$@" ]; then exit 1 fi -echo "static const char wlan_cfg[] = {" +echo "const char wlan_cfg[] = {" cat "$@" | grep -ve '^$\|^#' | sed 's@\"@\\\\"@g' | while read line; do printf '\t\"%s\\n\"\n' "$line"; done echo "};"