From a5ccb8007fae7de04597c1516c00400a4b4b7192 Mon Sep 17 00:00:00 2001 From: Krunal Soni Date: Mon, 3 Jul 2017 12:59:40 -0700 Subject: [PATCH] qcacld-3.0: Keep wake lock while mac config is getting changed Host should keep the wake lock from the time it sends WMI_PDEV_SET_MAC_CONFIG_CMDID to FW till it receives the WMI_PDEV_SET_MAC_CONFIG_RESP_EVENTID. This will avoid any fatal crash condition. Change-Id: Id16a1957b38acee6cf45c123ea9dbab25aae9b39 CRs-Fixed: 2070779 --- core/wma/inc/wma.h | 1 + core/wma/src/wma_main.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 13f8c5443df8..9a35c99f59d3 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -291,6 +291,7 @@ enum ds_mode { #define WMA_VDEV_START_REQUEST_TIMEOUT (6000) /* 6 seconds */ #define WMA_VDEV_STOP_REQUEST_TIMEOUT (6000) /* 6 seconds */ #define WMA_VDEV_HW_MODE_REQUEST_TIMEOUT (5000) /* 5 seconds */ +#define WMA_VDEV_PLCY_MGR_CMD_TIMEOUT (3000) /* 3 seconds */ #define WMA_TGT_INVALID_SNR (0) diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index cc17fce51736..2e314c026555 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -3252,7 +3252,7 @@ static int wma_pdev_set_dual_mode_config_resp_evt_handler(void *handle, */ return QDF_STATUS_E_NULL_VALUE; } - + wma_release_wakelock(&wma->wmi_cmd_rsp_wake_lock); dual_mac_cfg_resp = qdf_mem_malloc(sizeof(*dual_mac_cfg_resp)); if (!dual_mac_cfg_resp) { WMA_LOGE("%s: Memory allocation failed", __func__); @@ -7902,12 +7902,19 @@ QDF_STATUS wma_send_pdev_set_dual_mac_config(tp_wma_handle wma_handle, return QDF_STATUS_E_NULL_VALUE; } + /* + * aquire the wake lock here and release it in response handler function + * In error condition, release the wake lock right away + */ + wma_acquire_wakelock(&wma_handle->wmi_cmd_rsp_wake_lock, + WMA_VDEV_PLCY_MGR_CMD_TIMEOUT); status = wmi_unified_pdev_set_dual_mac_config_cmd( wma_handle->wmi_handle, (struct wmi_dual_mac_config *)msg); if (QDF_IS_STATUS_ERROR(status)) { WMA_LOGE("%s: Failed to send WMI_PDEV_SET_DUAL_MAC_CONFIG_CMDID: %d", __func__, status); + wma_release_wakelock(&wma_handle->wmi_cmd_rsp_wake_lock); return status; } policy_mgr_update_dbs_req_config(wma_handle->psoc,