diff options
author | Thomson Kang <thomson.kang@broadcom.corp-partner.google.com> | 2023-05-11 15:31:03 +0900 |
---|---|---|
committer | Isaac Chiou <isaacchiou@google.com> | 2023-06-12 13:20:38 +0000 |
commit | b4af948b8605c6540da0d930f795e808256d8345 (patch) | |
tree | 4f0060be3350cbfd2c7fc08af115215539ba2d94 | |
parent | 6de007347797831b8ba00f6105d554347560f67f (diff) | |
download | bcm4389-b4af948b8605c6540da0d930f795e808256d8345.tar.gz |
bcmdhd: Avoid connecting when the SoftAP interface is created in progress.
Issue]
This issue happened for below sequence.
1. Start Dual SoftAP.
2. Created interface wlan2/ wlan3.
3. Succeed wlan2 interface up.
4. Connect to AP for STA.
5. Started interface up wlan3 interface.
6. The Link up event did not happen for wlan3, so coredump worked for BY_AP_LINK_FAILURE reason.
We tried to reproduce this issue for use below command during 3days. But couldn't reproduce this symptom.
Maybe it seems that the connection of STA was difficult between the interface up sequence for wlan2 and wlan3.
Fix]
Added a modification for DHD which avoids connection of STA when creating SoftAP.
Bug: 278462235
Test:
This issue could not reproduce. So tested a similar step for 1 day. Below was a tested scenario.
1. Run connecting command(STA).
2. Start SoftAP for 2G and 5G.
3. Wait for 30 seconds.
4. Stop Softap.
5. Disconnect to AP.(STA)
Repeat 1 ~ 5 step.
"AP LINK UP TIMEOUT" log was not observed about 1 day.
Change-Id: I51f1d8ee69896564f5989183b4e1b33a9754de9e
Signed-off-by: Thomson Kang <thomson.kang@broadcom.corp-partner.google.com>
-rw-r--r-- | wl_cfg80211.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/wl_cfg80211.c b/wl_cfg80211.c index c26e437..51611c9 100644 --- a/wl_cfg80211.c +++ b/wl_cfg80211.c @@ -6930,6 +6930,11 @@ wl_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev, err = -EINVAL; goto fail; } + if (wl_get_drv_status_all(cfg, AP_CREATING)) { + WL_ERR(("AP creates in progress, so skip this connection for creating AP.\n")); + err = -EBUSY; + goto fail; + } #endif /* WL_DUAL_STA */ bzero(&assoc_info, sizeof(wlcfg_assoc_info_t)); if ((assoc_info.bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { |