瀏覽代碼

qcacmn: Add more information to object manager debug prints

Add more information to object manager debug prints
1. Print the string of the component taking object manager reference.
2. Print vdev & pdev id in case of failure in some vdev related functions.
3. Print vdev & vdev id in case of failure in peer related functions.
4. Fromat the prints for printing pending reference
   when psoc is going brought down.

Change-Id: I75b2d1a04feb688d6e397fa28c988abb56b2a11d
CRs-Fixed: 2069665
Vivek 7 年之前
父節點
當前提交
ea368417b0

+ 2 - 2
umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h

@@ -706,7 +706,7 @@ static inline uint8_t wlan_pdev_get_max_vdev_count(
  *
  * Return: void
  */
-void wlan_objmgr_pdev_get_ref(struct wlan_objmgr_pdev *pdev,
+QDF_STATUS wlan_objmgr_pdev_get_ref(struct wlan_objmgr_pdev *pdev,
 					wlan_objmgr_ref_dbgid id);
 
 /**
@@ -731,7 +731,7 @@ QDF_STATUS wlan_objmgr_pdev_try_get_ref(struct wlan_objmgr_pdev *pdev,
  *
  * Return: void
  */
-void wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
+QDF_STATUS wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
 						wlan_objmgr_ref_dbgid id);
 
 /**

+ 2 - 2
umac/cmn_services/obj_mgr/inc/wlan_objmgr_peer_obj.h

@@ -374,7 +374,7 @@ static inline void wlan_peer_obj_unlock(struct wlan_objmgr_peer *peer)
  *
  * Return: void
  */
-void wlan_objmgr_peer_get_ref(struct wlan_objmgr_peer *peer,
+QDF_STATUS wlan_objmgr_peer_get_ref(struct wlan_objmgr_peer *peer,
 					wlan_objmgr_ref_dbgid id);
 
 /**
@@ -399,7 +399,7 @@ QDF_STATUS wlan_objmgr_peer_try_get_ref(struct wlan_objmgr_peer *peer,
  *
  * Return: void
  */
-void wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
+QDF_STATUS wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
 						 wlan_objmgr_ref_dbgid id);
 
 /**

+ 2 - 2
umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h

@@ -1181,7 +1181,7 @@ static inline void wlan_psoc_set_qdf_dev(
  *
  * Return: void
  */
-void wlan_objmgr_psoc_get_ref(struct wlan_objmgr_psoc *psoc,
+QDF_STATUS wlan_objmgr_psoc_get_ref(struct wlan_objmgr_psoc *psoc,
 					wlan_objmgr_ref_dbgid id);
 
 /**
@@ -1206,7 +1206,7 @@ QDF_STATUS wlan_objmgr_psoc_try_get_ref(struct wlan_objmgr_psoc *psoc,
  *
  * Return: void
  */
-void wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc,
+QDF_STATUS wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc,
 						wlan_objmgr_ref_dbgid id);
 
 /**

+ 2 - 2
umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h

@@ -1391,7 +1391,7 @@ static inline uint16_t wlan_vdev_get_peer_count(struct wlan_objmgr_vdev *vdev)
  *
  * Return: void
  */
-void wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev,
+QDF_STATUS wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev,
 				wlan_objmgr_ref_dbgid id);
 
 /**
@@ -1416,7 +1416,7 @@ QDF_STATUS wlan_objmgr_vdev_try_get_ref(struct wlan_objmgr_vdev *vdev,
  *
  * Return: void
  */
-void wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev,
+QDF_STATUS wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev,
 						wlan_objmgr_ref_dbgid id);
 
 /**

+ 48 - 24
umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c

@@ -101,7 +101,8 @@ QDF_STATUS wlan_objmgr_register_psoc_create_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->psoc_create_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -128,7 +129,8 @@ QDF_STATUS wlan_objmgr_unregister_psoc_create_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->psoc_create_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -155,7 +157,8 @@ QDF_STATUS wlan_objmgr_register_psoc_destroy_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->psoc_destroy_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -182,7 +185,8 @@ QDF_STATUS wlan_objmgr_unregister_psoc_destroy_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->psoc_destroy_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -209,7 +213,8 @@ QDF_STATUS wlan_objmgr_register_psoc_status_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->psoc_status_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -234,7 +239,8 @@ QDF_STATUS wlan_objmgr_unregister_psoc_status_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->psoc_status_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */
@@ -260,7 +266,8 @@ QDF_STATUS wlan_objmgr_register_pdev_create_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->pdev_create_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -287,7 +294,8 @@ QDF_STATUS wlan_objmgr_unregister_pdev_create_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->pdev_create_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -314,7 +322,8 @@ QDF_STATUS wlan_objmgr_register_pdev_destroy_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->pdev_destroy_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -341,7 +350,8 @@ QDF_STATUS wlan_objmgr_unregister_pdev_destroy_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->pdev_destroy_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for Component %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -368,7 +378,8 @@ QDF_STATUS wlan_objmgr_register_pdev_status_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->pdev_status_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -393,7 +404,8 @@ QDF_STATUS wlan_objmgr_unregister_pdev_status_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->pdev_status_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for Component %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */
@@ -419,7 +431,8 @@ QDF_STATUS wlan_objmgr_register_vdev_create_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->vdev_create_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -445,7 +458,8 @@ QDF_STATUS wlan_objmgr_unregister_vdev_create_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->vdev_create_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -471,7 +485,8 @@ QDF_STATUS wlan_objmgr_register_vdev_destroy_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->vdev_destroy_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -497,7 +512,8 @@ QDF_STATUS wlan_objmgr_unregister_vdev_destroy_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->vdev_destroy_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -523,7 +539,8 @@ QDF_STATUS wlan_objmgr_register_vdev_status_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->vdev_status_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -548,7 +565,8 @@ QDF_STATUS wlan_objmgr_unregister_vdev_status_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->vdev_status_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for Component %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */
@@ -574,7 +592,8 @@ QDF_STATUS wlan_objmgr_register_peer_create_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->peer_create_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -601,7 +620,8 @@ QDF_STATUS wlan_objmgr_unregister_peer_create_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->peer_create_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -627,7 +647,8 @@ QDF_STATUS wlan_objmgr_register_peer_destroy_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->peer_destroy_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -653,7 +674,8 @@ QDF_STATUS wlan_objmgr_unregister_peer_destroy_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->peer_destroy_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -679,7 +701,8 @@ QDF_STATUS wlan_objmgr_register_peer_status_handler(
 	/* If there is a valid entry, return failure */
 	if (g_umac_glb_obj->peer_status_handler[id] != NULL) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is already registered", id);
+		obj_mgr_err("Callback for comp %s is already registered",
+						string_from_dbgid(id));
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -704,7 +727,8 @@ QDF_STATUS wlan_objmgr_unregister_peer_status_handler(
 	/* If there is an invalid entry, return failure */
 	if (g_umac_glb_obj->peer_status_handler[id] != handler) {
 		qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
-		obj_mgr_err("Callback for comp %d is not registered", id);
+		obj_mgr_err("Callback for comp %s is not registered",
+						string_from_dbgid(id));
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */

+ 45 - 27
umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c

@@ -70,7 +70,7 @@ static QDF_STATUS wlan_objmgr_pdev_obj_free(struct wlan_objmgr_pdev *pdev)
 	uint8_t pdev_id;
 
 	if (pdev == NULL) {
-		obj_mgr_err("pdev obj is NULL");
+		obj_mgr_err("pdev is NULL");
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -80,7 +80,7 @@ static QDF_STATUS wlan_objmgr_pdev_obj_free(struct wlan_objmgr_pdev *pdev)
 	/* Detach PDEV from PSOC PDEV's list */
 	if (wlan_objmgr_psoc_pdev_detach(pdev->pdev_objmgr.wlan_psoc, pdev) ==
 						QDF_STATUS_E_FAILURE) {
-		obj_mgr_err("PSOC PDEV detach failed: pdev-id: %d", pdev_id);
+		obj_mgr_err("psoc detach failed for pdev[%d]", pdev_id);
 		return QDF_STATUS_E_FAILURE;
 	}
 	qdf_spinlock_destroy(&pdev->pdev_lock);
@@ -113,7 +113,7 @@ struct wlan_objmgr_pdev *wlan_objmgr_pdev_obj_create(
 	/* Attach PDEV with PSOC */
 	if (wlan_objmgr_psoc_pdev_attach(psoc, pdev)
 				!= QDF_STATUS_SUCCESS) {
-		obj_mgr_err("pdev psoc attach failed");
+		obj_mgr_err("psoc attach failed for pdev");
 		qdf_mem_free(pdev);
 		return NULL;
 	}
@@ -164,7 +164,9 @@ struct wlan_objmgr_pdev *wlan_objmgr_pdev_obj_create(
 	/* Component object failed to be created, clean up the object */
 	} else if (obj_status == QDF_STATUS_E_FAILURE) {
 		/* Clean up the psoc */
-		obj_mgr_err("PDEV component objects allocation failed");
+		obj_mgr_err(
+				"Component objects allocation failed for pdev[%d]",
+				wlan_objmgr_pdev_get_pdev_id(pdev));
 		wlan_objmgr_pdev_obj_delete(pdev);
 		return NULL;
 	}
@@ -188,7 +190,7 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev)
 	pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
 
 	if (pdev->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) {
-		obj_mgr_err("pdev object delete is not invoked: pdev-id:%d",
+		obj_mgr_err("Object delete is not invoked for pdev[%d]",
 			pdev_id);
 		WLAN_OBJMGR_BUG(0);
 	}
@@ -206,11 +208,11 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev)
 	obj_status = wlan_objmgr_pdev_object_status(pdev);
 
 	if (obj_status == QDF_STATUS_E_FAILURE) {
-		obj_mgr_err("PDEV component objects destroy failed: pdev-id:%d",
+		obj_mgr_err("Component objects destroy failed for pdev[%d]",
 				pdev_id);
 		/* Ideally should not happen */
 		/* This leads to memleak ??? how to handle */
-		QDF_BUG(0);
+		WLAN_OBJMGR_BUG(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Deletion is in progress */
@@ -235,7 +237,7 @@ QDF_STATUS wlan_objmgr_pdev_obj_delete(struct wlan_objmgr_pdev *pdev)
 	print_idx = qdf_get_pidx();
 	if (qdf_print_is_verbose_enabled(print_idx, QDF_MODULE_ID_OBJ_MGR,
 		QDF_TRACE_LEVEL_DEBUG)) {
-		obj_mgr_debug("Logically deleting the pdev(id:%d)",
+		obj_mgr_debug("L-Del pdev[%d]",
 					pdev->pdev_objmgr.wlan_pdev_id);
 		wlan_objmgr_print_ref_ids(pdev->pdev_objmgr.ref_id_dbg);
 	}
@@ -269,13 +271,14 @@ QDF_STATUS wlan_objmgr_pdev_component_obj_attach(
 
 	/* component id is invalid */
 	if (id >= WLAN_UMAC_MAX_COMPONENTS) {
-		obj_mgr_err("component-id %d is not supported", id);
+		obj_mgr_err("Component-id %d is not supported", id);
 		return QDF_STATUS_MAXCOMP_FAIL;
 	}
 	wlan_pdev_obj_lock(pdev);
 	/* If there is a valid entry, return failure */
 	if (pdev->pdev_comp_priv_obj[id] != NULL) {
-		obj_mgr_err("component-%d already have valid pointer", id);
+		obj_mgr_err("Component-%s already have valid pointer",
+						string_from_dbgid(id));
 		wlan_pdev_obj_unlock(pdev);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -781,12 +784,12 @@ void *wlan_objmgr_pdev_get_comp_private_obj(
 
 	/* component id is invalid */
 	if (id >= WLAN_UMAC_MAX_COMPONENTS) {
-		QDF_BUG(0);
+		WLAN_OBJMGR_BUG(0);
 		return NULL;
 	}
 
 	if (pdev == NULL) {
-		QDF_BUG(0);
+		WLAN_OBJMGR_BUG(0);
 		return NULL;
 	}
 
@@ -796,18 +799,23 @@ void *wlan_objmgr_pdev_get_comp_private_obj(
 }
 EXPORT_SYMBOL(wlan_objmgr_pdev_get_comp_private_obj);
 
-void wlan_objmgr_pdev_get_ref(struct wlan_objmgr_pdev *pdev,
+QDF_STATUS wlan_objmgr_pdev_get_ref(struct wlan_objmgr_pdev *pdev,
 					wlan_objmgr_ref_dbgid id)
 {
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("Component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
+
 	if (pdev == NULL) {
-		obj_mgr_err("pdev obj is NULL");
+		obj_mgr_err("pdev is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 	qdf_atomic_inc(&pdev->pdev_objmgr.ref_cnt);
 	qdf_atomic_inc(&pdev->pdev_objmgr.ref_id_dbg[id]);
 
-	return;
+	return QDF_STATUS_SUCCESS;
 }
 EXPORT_SYMBOL(wlan_objmgr_pdev_get_ref);
 
@@ -816,8 +824,13 @@ QDF_STATUS wlan_objmgr_pdev_try_get_ref(struct wlan_objmgr_pdev *pdev,
 {
 	uint8_t pdev_id;
 
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("Component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
+
 	if (pdev == NULL) {
-		obj_mgr_err("pdev obj is NULL");
+		obj_mgr_err("pdev is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -828,8 +841,8 @@ QDF_STATUS wlan_objmgr_pdev_try_get_ref(struct wlan_objmgr_pdev *pdev,
 		wlan_pdev_obj_unlock(pdev);
 		if (pdev->pdev_objmgr.print_cnt++ <=
 				WLAN_OBJMGR_RATELIMIT_THRESH)
-			obj_mgr_err("[Ref id: %d] pdev [%d] is in L-Del state",
-					id, pdev_id);
+			obj_mgr_err("[Ref id: %s] pdev[%d] is in L-Del state",
+					string_from_dbgid(id), pdev_id);
 
 		return QDF_STATUS_E_RESOURCES;
 	}
@@ -841,30 +854,35 @@ QDF_STATUS wlan_objmgr_pdev_try_get_ref(struct wlan_objmgr_pdev *pdev,
 }
 EXPORT_SYMBOL(wlan_objmgr_pdev_try_get_ref);
 
-void wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
+QDF_STATUS wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
 						wlan_objmgr_ref_dbgid id)
 {
 	uint8_t pdev_id;
 
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("Component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
+
 	if (pdev == NULL) {
-		obj_mgr_err("pdev obj is NULL");
+		obj_mgr_err("pdev is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 
 	pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
 
 	if (!qdf_atomic_read(&pdev->pdev_objmgr.ref_id_dbg[id])) {
-		obj_mgr_err("pdev (id:%d)ref cnt was not taken by %d",
-				pdev_id, id);
+		obj_mgr_err("pdev[%d] ref cnt was not taken by %s",
+						pdev_id, string_from_dbgid(id));
 		wlan_objmgr_print_ref_ids(pdev->pdev_objmgr.ref_id_dbg);
 		WLAN_OBJMGR_BUG(0);
 	}
 
 	if (!qdf_atomic_read(&pdev->pdev_objmgr.ref_cnt)) {
-		obj_mgr_err("pdev ref cnt is 0: pdev-id:%d", pdev_id);
+		obj_mgr_err("pdev[%d] ref cnt is 0", pdev_id);
 		WLAN_OBJMGR_BUG(0);
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 
 	qdf_atomic_dec(&pdev->pdev_objmgr.ref_id_dbg[id]);
@@ -872,6 +890,6 @@ void wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
 	if (qdf_atomic_dec_and_test(&pdev->pdev_objmgr.ref_cnt))
 		wlan_objmgr_pdev_obj_destroy(pdev);
 
-	return;
+	return QDF_STATUS_SUCCESS;
 }
 EXPORT_SYMBOL(wlan_objmgr_pdev_release_ref);

+ 102 - 74
umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c

@@ -69,34 +69,30 @@ static QDF_STATUS wlan_objmgr_peer_obj_free(struct wlan_objmgr_peer *peer)
 {
 	struct wlan_objmgr_psoc *psoc;
 	struct wlan_objmgr_vdev *vdev;
+	struct wlan_objmgr_pdev *pdev;
 	uint8_t *macaddr;
-	uint8_t vdev_id;
 
 	if (peer == NULL) {
-		obj_mgr_err("PEER is NULL");
+		obj_mgr_err("peer is NULL");
 		return QDF_STATUS_E_FAILURE;
 	}
 
+	wlan_peer_obj_lock(peer);
 	macaddr = wlan_peer_get_macaddr(peer);
+	wlan_peer_obj_unlock(peer);
 
 	vdev = wlan_peer_get_vdev(peer);
 	if (vdev == NULL) {
-		obj_mgr_err(
-			"VDEV is NULL for peer(%02x:%02x:%02x:%02x:%02x:%02x)",
-				macaddr[0], macaddr[1], macaddr[2],
-				macaddr[3], macaddr[4], macaddr[5]);
+		obj_mgr_err("vdev is NULL for peer(%pM)", macaddr);
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	vdev_id = wlan_vdev_get_id(vdev);
-
 	/* get PSOC from VDEV, if it is NULL, return */
 	psoc = wlan_vdev_get_psoc(vdev);
 	if (psoc == NULL) {
 		obj_mgr_err(
-			"PSOC is NULL for peer(%02x:%02x:%02x:%02x:%02x:%02x)",
-				macaddr[0], macaddr[1], macaddr[2],
-				macaddr[3], macaddr[4], macaddr[5]);
+			"psoc is NULL for peer(%pM) for vdev[%d]",
+			macaddr, wlan_vdev_get_id(vdev));
 		return QDF_STATUS_E_FAILURE;
 	}
 
@@ -108,18 +104,28 @@ static QDF_STATUS wlan_objmgr_peer_obj_free(struct wlan_objmgr_peer *peer)
 
 	/* Detach peer from VDEV's peer list */
 	if (wlan_objmgr_vdev_peer_detach(vdev, peer) == QDF_STATUS_E_FAILURE) {
+		pdev = wlan_vdev_get_pdev(vdev);
+		if (!pdev) {
+			obj_mgr_err("peer(%pM) pdev is NULL", macaddr);
+			return QDF_STATUS_E_FAILURE;
+		}
 		obj_mgr_err(
-		"Peer(%02x:%02x:%02x:%02x:%02x:%02x) VDEV detach fail, vdev id: %d",
-			macaddr[0], macaddr[1], macaddr[2],
-			macaddr[3], macaddr[4], macaddr[5], vdev_id);
+			"peer(%pM) vdev detach failure for vdev[%d] pdev[%d]",
+			macaddr, wlan_vdev_get_id(vdev),
+			wlan_objmgr_pdev_get_pdev_id(pdev));
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Detach peer from PSOC's peer list */
 	if (wlan_objmgr_psoc_peer_detach(psoc, peer) == QDF_STATUS_E_FAILURE) {
+		pdev = wlan_vdev_get_pdev(vdev);
+		if (!pdev) {
+			obj_mgr_err("peer(%pM) pdev is NULL", macaddr);
+			return QDF_STATUS_E_FAILURE;
+		}
 		obj_mgr_err(
-		"Peer(%02x:%02x:%02x:%02x:%02x:%02x) PSOC detach failure",
-			macaddr[0], macaddr[1], macaddr[2],
-			macaddr[3], macaddr[4], macaddr[5]);
+			"peer(%pM) psoc detach failure for vdev[%d] pdev[%d]",
+			macaddr, wlan_vdev_get_id(vdev),
+			wlan_objmgr_pdev_get_pdev_id(pdev));
 		return QDF_STATUS_E_FAILURE;
 	}
 	qdf_spinlock_destroy(&peer->peer_lock);
@@ -144,27 +150,20 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create(
 
 	if (vdev == NULL) {
 		obj_mgr_err(
-			"VDEV is NULL for peer (%02x:%02x:%02x:%02x:%02x:%02x)",
-				macaddr[0], macaddr[1], macaddr[2],
-				macaddr[3], macaddr[4], macaddr[5]);
+			"vdev is NULL for peer (%pM)", macaddr);
 		return NULL;
 	}
 	/* Get psoc, if psoc is NULL, return */
 	psoc = wlan_vdev_get_psoc(vdev);
 	if (psoc == NULL) {
 		obj_mgr_err(
-			"PSOC is NULL for peer (%02x:%02x:%02x:%02x:%02x:%02x)",
-				macaddr[0], macaddr[1], macaddr[2],
-				macaddr[3], macaddr[4], macaddr[5]);
+			"psoc is NULL for peer (%pM)", macaddr);
 		return NULL;
 	}
 	/* Allocate memory for peer object */
 	peer = qdf_mem_malloc(sizeof(*peer));
 	if (peer == NULL) {
-		obj_mgr_err(
-		"Peer(%02x:%02x:%02x:%02x:%02x:%02x) allocation failure",
-				macaddr[0], macaddr[1], macaddr[2],
-				macaddr[3], macaddr[4], macaddr[5]);
+		obj_mgr_err("peer(%pM) allocation failure", macaddr);
 		return NULL;
 	}
 	/* set vdev to peer */
@@ -181,20 +180,14 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create(
 	/* Attach peer to psoc, psoc maintains the node table for the device */
 	if (wlan_objmgr_psoc_peer_attach(psoc, peer) !=
 					QDF_STATUS_SUCCESS) {
-		obj_mgr_err(
-		"Peer(%02x:%02x:%02x:%02x:%02x:%02x) PSOC attach failure",
-				macaddr[0], macaddr[1], macaddr[2],
-				macaddr[3], macaddr[4], macaddr[5]);
+		obj_mgr_err("peer(%pM) psoc attach failure", macaddr);
 		qdf_mem_free(peer);
 		return NULL;
 	}
 	/* Attach peer to vdev peer table */
 	if (wlan_objmgr_vdev_peer_attach(vdev, peer) !=
 					QDF_STATUS_SUCCESS) {
-		obj_mgr_err(
-		"Peer(%02x:%02x:%02x:%02x:%02x:%02x) VDEV attach failure",
-				macaddr[0], macaddr[1], macaddr[2],
-				macaddr[3], macaddr[4], macaddr[5]);
+		obj_mgr_err("peer(%pM) vdev attach failure", macaddr);
 		/* if attach fails, detach from psoc table before free */
 		wlan_objmgr_psoc_peer_detach(psoc, peer);
 		qdf_mem_free(peer);
@@ -236,9 +229,7 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create(
 	} else if (obj_status == QDF_STATUS_E_FAILURE) {
 		/* Clean up the peer */
 		obj_mgr_err(
-		"Peer(%02x:%02x:%02x:%02x:%02x:%02x) comp object alloc fail",
-				macaddr[0], macaddr[1], macaddr[2],
-				macaddr[3], macaddr[4], macaddr[5]);
+			"peer(%pM) component object alloc failure", macaddr);
 		wlan_objmgr_peer_obj_delete(peer);
 		return NULL;
 	}
@@ -254,17 +245,33 @@ static QDF_STATUS wlan_objmgr_peer_obj_destroy(struct wlan_objmgr_peer *peer)
 	uint8_t *macaddr;
 
 	if (peer == NULL) {
-		obj_mgr_err("PEER is NULL");
+		obj_mgr_err("peer is NULL");
 		return QDF_STATUS_E_FAILURE;
 	}
 
+	wlan_peer_obj_lock(peer);
 	macaddr = wlan_peer_get_macaddr(peer);
+	wlan_peer_obj_unlock(peer);
 
 	if (peer->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) {
-		obj_mgr_err(
-		"peer(%02x:%02x:%02x:%02x:%02x:%02x) object del is not invoked",
-			macaddr[0], macaddr[1], macaddr[2],
-			macaddr[3], macaddr[4], macaddr[5]);
+		struct wlan_objmgr_vdev *vdev;
+		struct wlan_objmgr_pdev *pdev;
+
+		vdev = wlan_peer_get_vdev(peer);
+		if (vdev == NULL) {
+			obj_mgr_err("vdev is NULL for peer(%pM)", macaddr);
+			return QDF_STATUS_E_FAILURE;
+		}
+
+		pdev = wlan_vdev_get_pdev(vdev);
+		if (!pdev) {
+			obj_mgr_err("peer(%pM) pdev is NULL", macaddr);
+			return QDF_STATUS_E_FAILURE;
+		}
+
+		obj_mgr_err("peer(%pM) vdev[%d] pdev[%d] delete is not invoked",
+			macaddr, wlan_vdev_get_id(vdev),
+			wlan_objmgr_pdev_get_pdev_id(pdev));
 		WLAN_OBJMGR_BUG(0);
 	}
 
@@ -281,8 +288,7 @@ static QDF_STATUS wlan_objmgr_peer_obj_destroy(struct wlan_objmgr_peer *peer)
 	obj_status = wlan_objmgr_peer_object_status(peer);
 	if (obj_status == QDF_STATUS_E_FAILURE) {
 		/* If it status is failure, memory will not be freed */
-		QDF_BUG(0);
-		return QDF_STATUS_E_FAILURE;
+		WLAN_OBJMGR_BUG(0);
 	}
 	/* few components deletion is in progress */
 	if (obj_status == QDF_STATUS_COMP_ASYNC) {
@@ -300,7 +306,7 @@ QDF_STATUS wlan_objmgr_peer_obj_delete(struct wlan_objmgr_peer *peer)
 	uint8_t *macaddr;
 
 	if (peer == NULL) {
-		obj_mgr_err("PEER is NULL");
+		obj_mgr_err("peer is NULL");
 		return QDF_STATUS_E_FAILURE;
 	}
 
@@ -308,14 +314,27 @@ QDF_STATUS wlan_objmgr_peer_obj_delete(struct wlan_objmgr_peer *peer)
 	macaddr = wlan_peer_get_macaddr(peer);
 	wlan_peer_obj_unlock(peer);
 
-
 	print_idx = qdf_get_pidx();
 	if (qdf_print_is_verbose_enabled(print_idx, QDF_MODULE_ID_OBJ_MGR,
 		QDF_TRACE_LEVEL_DEBUG)) {
-		obj_mgr_debug(
-		"Logically deleting the peer (%02x:%02x:%02x:%02x:%02x:%02x)",
-					macaddr[0], macaddr[1], macaddr[2],
-					macaddr[3], macaddr[4], macaddr[5]);
+		struct wlan_objmgr_vdev *vdev;
+		struct wlan_objmgr_pdev *pdev;
+
+		vdev = wlan_peer_get_vdev(peer);
+		if (!vdev) {
+			obj_mgr_err("vdev is NULL for peer(%pM)", macaddr);
+			return QDF_STATUS_E_FAILURE;
+		}
+
+		pdev = wlan_vdev_get_pdev(vdev);
+		if (!pdev) {
+			obj_mgr_err("peer(%pM) pdev is NULL", macaddr);
+			return QDF_STATUS_E_FAILURE;
+		}
+
+		obj_mgr_debug("L-Del peer (%pM) for vdev[%d] pdev[%d]",
+					macaddr, wlan_vdev_get_id(vdev),
+					wlan_objmgr_pdev_get_pdev_id(pdev));
 		wlan_objmgr_print_ref_ids(peer->peer_objmgr.ref_id_dbg);
 	}
 
@@ -560,19 +579,24 @@ void *wlan_objmgr_peer_get_comp_private_obj(
 }
 EXPORT_SYMBOL(wlan_objmgr_peer_get_comp_private_obj);
 
-void wlan_objmgr_peer_get_ref(struct wlan_objmgr_peer *peer,
+QDF_STATUS wlan_objmgr_peer_get_ref(struct wlan_objmgr_peer *peer,
 					wlan_objmgr_ref_dbgid id)
 {
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("Component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
+
 	if (peer == NULL) {
-		obj_mgr_err("peer obj is NULL for %d", id);
+		obj_mgr_err("peer is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 	/* Increment ref count */
 	qdf_atomic_inc(&peer->peer_objmgr.ref_cnt);
 	qdf_atomic_inc(&peer->peer_objmgr.ref_id_dbg[id]);
 
-	return;
+	return QDF_STATUS_SUCCESS;
 }
 EXPORT_SYMBOL(wlan_objmgr_peer_get_ref);
 
@@ -582,8 +606,13 @@ QDF_STATUS wlan_objmgr_peer_try_get_ref(struct wlan_objmgr_peer *peer,
 
 	uint8_t *macaddr;
 
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("Component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
+
 	if (peer == NULL) {
-		obj_mgr_err("peer obj is NULL for %d", id);
+		obj_mgr_err("peer is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -593,12 +622,9 @@ QDF_STATUS wlan_objmgr_peer_try_get_ref(struct wlan_objmgr_peer *peer,
 	if (peer->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) {
 		wlan_peer_obj_unlock(peer);
 		if (peer->peer_objmgr.print_cnt++ <=
-				WLAN_OBJMGR_RATELIMIT_THRESH)
-			obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) L-Del",
-				macaddr[0], macaddr[1], macaddr[2],
-				macaddr[3], macaddr[4], macaddr[5]);
-
-		return QDF_STATUS_E_RESOURCES;
+			 WLAN_OBJMGR_RATELIMIT_THRESH)
+			obj_mgr_err("peer(%pM) is in L-Del state", macaddr);
+			return QDF_STATUS_E_RESOURCES;
 	}
 
 	wlan_objmgr_peer_get_ref(peer, id);
@@ -608,35 +634,37 @@ QDF_STATUS wlan_objmgr_peer_try_get_ref(struct wlan_objmgr_peer *peer,
 }
 EXPORT_SYMBOL(wlan_objmgr_peer_try_get_ref);
 
-void wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
+QDF_STATUS wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
 						 wlan_objmgr_ref_dbgid id)
 {
 
 	uint8_t *macaddr;
 
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("Component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
+
 	if (peer == NULL) {
-		obj_mgr_err("peer obj is NULL for %d", id);
+		obj_mgr_err("peer is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 
+	wlan_peer_obj_lock(peer);
 	macaddr = wlan_peer_get_macaddr(peer);
+	wlan_peer_obj_unlock(peer);
 
 	if (!qdf_atomic_read(&peer->peer_objmgr.ref_id_dbg[id])) {
-		obj_mgr_err(
-		"peer(%02x:%02x:%02x:%02x:%02x:%02x) ref was not taken by %d",
-			macaddr[0], macaddr[1], macaddr[2],
-			macaddr[3], macaddr[4], macaddr[5], id);
+		obj_mgr_err("peer(%pM) ref cnt was not taken by %s",
+			macaddr, string_from_dbgid(id));
 		wlan_objmgr_print_ref_ids(peer->peer_objmgr.ref_id_dbg);
 		WLAN_OBJMGR_BUG(0);
 	}
 
 	if (!qdf_atomic_read(&peer->peer_objmgr.ref_cnt)) {
-		obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) ref cnt is 0",
-				macaddr[0], macaddr[1], macaddr[2],
-				macaddr[3], macaddr[4], macaddr[5]);
+		obj_mgr_err("peer(%pM) ref cnt is 0", macaddr);
 		WLAN_OBJMGR_BUG(0);
-		return;
 	}
 	qdf_atomic_dec(&peer->peer_objmgr.ref_id_dbg[id]);
 
@@ -652,6 +680,6 @@ void wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
 		wlan_peer_obj_unlock(peer);
 	}
 
-	return;
+	return QDF_STATUS_SUCCESS;
 }
 EXPORT_SYMBOL(wlan_objmgr_peer_release_ref);

+ 38 - 20
umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c

@@ -95,7 +95,7 @@ static QDF_STATUS wlan_objmgr_psoc_obj_free(struct wlan_objmgr_psoc *psoc)
 
 	/* Detach PSOC from global object's psoc list  */
 	if (wlan_objmgr_psoc_object_detach(psoc) == QDF_STATUS_E_FAILURE) {
-		obj_mgr_err("PSOC object detach failed");
+		obj_mgr_err("psoc detach failed");
 		return QDF_STATUS_E_FAILURE;
 	}
 	wlan_objmgr_psoc_peer_list_deinit(&psoc->soc_objmgr.peer_list);
@@ -120,7 +120,7 @@ struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version,
 
 	psoc = qdf_mem_malloc(sizeof(*psoc));
 	if (psoc == NULL) {
-		obj_mgr_err("PSOC allocation failed");
+		obj_mgr_err("psoc allocation failed");
 		return NULL;
 	}
 	qdf_spinlock_create(&psoc->psoc_lock);
@@ -168,7 +168,7 @@ struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version,
 		psoc->obj_state = WLAN_OBJ_STATE_PARTIALLY_CREATED;
 	} else if (obj_status == QDF_STATUS_E_FAILURE) {
 		/* Component object failed to be created, clean up the object */
-		obj_mgr_err("PSOC component objects allocation failed");
+		obj_mgr_err("psoc component objects allocation failed");
 		/* Clean up the psoc */
 		wlan_objmgr_psoc_obj_delete(psoc);
 		return NULL;
@@ -176,7 +176,7 @@ struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version,
 
 	if (wlan_objmgr_psoc_object_attach(psoc) !=
 				QDF_STATUS_SUCCESS) {
-		obj_mgr_err("PSOC object attach failed");
+		obj_mgr_err("psoc object attach failed");
 		wlan_objmgr_psoc_obj_delete(psoc);
 		return NULL;
 	}
@@ -215,7 +215,7 @@ static QDF_STATUS wlan_objmgr_psoc_obj_destroy(struct wlan_objmgr_psoc *psoc)
 	obj_status = wlan_objmgr_psoc_object_status(psoc);
 
 	if (obj_status == QDF_STATUS_E_FAILURE) {
-		obj_mgr_err("PSOC component object free failed");
+		obj_mgr_err("psoc component object free failed");
 		/* Ideally should not happen
 		 * This leads to memleak, BUG_ON to find which component
 		 * delete notification failed and fix it.
@@ -247,7 +247,7 @@ QDF_STATUS wlan_objmgr_psoc_obj_delete(struct wlan_objmgr_psoc *psoc)
 
 	if (qdf_print_is_verbose_enabled(print_idx, QDF_MODULE_ID_OBJ_MGR,
 		QDF_TRACE_LEVEL_DEBUG)) {
-		obj_mgr_debug("Logically deleting the psoc");
+		obj_mgr_debug("L-Del psoc");
 		wlan_objmgr_print_ref_ids(psoc->soc_objmgr.ref_id_dbg);
 	}
 
@@ -1402,7 +1402,7 @@ QDF_STATUS wlan_objmgr_psoc_peer_detach(struct wlan_objmgr_psoc *psoc,
 				QDF_STATUS_E_FAILURE) {
 		qdf_spin_unlock_bh(&peer_list->peer_list_lock);
 		wlan_psoc_obj_unlock(psoc);
-		obj_mgr_err("Failed to detach peer");
+		obj_mgr_err("psoc failed to detach peer");
 		return QDF_STATUS_E_FAILURE;
 	}
 	qdf_spin_unlock_bh(&peer_list->peer_list_lock);
@@ -1669,26 +1669,35 @@ void *wlan_objmgr_psoc_get_comp_private_obj(struct wlan_objmgr_psoc *psoc,
 }
 EXPORT_SYMBOL(wlan_objmgr_psoc_get_comp_private_obj);
 
-void wlan_objmgr_psoc_get_ref(struct wlan_objmgr_psoc *psoc,
+QDF_STATUS wlan_objmgr_psoc_get_ref(struct wlan_objmgr_psoc *psoc,
 						wlan_objmgr_ref_dbgid id)
 {
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("Component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
+
 	if (psoc == NULL) {
-		obj_mgr_err("psoc obj is NULL for id:%d", id);
+		obj_mgr_err("psoc is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 	/* Increment ref count */
 	qdf_atomic_inc(&psoc->soc_objmgr.ref_cnt);
 	qdf_atomic_inc(&psoc->soc_objmgr.ref_id_dbg[id]);
-	return;
+	return QDF_STATUS_SUCCESS;
 }
 EXPORT_SYMBOL(wlan_objmgr_psoc_get_ref);
 
 QDF_STATUS wlan_objmgr_psoc_try_get_ref(struct wlan_objmgr_psoc *psoc,
 						wlan_objmgr_ref_dbgid id)
 {
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("Component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
 	if (psoc == NULL) {
-		obj_mgr_err("psoc obj is NULL for id:%d", id);
+		obj_mgr_err("psoc is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
@@ -1698,7 +1707,8 @@ QDF_STATUS wlan_objmgr_psoc_try_get_ref(struct wlan_objmgr_psoc *psoc,
 		wlan_psoc_obj_unlock(psoc);
 		if (psoc->soc_objmgr.print_cnt++ <=
 				WLAN_OBJMGR_RATELIMIT_THRESH)
-			obj_mgr_err("[Ref id: %d] psoc is in L-Del state", id);
+			obj_mgr_err("[Ref id: %s] psoc is in L-Del state",
+							string_from_dbgid(id));
 
 		return QDF_STATUS_E_RESOURCES;
 	}
@@ -1711,17 +1721,22 @@ QDF_STATUS wlan_objmgr_psoc_try_get_ref(struct wlan_objmgr_psoc *psoc,
 }
 EXPORT_SYMBOL(wlan_objmgr_psoc_try_get_ref);
 
-void wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc,
+QDF_STATUS wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc,
 						wlan_objmgr_ref_dbgid id)
 {
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
 	if (psoc == NULL) {
-		obj_mgr_err("psoc obj is NULLi for id:%d", id);
+		obj_mgr_err("psoc is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 
 	if (!qdf_atomic_read(&psoc->soc_objmgr.ref_id_dbg[id])) {
-		obj_mgr_err("psoc ref cnt was not taken by %d", id);
+		obj_mgr_err("psoc ref cnt was not taken by %s",
+			string_from_dbgid(id));
 		wlan_objmgr_print_ref_ids(psoc->soc_objmgr.ref_id_dbg);
 		WLAN_OBJMGR_BUG(0);
 	}
@@ -1729,7 +1744,6 @@ void wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc,
 	if (!qdf_atomic_read(&psoc->soc_objmgr.ref_cnt)) {
 		obj_mgr_err("psoc ref cnt is 0");
 		WLAN_OBJMGR_BUG(0);
-		return;
 	}
 
 	qdf_atomic_dec(&psoc->soc_objmgr.ref_id_dbg[id]);
@@ -1737,7 +1751,7 @@ void wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc,
 	if (qdf_atomic_dec_and_test(&psoc->soc_objmgr.ref_cnt))
 		wlan_objmgr_psoc_obj_destroy(psoc);
 
-	return;
+	return QDF_STATUS_SUCCESS;
 }
 EXPORT_SYMBOL(wlan_objmgr_psoc_release_ref);
 
@@ -1792,17 +1806,21 @@ QDF_STATUS wlan_objmgr_print_ref_all_objects_per_psoc(
 	wlan_objmgr_iterate_obj_list_all(psoc, WLAN_PEER_OP,
 				wlan_objmgr_psoc_peer_ref_print, NULL, 1,
 				WLAN_OBJMGR_ID);
+	obj_mgr_info("----------------------------------");
 	obj_mgr_info("Ref counts of VDEV");
 	wlan_objmgr_iterate_obj_list_all(psoc, WLAN_VDEV_OP,
 				wlan_objmgr_psoc_vdev_ref_print, NULL, 1,
 				WLAN_OBJMGR_ID);
+	obj_mgr_info("----------------------------------");
 	obj_mgr_info("Ref counts of PDEV");
 	wlan_objmgr_iterate_obj_list_all(psoc, WLAN_PDEV_OP,
 				wlan_objmgr_psoc_pdev_ref_print, NULL, 1,
 				WLAN_OBJMGR_ID);
+	obj_mgr_info("----------------------------------");
 
-	obj_mgr_info(" Ref counts of PSOC");
+	obj_mgr_info("Ref counts of PSOC");
 	wlan_objmgr_print_ref_ids(psoc->soc_objmgr.ref_id_dbg);
+	obj_mgr_info("----------------------------------");
 
 	return QDF_STATUS_SUCCESS;
 }

+ 87 - 47
umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c

@@ -82,8 +82,8 @@ static QDF_STATUS wlan_objmgr_vdev_obj_free(struct wlan_objmgr_vdev *vdev)
 	/* if PDEV is NULL, return */
 	pdev = wlan_vdev_get_pdev(vdev);
 	if (pdev == NULL) {
-		obj_mgr_err("pdev is NULL for vdev-id: %d",
-			vdev->vdev_objmgr.vdev_id);
+		obj_mgr_err("pdev is NULL for vdev[%d]",
+			wlan_vdev_get_id(vdev));
 		return QDF_STATUS_E_FAILURE;
 	}
 
@@ -124,8 +124,8 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
 	psoc = wlan_pdev_get_psoc(pdev);
 	/* PSOC is NULL */
 	if (psoc == NULL) {
-		obj_mgr_err("psoc is NULL for pdev-id:%d",
-			pdev->pdev_objmgr.wlan_pdev_id);
+		obj_mgr_err("psoc is NULL for pdev[%d]",
+			wlan_objmgr_pdev_get_pdev_id(pdev));
 		return NULL;
 	}
 	/* Allocate vdev object memory */
@@ -137,8 +137,7 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
 	/* Attach VDEV to PSOC VDEV's list */
 	if (wlan_objmgr_psoc_vdev_attach(psoc, vdev) !=
 				QDF_STATUS_SUCCESS) {
-		obj_mgr_err("psoc vdev attach failed for vdev-id:%d",
-					vdev->vdev_objmgr.vdev_id);
+		obj_mgr_err("psoc attach failed for vdev");
 		qdf_mem_free(vdev);
 		return NULL;
 	}
@@ -147,8 +146,8 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
 	/* Attach vdev to PDEV */
 	if (wlan_objmgr_pdev_vdev_attach(pdev, vdev) !=
 				QDF_STATUS_SUCCESS) {
-		obj_mgr_err("pdev vdev attach failed for vdev-id:%d",
-				vdev->vdev_objmgr.vdev_id);
+		obj_mgr_err("pdev attach failed for vdev[%d]",
+				wlan_vdev_get_id(vdev));
 		wlan_objmgr_psoc_vdev_detach(psoc, vdev);
 		qdf_mem_free(vdev);
 		return NULL;
@@ -216,9 +215,9 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
 	/* Component object failed to be created, clean up the object */
 	} else if (obj_status == QDF_STATUS_E_FAILURE) {
 		/* Clean up the psoc */
+		obj_mgr_err("Component object creation failed for vdev[%d]",
+			wlan_vdev_get_id(vdev));
 		wlan_objmgr_vdev_obj_delete(vdev);
-		obj_mgr_err("VDEV comp objects creation failed for vdev-id:%d",
-			vdev->vdev_objmgr.vdev_id);
 		return NULL;
 	}
 	return vdev;
@@ -231,18 +230,26 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev)
 	wlan_objmgr_vdev_destroy_handler handler;
 	QDF_STATUS obj_status;
 	void *arg;
-	uint8_t vdev_id;
 
 	if (vdev == NULL) {
 		obj_mgr_err("vdev is NULL");
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	vdev_id = wlan_vdev_get_id(vdev);
-
 	if (vdev->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) {
-		obj_mgr_err("vdev object delete is not invoked: vdev-id:%d",
-			wlan_vdev_get_id(vdev));
+
+		struct wlan_objmgr_pdev *pdev;
+
+		pdev = wlan_vdev_get_pdev(vdev);
+		if (!pdev) {
+			obj_mgr_err("pdev is NULL for vdev[%d]",
+							wlan_vdev_get_id(vdev));
+			return QDF_STATUS_E_FAILURE;
+		}
+		obj_mgr_err(
+			"Object delete is not invoked for vdev[%d] pdev[%d]",
+			wlan_vdev_get_id(vdev),
+			wlan_objmgr_pdev_get_pdev_id(pdev));
 		WLAN_OBJMGR_BUG(0);
 	}
 
@@ -259,8 +266,18 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev)
 	obj_status = wlan_objmgr_vdev_object_status(vdev);
 
 	if (obj_status == QDF_STATUS_E_FAILURE) {
-		obj_mgr_err("VDEV object deletion failed: vdev-id: %d",
-				vdev_id);
+
+		struct wlan_objmgr_pdev *pdev;
+
+		pdev = wlan_vdev_get_pdev(vdev);
+		if (!pdev) {
+			obj_mgr_err("pdev is null for vdev[%d]",
+							wlan_vdev_get_id(vdev));
+			return QDF_STATUS_E_FAILURE;
+		}
+		obj_mgr_err("Object deletion failed for vdev[%d] pdev[%d]",
+			wlan_vdev_get_id(vdev),
+			wlan_objmgr_pdev_get_pdev_id(pdev));
 		/* Ideally should not happen */
 		/* This leads to memleak ??? how to handle */
 		QDF_BUG(0);
@@ -289,8 +306,18 @@ QDF_STATUS wlan_objmgr_vdev_obj_delete(struct wlan_objmgr_vdev *vdev)
 	print_idx = qdf_get_pidx();
 	if (qdf_print_is_verbose_enabled(print_idx, QDF_MODULE_ID_OBJ_MGR,
 		QDF_TRACE_LEVEL_DEBUG)) {
-		obj_mgr_debug("Logically deleting the vdev(id:%d)",
-					vdev->vdev_objmgr.vdev_id);
+		struct wlan_objmgr_pdev *pdev;
+
+		pdev = wlan_vdev_get_pdev(vdev);
+		if (!pdev) {
+			obj_mgr_err("pdev is NULL for vdev[%d]",
+							wlan_vdev_get_id(vdev));
+			return QDF_STATUS_E_FAILURE;
+		}
+
+		obj_mgr_debug("L-Del vdev[%d] pdev[%d]",
+			wlan_vdev_get_id(vdev),
+			wlan_objmgr_pdev_get_pdev_id(pdev));
 		wlan_objmgr_print_ref_ids(vdev->vdev_objmgr.ref_id_dbg);
 	}
 
@@ -451,19 +478,25 @@ QDF_STATUS wlan_objmgr_iterate_peerobj_list(
 	qdf_list_t *peer_list = NULL;
 	struct wlan_objmgr_peer *peer = NULL;
 	struct wlan_objmgr_peer *peer_next = NULL;
-	uint8_t vdev_id;
 
 	if (vdev == NULL) {
 		obj_mgr_err("VDEV is NULL");
 		return QDF_STATUS_E_FAILURE;
 	}
-	wlan_vdev_obj_lock(vdev);
-	vdev_id = wlan_vdev_get_id(vdev);
 
 	if (vdev->obj_state ==
 		WLAN_OBJ_STATE_LOGICALLY_DELETED) {
-		wlan_vdev_obj_unlock(vdev);
-		obj_mgr_err("VDEV is in delete progress: vdev-id:%d", vdev_id);
+		struct wlan_objmgr_pdev *pdev;
+		pdev = wlan_vdev_get_pdev(vdev);
+		if (!pdev) {
+			obj_mgr_err("pdev is NULL for vdev[%d]",
+							wlan_vdev_get_id(vdev));
+			return QDF_STATUS_E_FAILURE;
+		}
+
+		obj_mgr_err("vdev[%d] pdev[%d] is in delete progress",
+					wlan_vdev_get_id(vdev),
+					wlan_objmgr_pdev_get_pdev_id(pdev));
 		return QDF_STATUS_E_FAILURE;
 	}
 	wlan_objmgr_vdev_get_ref(vdev, dbg_id);
@@ -484,7 +517,6 @@ QDF_STATUS wlan_objmgr_iterate_peerobj_list(
 		}
 	}
 	wlan_objmgr_vdev_release_ref(vdev, dbg_id);
-	wlan_vdev_obj_unlock(vdev);
 	return QDF_STATUS_SUCCESS;
 }
 
@@ -713,77 +745,85 @@ void *wlan_objmgr_vdev_get_comp_private_obj(
 }
 EXPORT_SYMBOL(wlan_objmgr_vdev_get_comp_private_obj);
 
-void wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev,
+QDF_STATUS wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev,
 						wlan_objmgr_ref_dbgid id)
 {
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("Component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
+
 	if (vdev == NULL) {
-		obj_mgr_err("vdev obj is NULL for id:%d", id);
+		obj_mgr_err("vdev is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 	/* Increment ref count */
 	qdf_atomic_inc(&vdev->vdev_objmgr.ref_cnt);
 	qdf_atomic_inc(&vdev->vdev_objmgr.ref_id_dbg[id]);
 
-	return;
+	return QDF_STATUS_SUCCESS;
 }
 EXPORT_SYMBOL(wlan_objmgr_vdev_get_ref);
 
 QDF_STATUS wlan_objmgr_vdev_try_get_ref(struct wlan_objmgr_vdev *vdev,
 						wlan_objmgr_ref_dbgid id)
 {
-	uint8_t vdev_id;
+
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("Component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
 
 	if (vdev == NULL) {
-		obj_mgr_err("vdev obj is NULL for id:%d", id);
+		obj_mgr_err("vdev is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	wlan_vdev_obj_lock(vdev);
-	vdev_id = wlan_vdev_get_id(vdev);
 	if (vdev->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) {
 		wlan_vdev_obj_unlock(vdev);
 		if (vdev->vdev_objmgr.print_cnt++ <=
 				WLAN_OBJMGR_RATELIMIT_THRESH)
-			obj_mgr_err("[Ref id: %d] vdev(%d) is in Log Del",
-				id, vdev_id);
+			obj_mgr_err("[Ref id: %s] vdev[%d] is in L-Del state",
+				string_from_dbgid(id), wlan_vdev_get_id(vdev));
 
 		return QDF_STATUS_E_RESOURCES;
 	}
 
 	/* Increment ref count */
 	wlan_objmgr_vdev_get_ref(vdev, id);
-	wlan_vdev_obj_unlock(vdev);
 
 	return QDF_STATUS_SUCCESS;
 }
 EXPORT_SYMBOL(wlan_objmgr_vdev_try_get_ref);
 
-void wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev,
+QDF_STATUS wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev,
 						wlan_objmgr_ref_dbgid id)
 {
-	uint8_t vdev_id;
+
+	if (id >= WLAN_REF_ID_MAX) {
+		obj_mgr_err("Component-id %d is not supported", id);
+		return QDF_STATUS_MAXCOMP_FAIL;
+	}
 
 	if (vdev == NULL) {
-		obj_mgr_err("vdev obj is NULL for id:%d", id);
+		obj_mgr_err("vdev is NULL for %s", string_from_dbgid(id));
 		QDF_ASSERT(0);
-		return;
+		return QDF_STATUS_E_FAILURE;
 	}
 
-	vdev_id = wlan_vdev_get_id(vdev);
-
 	if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_id_dbg[id])) {
-		obj_mgr_err("vdev (id:%d)ref cnt was not taken by %d",
-				vdev_id, id);
+		obj_mgr_err("vdev[%d] ref cnt was not taken by %s",
+						wlan_vdev_get_id(vdev),
+						string_from_dbgid(id));
 		wlan_objmgr_print_ref_ids(vdev->vdev_objmgr.ref_id_dbg);
 		WLAN_OBJMGR_BUG(0);
 	}
 
 	if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_cnt)) {
-		obj_mgr_err("vdev ref cnt is 0");
+		obj_mgr_err("vdev[%d] ref cnt is 0", wlan_vdev_get_id(vdev));
 		WLAN_OBJMGR_BUG(0);
-		return;
 	}
 	qdf_atomic_dec(&vdev->vdev_objmgr.ref_id_dbg[id]);
 
@@ -791,7 +831,7 @@ void wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev,
 	if (qdf_atomic_dec_and_test(&vdev->vdev_objmgr.ref_cnt))
 		wlan_objmgr_vdev_obj_destroy(vdev);
 
-	return;
+	return QDF_STATUS_SUCCESS;
 }
 EXPORT_SYMBOL(wlan_objmgr_vdev_release_ref);