From ea368417b04bb91dbf3dd3c05d494dc8ced60abf Mon Sep 17 00:00:00 2001 From: Vivek Date: Fri, 28 Jul 2017 12:49:17 +0530 Subject: [PATCH] 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 --- .../obj_mgr/inc/wlan_objmgr_pdev_obj.h | 4 +- .../obj_mgr/inc/wlan_objmgr_peer_obj.h | 4 +- .../obj_mgr/inc/wlan_objmgr_psoc_obj.h | 4 +- .../obj_mgr/inc/wlan_objmgr_vdev_obj.h | 4 +- .../obj_mgr/src/wlan_objmgr_global_obj.c | 72 ++++--- .../obj_mgr/src/wlan_objmgr_pdev_obj.c | 72 ++++--- .../obj_mgr/src/wlan_objmgr_peer_obj.c | 180 ++++++++++-------- .../obj_mgr/src/wlan_objmgr_psoc_obj.c | 58 ++++-- .../obj_mgr/src/wlan_objmgr_vdev_obj.c | 136 ++++++++----- 9 files changed, 331 insertions(+), 203 deletions(-) diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h index d9007723e05a..95dce8d49a76 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h +++ b/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); /** diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_peer_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_peer_obj.h index 78e8a869617e..675bd9261e67 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_peer_obj.h +++ b/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); /** diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h index 97e8be99a6a8..3ebacbc18f89 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h +++ b/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); /** diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h index 17ac88347c75..1ca75bbff10d 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h +++ b/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); /** diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c index 3570dbed2986..56fd7a86957e 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c +++ b/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 */ diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c index 6a9a1d146943..19cae9977ae1 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c +++ b/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); 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 b0f8c4a365f4..b3328cf75491 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 @@ -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 (peer == NULL) { - obj_mgr_err("peer obj is NULL for %d", id); - QDF_ASSERT(0); - return; + 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 is NULL for %s", string_from_dbgid(id)); + QDF_ASSERT(0); + 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); diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c index cc45ad82205c..2a08ff33021f 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c +++ b/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; } diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c index e14205a36cf8..fa2ea775746e 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c +++ b/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 (vdev == NULL) { - obj_mgr_err("vdev obj is NULL for id:%d", id); - QDF_ASSERT(0); - return; + if (id >= WLAN_REF_ID_MAX) { + obj_mgr_err("Component-id %d is not supported", id); + return QDF_STATUS_MAXCOMP_FAIL; } - vdev_id = wlan_vdev_get_id(vdev); + if (vdev == NULL) { + obj_mgr_err("vdev is NULL for %s", string_from_dbgid(id)); + QDF_ASSERT(0); + return QDF_STATUS_E_FAILURE; + } 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);