From 2c9648d47038d2d87c98d39f0d83a3cf148e7a0f Mon Sep 17 00:00:00 2001 From: Liangwei Dong Date: Mon, 4 Jan 2021 10:20:56 +0800 Subject: [PATCH] qcacld-3.0: Avoid unnecessary AP Start evt Event WLAN_IF_MGR_EV_AP_START_BSS delivery will trigger roam disable/ enable. That will involve lots of wmi command to set roaming parameters to firmware. When the AP is "started" state, the wlan_hdd_cfg80211_start_bss will be called to update AP (GO) IE and wlansap_start_bss will be skipped. In this case, we don't need to deliver WLAN_IF_MGR_EV_AP_START_BSS event. Change-Id: I801fd7a5eaf7b97b2c74930c9e4088db83c86a09 CRs-Fixed: 2847224 --- core/hdd/src/wlan_hdd_hostapd.c | 34 +++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 9f6c47faf811..d95789ca1a54 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -5141,6 +5141,7 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter, bool go_force_11n_for_11ac = 0; bool bval = false; bool enable_dfs_scan = true; + bool deliver_start_evt = true; struct s_ext_cap *p_ext_cap; enum reg_phymode reg_phy_mode, updated_phy_mode; @@ -5170,12 +5171,18 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter, * module is enabled. */ #ifdef WLAN_FEATURE_INTERFACE_MGR - status = ucfg_if_mgr_deliver_event(adapter->vdev, - WLAN_IF_MGR_EV_AP_START_BSS, - NULL); - if (!QDF_IS_STATUS_SUCCESS(status)) { - hdd_err("start bss failed!!"); - return -EINVAL; + if (test_bit(SOFTAP_BSS_STARTED, &adapter->event_flags)) + deliver_start_evt = false; + + if (deliver_start_evt) { + status = ucfg_if_mgr_deliver_event( + adapter->vdev, + WLAN_IF_MGR_EV_AP_START_BSS, + NULL); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("start bss failed!!"); + return -EINVAL; + } } #else if (policy_mgr_is_hw_mode_change_in_progress(hdd_ctx->psoc)) { @@ -5875,12 +5882,15 @@ free: * module is enabled. */ #ifdef WLAN_FEATURE_INTERFACE_MGR - status = ucfg_if_mgr_deliver_event(adapter->vdev, - WLAN_IF_MGR_EV_AP_START_BSS_COMPLETE, - NULL); - if (!QDF_IS_STATUS_SUCCESS(status)) { - hdd_err("start bss complete failed!!"); - ret = -EINVAL; + if (deliver_start_evt) { + status = ucfg_if_mgr_deliver_event( + adapter->vdev, + WLAN_IF_MGR_EV_AP_START_BSS_COMPLETE, + NULL); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("start bss complete failed!!"); + ret = -EINVAL; + } } #else /*