From 7f45fb6521e040f8bef47b19ee3c2339bd425ee8 Mon Sep 17 00:00:00 2001 From: Vivek Date: Tue, 1 Sep 2020 16:31:09 +0530 Subject: [PATCH] qcacmn: Avoid peer free notification for self peer The peer free notification is sent for all peers including self peer. The primiary intent of using this notification is to make sure all the connected peers are disconnected. Also when the peer free notification is sent, the peer is already freed and we cannot identify if the peer free is for self peer The self peer free notification for STA is causing issues where BSS peer delete is skipped as part of bringing down the VDEV SM. CRs-Fixed: 2755824 Change-Id: I276177788a51dcdd948caeb734eaa896edf520dd --- umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c index 6db8f44a2d..cd954e88c8 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c @@ -74,6 +74,7 @@ static QDF_STATUS wlan_objmgr_peer_obj_free(struct wlan_objmgr_peer *peer) struct wlan_objmgr_vdev *vdev; uint8_t *macaddr; uint8_t vdev_id; + bool peer_free_notify = true; if (!peer) { obj_mgr_err("PEER is NULL"); @@ -90,6 +91,10 @@ static QDF_STATUS wlan_objmgr_peer_obj_free(struct wlan_objmgr_peer *peer) return QDF_STATUS_E_FAILURE; } + /* Notify peer free only for non self peer*/ + if (peer == wlan_vdev_get_selfpeer(vdev)) + peer_free_notify = false; + vdev_id = wlan_vdev_get_id(vdev); /* get PSOC from VDEV, if it is NULL, return */ @@ -131,7 +136,9 @@ static QDF_STATUS wlan_objmgr_peer_obj_free(struct wlan_objmgr_peer *peer) qdf_spinlock_destroy(&peer->peer_lock); qdf_mem_free(peer); - wlan_objmgr_vdev_peer_freed_notify(vdev); + if (peer_free_notify) + wlan_objmgr_vdev_peer_freed_notify(vdev); + wlan_objmgr_vdev_release_ref(vdev, WLAN_OBJMGR_ID); return QDF_STATUS_SUCCESS;