Browse Source

qcacld-3.0: Let non-DBS chips pass STA+STA concurrency check during reassoc

During reassociation, cm_check_for_reassoc_hw_mode_change() is called
to check the coming concurrency is supported or not after preauth is
done. For non-DBS chip, due to STA+STA concurrency is not supported
by FW, the connection manager will run into state disconnecting from
roaming and disconnect current connection by sending disassociate frame,
then do new connection again. It's not normal roaming flow in which
disassociate frame should not be seen over the air.

Per the reassociation flow, it will internally delete previous connection
first, so can call policy_mgr_store_and_del_conn_info_by_vdev_id first to
make sure concurrency checking can pass even if a new STA connection is
coming up.

Change-Id: I5f9f3e1151cb5402405042e3e9f2bec95f0b094c
CRs-Fixed: 3246822
Qun Zhang 2 years ago
parent
commit
8767353043
1 changed files with 10 additions and 3 deletions
  1. 10 3
      components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c

+ 10 - 3
components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c

@@ -1449,6 +1449,11 @@ policy_mgr_handle_conc_multiport(struct wlan_objmgr_psoc *psoc,
 				 uint32_t request_id)
 {
 	QDF_STATUS status;
+	uint8_t num_cxn_del = 0;
+	struct policy_mgr_conc_connection_info info = {0};
+
+	policy_mgr_store_and_del_conn_info_by_vdev_id(psoc, session_id,
+						      &info, &num_cxn_del);
 
 	if (!policy_mgr_check_for_session_conc(psoc, session_id, ch_freq)) {
 		policy_mgr_err("Conc not allowed for the session %d",
@@ -1463,10 +1468,12 @@ policy_mgr_handle_conc_multiport(struct wlan_objmgr_psoc *psoc,
 	status = policy_mgr_current_connections_update(psoc, session_id,
 						       ch_freq, reason,
 						       request_id);
-	if (QDF_STATUS_E_FAILURE == status) {
+	if (QDF_STATUS_E_FAILURE == status)
 		policy_mgr_err("connections update failed");
-		return status;
-	}
+
+	if (num_cxn_del > 0)
+		policy_mgr_restore_deleted_conn_info(psoc, &info,
+						     num_cxn_del);
 
 	return status;
 }