From aa74dc19cf32c7be5aa42c23584ed42e69c46a3b Mon Sep 17 00:00:00 2001 From: Jianmin Zhu Date: Thu, 16 Jul 2020 20:13:34 +0800 Subject: [PATCH] qcacld-3.0: back to back roaming disable cmds block wpa supplicant for 2s If 2 roaming disable commands are sent by wpa supplicant back to back, 2nd won't send RSO STOP to target since RSO STOPPED already, and disable_lfr_event can't be completed any more since no RSO event from target until 2s timeout, wpa_supplicant thread and nl80211 are blocked in wlan_hdd_cfg80211_set_fast_roaming for 2s too. Fix: If roaming is stopped by wpa_supplicant already and to be disabled again, return QDF_STATUS_E_ALREADY in sme_config_fast_roaming. Change-Id: I7d15a4d4bd8e13ff410a7023f80b418eea435fcc CRs-Fixed: 2733945 --- core/sme/src/common/sme_api.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index dc04dcba35..3db9665b2f 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -6206,6 +6206,7 @@ QDF_STATUS sme_config_fast_roaming(mac_handle_t mac_handle, uint8_t session_id, struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle); enum roam_offload_state state; QDF_STATUS status; + bool supplicant_disabled_roaming; /* * supplicant_disabled_roaming flag is altered when supplicant sends @@ -6224,6 +6225,13 @@ QDF_STATUS sme_config_fast_roaming(mac_handle_t mac_handle, uint8_t session_id, return QDF_STATUS_E_FAILURE; } + supplicant_disabled_roaming = + mlme_get_supplicant_disabled_roaming(mac_ctx->psoc, + session_id); + if (!is_fast_roam_enabled && supplicant_disabled_roaming) { + sme_debug("ROAM: RSO disabled by wpa supplicant already"); + return QDF_STATUS_E_ALREADY; + } mlme_set_supplicant_disabled_roaming(mac_ctx->psoc, session_id, !is_fast_roam_enabled);