Procházet zdrojové kódy

qcacld-3.0: Update twt concurrency after ndp connection return

TWT concurrency update is called before ndp connection is added to
policy_mgr count. TWT concurrency_handler reads incorrect count which
causes wrong mode to be checked. Fix is to call TWT concurrency
update after NDP entry is made in the policy manager.

Change-Id: I7f259885f7402ab018ff7c7cd020bb3f9298dba1
CRs-Fixed: 3454000
David Oladunjoye před 2 roky
rodič
revize
6477abee2c

+ 12 - 0
components/nan/core/src/nan_main.c

@@ -413,6 +413,8 @@ ndi_remove_and_update_primary_connection(struct wlan_objmgr_psoc *psoc,
 	struct nan_peer_priv_obj *peer_nan_obj = NULL;
 	struct wlan_objmgr_peer *peer, *peer_next;
 	qdf_list_t *peer_list;
+	void (*nan_conc_callback)(void);
+
 
 	psoc_nan_obj = nan_get_psoc_priv_obj(psoc);
 	if (!psoc_nan_obj) {
@@ -455,6 +457,11 @@ ndi_remove_and_update_primary_connection(struct wlan_objmgr_psoc *psoc,
 		policy_mgr_decr_session_set_pcl(psoc, QDF_NDI_MODE,
 						wlan_vdev_get_id(vdev));
 		vdev_nan_obj->ndp_init_done = false;
+
+		nan_conc_callback = psoc_nan_obj->cb_obj.nan_concurrency_update;
+		if (nan_conc_callback)
+			nan_conc_callback();
+
 		return QDF_STATUS_SUCCESS;
 	}
 
@@ -557,6 +564,7 @@ static QDF_STATUS nan_handle_confirm(struct nan_datapath_confirm_event *confirm)
 	struct nan_psoc_priv_obj *psoc_nan_obj;
 	struct nan_vdev_priv_obj *vdev_nan_obj;
 	struct wlan_objmgr_peer *peer;
+	void (*nan_conc_callback)(void);
 
 	vdev_id = wlan_vdev_get_id(confirm->vdev);
 	psoc = wlan_vdev_get_psoc(confirm->vdev);
@@ -625,6 +633,10 @@ static QDF_STATUS nan_handle_confirm(struct nan_datapath_confirm_event *confirm)
 			ndi_update_policy_mgr_conn_table(confirm, psoc,
 							 vdev_id);
 			vdev_nan_obj->ndp_init_done = true;
+
+			nan_conc_callback = psoc_nan_obj->cb_obj.nan_concurrency_update;
+			if (nan_conc_callback)
+				nan_conc_callback();
 		}
 	}
 

+ 0 - 4
core/hdd/src/wlan_hdd_nan_datapath.c

@@ -1174,8 +1174,6 @@ int hdd_ndp_new_peer_handler(uint8_t vdev_id, uint16_t sta_id,
 		if (!NDI_CONCURRENCY_SUPPORTED(hdd_ctx->psoc))
 			hdd_indicate_active_ndp_cnt(hdd_ctx->psoc, vdev_id, 1);
 		hdd_send_obss_scan_req(hdd_ctx, true);
-
-		wlan_twt_concurrency_update(hdd_ctx);
 	}
 	qdf_mem_free(roam_info);
 	return 0;
@@ -1256,7 +1254,5 @@ void hdd_ndp_peer_departed_handler(uint8_t vdev_id, uint16_t sta_id,
 		if (!NDI_CONCURRENCY_SUPPORTED(hdd_ctx->psoc))
 			hdd_indicate_active_ndp_cnt(hdd_ctx->psoc, vdev_id, 0);
 		hdd_send_obss_scan_req(hdd_ctx, false);
-
-		wlan_twt_concurrency_update(hdd_ctx);
 	}
 }