From a8a0a0d00e153005b617479e25549b4f9a25c1c1 Mon Sep 17 00:00:00 2001 From: Manikandan Mohan Date: Fri, 6 Dec 2019 15:01:42 -0800 Subject: [PATCH] qcacld-3.0: Decouple NDI policy mgr update from active peer count In multiple NDP peer case NDP indication might come for these peers before first NDI confirm is sent for first peer. This results in not updating policy manager session for NDI and not creating datapath TX pool. Fix this issue by using one time init flag for NDI instead of relying on peer count. Change-Id: I812ff9be46580f3fb2da03ae7e1c1a36d205c38f CRs-fixed: 2573935 --- components/nan/core/src/nan_main.c | 4 +++- components/nan/core/src/nan_main_i.h | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/components/nan/core/src/nan_main.c b/components/nan/core/src/nan_main.c index 9f1e2ac369cb..07b14d802d1b 100644 --- a/components/nan/core/src/nan_main.c +++ b/components/nan/core/src/nan_main.c @@ -448,6 +448,7 @@ ndi_remove_and_update_primary_connection(struct wlan_objmgr_psoc *psoc, if (!peer && psoc_nan_obj->nan_caps.ndi_dbs_supported) { policy_mgr_decr_session_set_pcl(psoc, QDF_NDI_MODE, wlan_vdev_get_id(vdev)); + vdev_nan_obj->ndp_init_done = false; return QDF_STATUS_SUCCESS; } @@ -570,7 +571,7 @@ static QDF_STATUS nan_handle_confirm( NDP_CONFIRM, confirm); if (confirm->rsp_code == NAN_DATAPATH_RESPONSE_ACCEPT && - vdev_nan_obj->active_ndp_peers == 1) { + !vdev_nan_obj->ndp_init_done) { /* * If this is the NDI's first NDP, store the NDP instance in * vdev object as its primary connection. If this instance ends @@ -609,6 +610,7 @@ static QDF_STATUS nan_handle_confirm( policy_mgr_incr_active_session(psoc, QDF_NDI_MODE, vdev_id); + vdev_nan_obj->ndp_init_done = true; } } diff --git a/components/nan/core/src/nan_main_i.h b/components/nan/core/src/nan_main_i.h index 6b6f779ffc07..4e71480d39ec 100644 --- a/components/nan/core/src/nan_main_i.h +++ b/components/nan/core/src/nan_main_i.h @@ -131,6 +131,8 @@ struct nan_psoc_priv_obj { * @ndi_delete_rsp_status: status for ndi_delete rsp * @primary_peer_mac: Primary NDP Peer mac address for the vdev * @disable_context: Disable all NDP's operation context + * @ndp_init_done: Flag to indicate NDP initialization complete after first peer + * connection. */ struct nan_vdev_priv_obj { qdf_spinlock_t lock; @@ -142,6 +144,7 @@ struct nan_vdev_priv_obj { uint32_t ndi_delete_rsp_status; struct qdf_mac_addr primary_peer_mac; void *disable_context; + bool ndp_init_done; }; /**