mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
85 lines
3.8 KiB
Diff
85 lines
3.8 KiB
Diff
From b258a24902ae911624661546cfb1f796efe9e95d Mon Sep 17 00:00:00 2001
|
|
From: Wataru Gohda <wataru.gohda@cypress.com>
|
|
Date: Thu, 17 Dec 2020 01:02:23 -0600
|
|
Subject: [PATCH 069/179] brcmfmac: Fix for when connect request is not success
|
|
|
|
Currently brcmfmac is expecting to be set for both
|
|
BRCMF_VIF_STATUS_EAP_SUCCESS and BRCMF_VIF_STATUS_EAP status bit based
|
|
on dongle event and those bits are cleared to complete connect request
|
|
successfully.
|
|
|
|
But when connect request is finished unsuccessfully, either
|
|
BRCMF_VIF_STATUS_EAP_SUCCESS / BRCMF_VIF_STATUS_EAP bits are not
|
|
cleared depending on how the connect fail event happens. These status
|
|
bits are carried over to following new connect request and this will lead
|
|
to generate below kernel warning for some case. Worst case status
|
|
mismatch happens between dongle and wpa_supplicant.
|
|
|
|
WARNING: CPU: 0 PID: 3086 at /opt/FMAC/cypress-fmac-v5.4.18-2020_0402/v5.4.18-backports_cypatch/net/wireless/sme.c:756 __cfg80211_connect_result+0x42c/0x4a0 [cfg80211]
|
|
|
|
The fix is to clear the BRCMF_VIF_STATUS_EAP_SUCCESS /
|
|
BRCMF_VIF_STATUS_EAP bits during the link down process and add to call
|
|
link down process when link down event received during
|
|
BRCMF_VIF_STATUS_CONNECTING as well as BRCMF_VIF_STATUS_CONNECTED
|
|
state.
|
|
|
|
Signed-off-by: Wataru Gohda <wataru.gohda@cypress.com>
|
|
Signed-off-by: Chi-hsien Lin <chi-hsien.lin@infineon.com>
|
|
---
|
|
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 18 +++++++++++++++---
|
|
1 file changed, 15 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
index e981a9905572..c63ea0e4c249 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
@@ -1618,6 +1618,8 @@ static void brcmf_link_down(struct brcmf_cfg80211_vif *vif, u16 reason,
|
|
locally_generated, GFP_KERNEL);
|
|
}
|
|
clear_bit(BRCMF_VIF_STATUS_CONNECTING, &vif->sme_state);
|
|
+ clear_bit(BRCMF_VIF_STATUS_EAP_SUCCESS, &vif->sme_state);
|
|
+ clear_bit(BRCMF_VIF_STATUS_ASSOC_SUCCESS, &vif->sme_state);
|
|
clear_bit(BRCMF_SCAN_STATUS_SUPPRESS, &cfg->scan_status);
|
|
brcmf_btcoex_set_mode(vif, BRCMF_BTCOEX_ENABLED, 0);
|
|
if (vif->profile.use_fwsup != BRCMF_PROFILE_FWSUP_NONE) {
|
|
@@ -2490,6 +2492,8 @@ brcmf_cfg80211_disconnect(struct wiphy *wiphy, struct net_device *ndev,
|
|
|
|
clear_bit(BRCMF_VIF_STATUS_CONNECTED, &ifp->vif->sme_state);
|
|
clear_bit(BRCMF_VIF_STATUS_CONNECTING, &ifp->vif->sme_state);
|
|
+ clear_bit(BRCMF_VIF_STATUS_EAP_SUCCESS, &ifp->vif->sme_state);
|
|
+ clear_bit(BRCMF_VIF_STATUS_ASSOC_SUCCESS, &ifp->vif->sme_state);
|
|
cfg80211_disconnected(ndev, reason_code, NULL, 0, true, GFP_KERNEL);
|
|
|
|
memcpy(&scbval.ea, &profile->bssid, ETH_ALEN);
|
|
@@ -6390,6 +6394,10 @@ brcmf_bss_connect_done(struct brcmf_cfg80211_info *cfg,
|
|
&ifp->vif->sme_state);
|
|
conn_params.status = WLAN_STATUS_SUCCESS;
|
|
} else {
|
|
+ clear_bit(BRCMF_VIF_STATUS_EAP_SUCCESS,
|
|
+ &ifp->vif->sme_state);
|
|
+ clear_bit(BRCMF_VIF_STATUS_ASSOC_SUCCESS,
|
|
+ &ifp->vif->sme_state);
|
|
conn_params.status = WLAN_STATUS_AUTH_TIMEOUT;
|
|
}
|
|
conn_params.bssid = profile->bssid;
|
|
@@ -6500,9 +6508,13 @@ brcmf_notify_connect_status(struct brcmf_if *ifp,
|
|
} else if (brcmf_is_linkdown(ifp->vif, e)) {
|
|
brcmf_dbg(CONN, "Linkdown\n");
|
|
if (!brcmf_is_ibssmode(ifp->vif) &&
|
|
- test_bit(BRCMF_VIF_STATUS_CONNECTED,
|
|
- &ifp->vif->sme_state)) {
|
|
- if (memcmp(profile->bssid, e->addr, ETH_ALEN))
|
|
+ (test_bit(BRCMF_VIF_STATUS_CONNECTED,
|
|
+ &ifp->vif->sme_state) ||
|
|
+ test_bit(BRCMF_VIF_STATUS_CONNECTING,
|
|
+ &ifp->vif->sme_state))) {
|
|
+ if (test_bit(BRCMF_VIF_STATUS_CONNECTED,
|
|
+ &ifp->vif->sme_state) &&
|
|
+ memcmp(profile->bssid, e->addr, ETH_ALEN))
|
|
return err;
|
|
|
|
brcmf_bss_connect_done(cfg, ndev, e, false);
|
|
--
|
|
2.17.1
|
|
|