summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgaurank kathpalia <gkathpal@codeaurora.org>2019-12-05 11:20:54 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2019-12-05 00:43:18 -0800
commitc088552cfb6f8edbdddcfdd643d06aca6ce5d26f (patch)
treeeee716285e4b0cf18e78095386ad23ba07768b03
parentee79f22d978b072b684d6ab5a98ba974bb14b6c3 (diff)
qcacld-3.0: Prevent wlan suspend if conn in progress
Currently the driver does not check if the state is key exchange in progress and suspends wlan before set-key happens which further results in FW also in wake up state. This would result in delayed EAP exchange, and also in power loss. Scenario:- 1. Turn on STA and try to connect to enterprise network 2. Turn off display. Here the display turn off would trigger APPS suspend while the STA is trying to connect, and authenticate and since there is no check in driver to prevent suspend in set key in progress state, it would result in a FW assert, as the expectation of FW is to allow suspend only after set key has been done. Fix is to prevent WLAN-suspend in case of connection in progress, and allow suspend only in connected and authenticated state. Change-Id: Ic173116f7ba424005d938a43c75831a6a4dc874c CRs-Fixed: 2512866
-rw-r--r--core/hdd/src/wlan_hdd_power.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c
index 81f52aeb8ebb..7e95159b4ae0 100644
--- a/core/hdd/src/wlan_hdd_power.c
+++ b/core/hdd/src/wlan_hdd_power.c
@@ -70,6 +70,7 @@
#include <wlan_logging_sock_svc.h>
#include "cds_utils.h"
#include "wlan_hdd_packet_filter_api.h"
+#include "cds_concurrency.h"
/* Preprocessor definitions and constants */
#define HDD_SSR_BRING_UP_TIME 30000
@@ -2034,6 +2035,11 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy,
}
mutex_unlock(&pHddCtx->iface_change_lock);
+ if (cds_is_connection_in_progress(NULL, NULL)) {
+ hdd_err("Suspend rejected: conn in progress");
+ return -EINVAL;
+ }
+
/* If RADAR detection is in progress (HDD), prevent suspend. The flag
* "dfs_cac_block_tx" is set to true when RADAR is found and stay true
* until CAC is done for a SoftAP which is in started state.