summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Xu <pxu@qca.qualcomm.com>2014-12-12 15:47:56 -0800
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2014-12-15 10:53:18 +0530
commitf620bdf32a7ba32a293823455f3433c3d622e2ce (patch)
treef1470a07dff381adbe957752a59b8440ea283b3e
parentce82f1a5c8a6bd54d51d5eb06704936a7fea8c73 (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.h1
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c12
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);