From a5d2e98580fe79b788f4cc2eb9c49ed25e55f2a0 Mon Sep 17 00:00:00 2001 From: Ananya Gupta Date: Wed, 29 Jan 2020 14:15:18 +0530 Subject: [PATCH] qcacld-3.0: Reduce Stack usage during IPA Setup Reduce stack usage by allocating memory dynamically instead of static allocation during IPA setup. Change-Id: I438bd1e5b5ca1a467a1ab08d48fbe823190937e8 CRs-Fixed: 2611859 --- components/ipa/core/src/wlan_ipa_core.c | 39 ++++++++++++++++--------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/components/ipa/core/src/wlan_ipa_core.c b/components/ipa/core/src/wlan_ipa_core.c index 4e78343c9e18..4b1e12f6749b 100644 --- a/components/ipa/core/src/wlan_ipa_core.c +++ b/components/ipa/core/src/wlan_ipa_core.c @@ -489,26 +489,39 @@ static inline bool wlan_ipa_wdi_is_smmu_enabled(struct wlan_ipa_priv *ipa_ctx, return ipa_ctx->is_smmu_enabled && qdf_mem_smmu_s1_enabled(osdev); } -static inline QDF_STATUS wlan_ipa_wdi_setup(struct wlan_ipa_priv *ipa_ctx, - qdf_device_t osdev) +static inline QDF_STATUS +wlan_ipa_wdi_setup(struct wlan_ipa_priv *ipa_ctx, + qdf_device_t osdev) { - qdf_ipa_sys_connect_params_t sys_in[WLAN_IPA_MAX_IFACE]; + qdf_ipa_sys_connect_params_t *sys_in = NULL; int i; + QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; + + sys_in = qdf_mem_malloc(sizeof(*sys_in) * WLAN_IPA_MAX_IFACE); + if (!sys_in) { + ipa_err("sys_in allocation failed"); + return QDF_STATUS_E_NOMEM; + } for (i = 0; i < WLAN_IPA_MAX_IFACE; i++) - qdf_mem_copy(&sys_in[i], + qdf_mem_copy(sys_in + i, &ipa_ctx->sys_pipe[i].ipa_sys_params, sizeof(qdf_ipa_sys_connect_params_t)); - return cdp_ipa_setup(ipa_ctx->dp_soc, ipa_ctx->dp_pdev_id, - wlan_ipa_i2w_cb, wlan_ipa_w2i_cb, - wlan_ipa_wdi_meter_notifier_cb, - ipa_ctx->config->desc_size, - ipa_ctx, wlan_ipa_is_rm_enabled(ipa_ctx->config), - &ipa_ctx->tx_pipe_handle, - &ipa_ctx->rx_pipe_handle, - wlan_ipa_wdi_is_smmu_enabled(ipa_ctx, osdev), - sys_in, ipa_ctx->over_gsi); + qdf_status = cdp_ipa_setup(ipa_ctx->dp_soc, ipa_ctx->dp_pdev_id, + wlan_ipa_i2w_cb, wlan_ipa_w2i_cb, + wlan_ipa_wdi_meter_notifier_cb, + ipa_ctx->config->desc_size, + ipa_ctx, + wlan_ipa_is_rm_enabled(ipa_ctx->config), + &ipa_ctx->tx_pipe_handle, + &ipa_ctx->rx_pipe_handle, + wlan_ipa_wdi_is_smmu_enabled(ipa_ctx, osdev), + sys_in, ipa_ctx->over_gsi); + + qdf_mem_free(sys_in); + + return qdf_status; } #ifdef FEATURE_METERING