diff --git a/src/wlan_policy_mgr_action.c b/src/wlan_policy_mgr_action.c index 7cb62158e3ee..730f3bdeb7b1 100644 --- a/src/wlan_policy_mgr_action.c +++ b/src/wlan_policy_mgr_action.c @@ -308,7 +308,7 @@ QDF_STATUS policy_mgr_update_connection_info(struct wlan_objmgr_psoc *psoc, policy_mgr_get_bw(conn_table_entry.chan_width), conn_table_entry.mac_id, chain_mask, - nss, vdev_id, true); + nss, vdev_id, true, true); return QDF_STATUS_SUCCESS; } @@ -1531,7 +1531,7 @@ QDF_STATUS policy_mgr_update_connection_info_utfw( policy_mgr_update_conc_list(psoc, conn_index, policy_mgr_get_mode(type, sub_type), channelid, HW_MODE_20_MHZ, - mac_id, chain_mask, 0, vdev_id, true); + mac_id, chain_mask, 0, vdev_id, true, true); return QDF_STATUS_SUCCESS; } @@ -1543,6 +1543,8 @@ QDF_STATUS policy_mgr_incr_connection_count_utfw(struct wlan_objmgr_psoc *psoc, { QDF_STATUS status = QDF_STATUS_E_FAILURE; uint32_t conn_index = 0; + bool update_conn = true; + enum policy_mgr_con_mode mode; conn_index = policy_mgr_get_connection_count(psoc); if (MAX_NUMBER_OF_CONC_CONNECTIONS <= conn_index) { @@ -1553,10 +1555,15 @@ QDF_STATUS policy_mgr_incr_connection_count_utfw(struct wlan_objmgr_psoc *psoc, } policy_mgr_debug("--> filling entry at index[%d]", conn_index); + mode = policy_mgr_get_mode(type, sub_type); + if (mode == PM_STA_MODE || mode == PM_P2P_CLIENT_MODE) + update_conn = false; + policy_mgr_update_conc_list(psoc, conn_index, - policy_mgr_get_mode(type, sub_type), + mode, channelid, HW_MODE_20_MHZ, - mac_id, chain_mask, 0, vdev_id, true); + mac_id, chain_mask, 0, vdev_id, true, + update_conn); return QDF_STATUS_SUCCESS; } diff --git a/src/wlan_policy_mgr_core.c b/src/wlan_policy_mgr_core.c index a0b1643d6c81..54583ed52b19 100644 --- a/src/wlan_policy_mgr_core.c +++ b/src/wlan_policy_mgr_core.c @@ -526,6 +526,8 @@ QDF_STATUS policy_mgr_get_old_and_new_hw_index( * @chain_mask: Chain mask * @vdev_id: vdev id * @in_use: Flag to indicate if the index is in use or not + * @update_conn: Flag to indicate if mode change event should + * be sent or not * * Updates the index value of the concurrent connection list * @@ -540,7 +542,8 @@ void policy_mgr_update_conc_list(struct wlan_objmgr_psoc *psoc, enum policy_mgr_chain_mode chain_mask, uint32_t original_nss, uint32_t vdev_id, - bool in_use) + bool in_use, + bool update_conn) { struct policy_mgr_psoc_priv_obj *pm_ctx; bool mcc_mode; @@ -568,7 +571,13 @@ void policy_mgr_update_conc_list(struct wlan_objmgr_psoc *psoc, pm_conc_connection_list[conn_index].in_use = in_use; qdf_mutex_release(&pm_ctx->qdf_conc_list_lock); - if (pm_ctx->mode_change_cb) + /* + * For STA and P2P client mode, the mode change event sent as part + * of the callback causes delay in processing M1 frame at supplicant + * resulting in cert test case failure. The mode change event is sent + * as part of add key for STA and P2P client mode. + */ + if (pm_ctx->mode_change_cb && update_conn) pm_ctx->mode_change_cb(); policy_mgr_dump_connection_status_info(psoc); diff --git a/src/wlan_policy_mgr_get_set_utils.c b/src/wlan_policy_mgr_get_set_utils.c index fcc811dbf5c1..7f24349f7298 100644 --- a/src/wlan_policy_mgr_get_set_utils.c +++ b/src/wlan_policy_mgr_get_set_utils.c @@ -1273,6 +1273,7 @@ QDF_STATUS policy_mgr_incr_connection_count( uint8_t chan; uint32_t nss = 0; struct policy_mgr_psoc_priv_obj *pm_ctx; + bool update_conn = true; pm_ctx = policy_mgr_get_context(psoc); if (!pm_ctx) { @@ -1314,6 +1315,8 @@ QDF_STATUS policy_mgr_incr_connection_count( policy_mgr_err("Error in getting nss"); } + if (mode == PM_STA_MODE || mode == PM_P2P_CLIENT_MODE) + update_conn = false; /* add the entry */ policy_mgr_update_conc_list(psoc, conn_index, @@ -1322,7 +1325,7 @@ QDF_STATUS policy_mgr_incr_connection_count( policy_mgr_get_bw(conn_table_entry.chan_width), conn_table_entry.mac_id, chain_mask, - nss, vdev_id, true); + nss, vdev_id, true, update_conn); policy_mgr_debug("Add at idx:%d vdev %d mac=%d", conn_index, vdev_id, conn_table_entry.mac_id); diff --git a/src/wlan_policy_mgr_i.h b/src/wlan_policy_mgr_i.h index 208f9ceb5f2c..66ceaa043733 100644 --- a/src/wlan_policy_mgr_i.h +++ b/src/wlan_policy_mgr_i.h @@ -349,7 +349,8 @@ void policy_mgr_update_conc_list(struct wlan_objmgr_psoc *psoc, enum policy_mgr_chain_mode chain_mask, uint32_t original_nss, uint32_t vdev_id, - bool in_use); + bool in_use, + bool update_conn); void policy_mgr_store_and_del_conn_info(struct wlan_objmgr_psoc *psoc, enum policy_mgr_con_mode mode, bool all_matching_cxn_to_del,