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
This commit is contained in:
Jianmin Zhu
2020-07-16 20:13:34 +08:00
committed by snandini
orang tua 5ae41b1834
melakukan aa74dc19cf

Melihat File

@@ -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);