diff options
| author | Peng Xu <pxu@qca.qualcomm.com> | 2014-12-12 15:47:56 -0800 |
|---|---|---|
| committer | AnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com> | 2014-12-15 10:53:18 +0530 |
| commit | f620bdf32a7ba32a293823455f3433c3d622e2ce (patch) | |
| tree | f1470a07dff381adbe957752a59b8440ea283b3e | |
| parent | ce82f1a5c8a6bd54d51d5eb06704936a7fea8c73 (diff) | |
qca-cld:hdd: Fix ACS AP+AP guest AP start failure
When ACS and OBSS are enabled, in AP+AP mode, guest AP failed to start.
When both AP are trying to do OBSS scan, guest AP's OBSS scan returns
device busy, this leads guest hostapd trying to change the interface
to station mode to do scan. The interface change destroys the guest AP's
SAP context. This fix will prevent change of interface if ACS and OBSS
are in progress.
Change-Id: I1a82f6a20743dcaa254cf48283e63c4a8dd4c3ac
CRs-fixed: 770600
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_main.h | 1 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 12 |
2 files changed, 13 insertions, 0 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index 955c89abd309..47201028ed1b 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -94,6 +94,7 @@ #define SOFTAP_BSS_STARTED (4) #define DEVICE_IFACE_OPENED (5) #define TDLS_INIT_DONE (6) +#define ACS_IN_PROGRESS (7) /** Maximum time(ms)to wait for disconnect to complete **/ #define WLAN_WAIT_TIME_DISCONNECT 2000 diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 696fe94477c0..73e0cfca4bf2 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -4447,6 +4447,8 @@ static int wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, goto out; } + set_bit(ACS_IN_PROGRESS, &adapter->event_flags); + status = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ACS_MAX, data, data_len, qca_wlan_acs_vendor_attr); @@ -4617,6 +4619,8 @@ out: return cfg80211_vendor_cmd_reply(temp_skbuff); } + clear_bit(ACS_IN_PROGRESS, &adapter->event_flags); + return status; } #endif @@ -6530,6 +6534,8 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, iniConfig = pHddCtx->cfg_ini; pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pHostapdAdapter); + clear_bit(ACS_IN_PROGRESS, &pHostapdAdapter->event_flags); + pConfig = &pHostapdAdapter->sessionCtx.ap.sapConfig; pBeacon = pHostapdAdapter->sessionCtx.ap.beacon; @@ -7642,6 +7648,12 @@ static int wlan_hdd_change_iface_to_sta_mode(struct net_device *ndev, ENTER(); + if(test_bit(ACS_IN_PROGRESS, &pAdapter->event_flags)) + { + hddLog(LOG1, FL("ACS is in progress, don't change iface!")); + return 0; + } + wdev = ndev->ieee80211_ptr; hdd_stop_adapter(pHddCtx, pAdapter, VOS_TRUE); hdd_deinit_adapter(pHddCtx, pAdapter); |
