Revert "qcacmn: Add more information to object manager debug prints"

This reverts the commit with change id I75b2d1a04feb688d6e397fa28c988abb56b2a11d.
The original change introduced a regression on legacy & Hawkeye,
where a soft lock up is seen after vap create and doing wifi down.
This change reversal resolved the above problem.

Change-Id: I303c1f79be57e5acbe4ad1e6ec9b58ca4e6abcbb
CRs-Fixed: 2110166
This commit is contained in:
Vivek 2017-09-15 18:34:49 +05:30 • committed by snandini
commit 8ed2fe93dd
9 changed files with 200 additions and 328 deletions

View file

@ -706,7 +706,7 @@ static inline uint8_t wlan_pdev_get_max_vdev_count(
*
* Return: void
*/
QDF_STATUS wlan_objmgr_pdev_get_ref(struct wlan_objmgr_pdev *pdev,
void 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
*/
QDF_STATUS wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
void wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
wlan_objmgr_ref_dbgid id);
/**

View file

@ -374,7 +374,7 @@ static inline void wlan_peer_obj_unlock(struct wlan_objmgr_peer *peer)
*
* Return: void
*/
QDF_STATUS wlan_objmgr_peer_get_ref(struct wlan_objmgr_peer *peer,
void 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
*/
QDF_STATUS wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
void wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
wlan_objmgr_ref_dbgid id);
/**

View file

@ -1181,7 +1181,7 @@ static inline void wlan_psoc_set_qdf_dev(
*
* Return: void
*/
QDF_STATUS wlan_objmgr_psoc_get_ref(struct wlan_objmgr_psoc *psoc,
void 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
*/
QDF_STATUS wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc,
void wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc,
wlan_objmgr_ref_dbgid id);
/**

View file

@ -1391,7 +1391,7 @@ static inline uint16_t wlan_vdev_get_peer_count(struct wlan_objmgr_vdev *vdev)
*
* Return: void
*/
QDF_STATUS wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev,
void 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
*/
QDF_STATUS wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev,
void wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev,
wlan_objmgr_ref_dbgid id);
/**

View file

@ -101,8 +101,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -129,8 +128,7 @@ 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 %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is not registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -157,8 +155,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -185,8 +182,7 @@ 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 %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is not registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -213,8 +209,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
return QDF_STATUS_E_FAILURE;
}
/* Store handler and args in Global object table */
@ -239,8 +234,7 @@ 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 %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is not registered", id);
return QDF_STATUS_E_FAILURE;
}
/* Reset handlers, and args to NULL */
@ -266,8 +260,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -294,8 +287,7 @@ 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 %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is not registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -322,8 +314,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -350,8 +341,7 @@ 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 comp %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for Component %d is not registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -378,8 +368,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
return QDF_STATUS_E_FAILURE;
}
/* Store handler and args in Global object table */
@ -404,8 +393,7 @@ 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 comp %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for Component %d is not registered", id);
return QDF_STATUS_E_FAILURE;
}
/* Reset handlers, and args to NULL */
@ -431,8 +419,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -458,8 +445,7 @@ 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 %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is not registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -485,8 +471,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -512,8 +497,7 @@ 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 %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is not registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -539,8 +523,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
return QDF_STATUS_E_FAILURE;
}
/* Store handler and args in Global object table */
@ -565,8 +548,7 @@ 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 comp %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for Component %d is not registered", id);
return QDF_STATUS_E_FAILURE;
}
/* Reset handlers, and args to NULL */
@ -592,8 +574,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -620,8 +601,7 @@ 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 %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is not registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -647,8 +627,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -674,8 +653,7 @@ 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 %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is not registered", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -701,8 +679,7 @@ 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 %s is already registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is already registered", id);
return QDF_STATUS_E_FAILURE;
}
/* Store handler and args in Global object table */
@ -727,8 +704,7 @@ 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 %s is not registered",
string_from_dbgid(id));
obj_mgr_err("Callback for comp %d is not registered", id);
return QDF_STATUS_E_FAILURE;
}
/* Reset handlers, and args to NULL */

View file

@ -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 is NULL");
obj_mgr_err("pdev obj 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 detach failed for pdev[%d]", pdev_id);
obj_mgr_err("PSOC PDEV detach failed: pdev-id: %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("psoc attach failed for pdev");
obj_mgr_err("pdev psoc attach failed");
qdf_mem_free(pdev);
return NULL;
}
@ -164,9 +164,7 @@ 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(
"Component objects allocation failed for pdev[%d]",
wlan_objmgr_pdev_get_pdev_id(pdev));
obj_mgr_err("PDEV component objects allocation failed");
wlan_objmgr_pdev_obj_delete(pdev);
return NULL;
}
@ -190,7 +188,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("Object delete is not invoked for pdev[%d]",
obj_mgr_err("pdev object delete is not invoked: pdev-id:%d",
pdev_id);
WLAN_OBJMGR_BUG(0);
}
@ -208,11 +206,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("Component objects destroy failed for pdev[%d]",
obj_mgr_err("PDEV component objects destroy failed: pdev-id:%d",
pdev_id);
/* Ideally should not happen */
/* This leads to memleak ??? how to handle */
WLAN_OBJMGR_BUG(0);
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
/* Deletion is in progress */
@ -237,7 +235,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("L-Del pdev[%d]",
obj_mgr_debug("Logically deleting the pdev(id:%d)",
pdev->pdev_objmgr.wlan_pdev_id);
wlan_objmgr_print_ref_ids(pdev->pdev_objmgr.ref_id_dbg);
}
@ -271,14 +269,13 @@ 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-%s already have valid pointer",
string_from_dbgid(id));
obj_mgr_err("component-%d already have valid pointer", id);
wlan_pdev_obj_unlock(pdev);
return QDF_STATUS_E_FAILURE;
}
@ -784,12 +781,12 @@ void *wlan_objmgr_pdev_get_comp_private_obj(
/* component id is invalid */
if (id >= WLAN_UMAC_MAX_COMPONENTS) {
WLAN_OBJMGR_BUG(0);
QDF_BUG(0);
return NULL;
}
if (pdev == NULL) {
WLAN_OBJMGR_BUG(0);
QDF_BUG(0);
return NULL;
}
@ -799,23 +796,18 @@ void *wlan_objmgr_pdev_get_comp_private_obj(
}
EXPORT_SYMBOL(wlan_objmgr_pdev_get_comp_private_obj);
QDF_STATUS wlan_objmgr_pdev_get_ref(struct wlan_objmgr_pdev *pdev,
void 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 is NULL for %s", string_from_dbgid(id));
obj_mgr_err("pdev obj is NULL");
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
return;
}
qdf_atomic_inc(&pdev->pdev_objmgr.ref_cnt);
qdf_atomic_inc(&pdev->pdev_objmgr.ref_id_dbg[id]);
return QDF_STATUS_SUCCESS;
return;
}
EXPORT_SYMBOL(wlan_objmgr_pdev_get_ref);
@ -824,13 +816,8 @@ 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 is NULL for %s", string_from_dbgid(id));
obj_mgr_err("pdev obj is NULL");
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -841,8 +828,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: %s] pdev[%d] is in L-Del state",
string_from_dbgid(id), pdev_id);
obj_mgr_err("[Ref id: %d] pdev [%d] is in L-Del state",
id, pdev_id);
return QDF_STATUS_E_RESOURCES;
}
@ -854,35 +841,30 @@ QDF_STATUS wlan_objmgr_pdev_try_get_ref(struct wlan_objmgr_pdev *pdev,
}
EXPORT_SYMBOL(wlan_objmgr_pdev_try_get_ref);
QDF_STATUS wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
void 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 is NULL for %s", string_from_dbgid(id));
obj_mgr_err("pdev obj is NULL");
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
return;
}
pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
if (!qdf_atomic_read(&pdev->pdev_objmgr.ref_id_dbg[id])) {
obj_mgr_err("pdev[%d] ref cnt was not taken by %s",
pdev_id, string_from_dbgid(id));
obj_mgr_err("pdev (id:%d)ref cnt was not taken by %d",
pdev_id, 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[%d] ref cnt is 0", pdev_id);
obj_mgr_err("pdev ref cnt is 0: pdev-id:%d", pdev_id);
WLAN_OBJMGR_BUG(0);
return QDF_STATUS_E_FAILURE;
return;
}
qdf_atomic_dec(&pdev->pdev_objmgr.ref_id_dbg[id]);
@ -890,6 +872,6 @@ QDF_STATUS 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 QDF_STATUS_SUCCESS;
return;
}
EXPORT_SYMBOL(wlan_objmgr_pdev_release_ref);

View file

@ -69,30 +69,34 @@ 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(%pM)", macaddr);
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]);
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(%pM) for vdev[%d]",
macaddr, wlan_vdev_get_id(vdev));
"PSOC is NULL for peer(%02x:%02x:%02x:%02x:%02x:%02x)",
macaddr[0], macaddr[1], macaddr[2],
macaddr[3], macaddr[4], macaddr[5]);
return QDF_STATUS_E_FAILURE;
}
@ -104,28 +108,18 @@ 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(%pM) vdev detach failure for vdev[%d] pdev[%d]",
macaddr, wlan_vdev_get_id(vdev),
wlan_objmgr_pdev_get_pdev_id(pdev));
"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);
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(%pM) psoc detach failure for vdev[%d] pdev[%d]",
macaddr, wlan_vdev_get_id(vdev),
wlan_objmgr_pdev_get_pdev_id(pdev));
"Peer(%02x:%02x:%02x:%02x:%02x:%02x) PSOC detach failure",
macaddr[0], macaddr[1], macaddr[2],
macaddr[3], macaddr[4], macaddr[5]);
return QDF_STATUS_E_FAILURE;
}
qdf_spinlock_destroy(&peer->peer_lock);
@ -150,20 +144,27 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create(
if (vdev == NULL) {
obj_mgr_err(
"vdev is NULL for peer (%pM)", macaddr);
"VDEV is NULL for peer (%02x:%02x:%02x:%02x:%02x:%02x)",
macaddr[0], macaddr[1], macaddr[2],
macaddr[3], macaddr[4], macaddr[5]);
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 (%pM)", macaddr);
"PSOC is NULL for peer (%02x:%02x:%02x:%02x:%02x:%02x)",
macaddr[0], macaddr[1], macaddr[2],
macaddr[3], macaddr[4], macaddr[5]);
return NULL;
}
/* Allocate memory for peer object */
peer = qdf_mem_malloc(sizeof(*peer));
if (peer == NULL) {
obj_mgr_err("peer(%pM) allocation failure", macaddr);
obj_mgr_err(
"Peer(%02x:%02x:%02x:%02x:%02x:%02x) allocation failure",
macaddr[0], macaddr[1], macaddr[2],
macaddr[3], macaddr[4], macaddr[5]);
return NULL;
}
/* set vdev to peer */
@ -180,14 +181,20 @@ 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(%pM) psoc attach failure", macaddr);
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]);
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(%pM) vdev attach failure", macaddr);
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]);
/* if attach fails, detach from psoc table before free */
wlan_objmgr_psoc_peer_detach(psoc, peer);
qdf_mem_free(peer);
@ -229,7 +236,9 @@ 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(%pM) component object alloc failure", macaddr);
"Peer(%02x:%02x:%02x:%02x:%02x:%02x) comp object alloc fail",
macaddr[0], macaddr[1], macaddr[2],
macaddr[3], macaddr[4], macaddr[5]);
wlan_objmgr_peer_obj_delete(peer);
return NULL;
}
@ -245,33 +254,17 @@ 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) {
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));
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]);
WLAN_OBJMGR_BUG(0);
}
@ -288,7 +281,8 @@ 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 */
WLAN_OBJMGR_BUG(0);
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
/* few components deletion is in progress */
if (obj_status == QDF_STATUS_COMP_ASYNC) {
@ -306,7 +300,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;
}
@ -314,27 +308,14 @@ 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)) {
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));
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]);
wlan_objmgr_print_ref_ids(peer->peer_objmgr.ref_id_dbg);
}
@ -579,24 +560,19 @@ void *wlan_objmgr_peer_get_comp_private_obj(
}
EXPORT_SYMBOL(wlan_objmgr_peer_get_comp_private_obj);
QDF_STATUS wlan_objmgr_peer_get_ref(struct wlan_objmgr_peer *peer,
void 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 is NULL for %s", string_from_dbgid(id));
obj_mgr_err("peer obj is NULL for %d", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
return;
}
/* Increment ref count */
qdf_atomic_inc(&peer->peer_objmgr.ref_cnt);
qdf_atomic_inc(&peer->peer_objmgr.ref_id_dbg[id]);
return QDF_STATUS_SUCCESS;
return;
}
EXPORT_SYMBOL(wlan_objmgr_peer_get_ref);
@ -606,13 +582,8 @@ 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 is NULL for %s", string_from_dbgid(id));
obj_mgr_err("peer obj is NULL for %d", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -622,9 +593,12 @@ 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(%pM) is in L-Del state", macaddr);
return QDF_STATUS_E_RESOURCES;
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_peer_get_ref(peer, id);
@ -634,37 +608,35 @@ QDF_STATUS wlan_objmgr_peer_try_get_ref(struct wlan_objmgr_peer *peer,
}
EXPORT_SYMBOL(wlan_objmgr_peer_try_get_ref);
QDF_STATUS wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
void 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 is NULL for %s", string_from_dbgid(id));
obj_mgr_err("peer obj is NULL for %d", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
return;
}
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(%pM) ref cnt was not taken by %s",
macaddr, string_from_dbgid(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);
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(%pM) ref cnt is 0", macaddr);
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]);
WLAN_OBJMGR_BUG(0);
return;
}
qdf_atomic_dec(&peer->peer_objmgr.ref_id_dbg[id]);
@ -680,6 +652,6 @@ QDF_STATUS wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
wlan_peer_obj_unlock(peer);
}
return QDF_STATUS_SUCCESS;
return;
}
EXPORT_SYMBOL(wlan_objmgr_peer_release_ref);

View file

@ -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 detach failed");
obj_mgr_err("PSOC object 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("L-Del psoc");
obj_mgr_debug("Logically deleting the 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("psoc failed to detach peer");
obj_mgr_err("Failed to detach peer");
return QDF_STATUS_E_FAILURE;
}
qdf_spin_unlock_bh(&peer_list->peer_list_lock);
@ -1669,35 +1669,26 @@ void *wlan_objmgr_psoc_get_comp_private_obj(struct wlan_objmgr_psoc *psoc,
}
EXPORT_SYMBOL(wlan_objmgr_psoc_get_comp_private_obj);
QDF_STATUS wlan_objmgr_psoc_get_ref(struct wlan_objmgr_psoc *psoc,
void 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 is NULL for %s", string_from_dbgid(id));
obj_mgr_err("psoc obj is NULL for id:%d", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
return;
}
/* Increment ref count */
qdf_atomic_inc(&psoc->soc_objmgr.ref_cnt);
qdf_atomic_inc(&psoc->soc_objmgr.ref_id_dbg[id]);
return QDF_STATUS_SUCCESS;
return;
}
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 is NULL for %s", string_from_dbgid(id));
obj_mgr_err("psoc obj is NULL for id:%d", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
@ -1707,8 +1698,7 @@ 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: %s] psoc is in L-Del state",
string_from_dbgid(id));
obj_mgr_err("[Ref id: %d] psoc is in L-Del state", id);
return QDF_STATUS_E_RESOURCES;
}
@ -1721,22 +1711,17 @@ QDF_STATUS wlan_objmgr_psoc_try_get_ref(struct wlan_objmgr_psoc *psoc,
}
EXPORT_SYMBOL(wlan_objmgr_psoc_try_get_ref);
QDF_STATUS wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc,
void 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 is NULL for %s", string_from_dbgid(id));
obj_mgr_err("psoc obj is NULLi for id:%d", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
return;
}
if (!qdf_atomic_read(&psoc->soc_objmgr.ref_id_dbg[id])) {
obj_mgr_err("psoc ref cnt was not taken by %s",
string_from_dbgid(id));
obj_mgr_err("psoc ref cnt was not taken by %d", id);
wlan_objmgr_print_ref_ids(psoc->soc_objmgr.ref_id_dbg);
WLAN_OBJMGR_BUG(0);
}
@ -1744,6 +1729,7 @@ QDF_STATUS 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]);
@ -1751,7 +1737,7 @@ QDF_STATUS 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 QDF_STATUS_SUCCESS;
return;
}
EXPORT_SYMBOL(wlan_objmgr_psoc_release_ref);
@ -1806,21 +1792,17 @@ 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;
}

View file

@ -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[%d]",
wlan_vdev_get_id(vdev));
obj_mgr_err("pdev is NULL for vdev-id: %d",
vdev->vdev_objmgr.vdev_id);
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[%d]",
wlan_objmgr_pdev_get_pdev_id(pdev));
obj_mgr_err("psoc is NULL for pdev-id:%d",
pdev->pdev_objmgr.wlan_pdev_id);
return NULL;
}
/* Allocate vdev object memory */
@ -137,7 +137,8 @@ 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 attach failed for vdev");
obj_mgr_err("psoc vdev attach failed for vdev-id:%d",
vdev->vdev_objmgr.vdev_id);
qdf_mem_free(vdev);
return NULL;
}
@ -146,8 +147,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 attach failed for vdev[%d]",
wlan_vdev_get_id(vdev));
obj_mgr_err("pdev vdev attach failed for vdev-id:%d",
vdev->vdev_objmgr.vdev_id);
wlan_objmgr_psoc_vdev_detach(psoc, vdev);
qdf_mem_free(vdev);
return NULL;
@ -215,9 +216,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;
@ -230,26 +231,18 @@ 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) {
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));
obj_mgr_err("vdev object delete is not invoked: vdev-id:%d",
wlan_vdev_get_id(vdev));
WLAN_OBJMGR_BUG(0);
}
@ -266,18 +259,8 @@ 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) {
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));
obj_mgr_err("VDEV object deletion failed: vdev-id: %d",
vdev_id);
/* Ideally should not happen */
/* This leads to memleak ??? how to handle */
QDF_BUG(0);
@ -306,18 +289,8 @@ 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)) {
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));
obj_mgr_debug("Logically deleting the vdev(id:%d)",
vdev->vdev_objmgr.vdev_id);
wlan_objmgr_print_ref_ids(vdev->vdev_objmgr.ref_id_dbg);
}
@ -478,25 +451,19 @@ 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) {
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));
wlan_vdev_obj_unlock(vdev);
obj_mgr_err("VDEV is in delete progress: vdev-id:%d", vdev_id);
return QDF_STATUS_E_FAILURE;
}
wlan_objmgr_vdev_get_ref(vdev, dbg_id);
@ -517,6 +484,7 @@ QDF_STATUS wlan_objmgr_iterate_peerobj_list(
}
}
wlan_objmgr_vdev_release_ref(vdev, dbg_id);
wlan_vdev_obj_unlock(vdev);
return QDF_STATUS_SUCCESS;
}
@ -745,85 +713,77 @@ void *wlan_objmgr_vdev_get_comp_private_obj(
}
EXPORT_SYMBOL(wlan_objmgr_vdev_get_comp_private_obj);
QDF_STATUS wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev,
void 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 is NULL for %s", string_from_dbgid(id));
obj_mgr_err("vdev obj is NULL for id:%d", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
return;
}
/* Increment ref count */
qdf_atomic_inc(&vdev->vdev_objmgr.ref_cnt);
qdf_atomic_inc(&vdev->vdev_objmgr.ref_id_dbg[id]);
return QDF_STATUS_SUCCESS;
return;
}
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)
{
if (id >= WLAN_REF_ID_MAX) {
obj_mgr_err("Component-id %d is not supported", id);
return QDF_STATUS_MAXCOMP_FAIL;
}
uint8_t vdev_id;
if (vdev == NULL) {
obj_mgr_err("vdev is NULL for %s", string_from_dbgid(id));
obj_mgr_err("vdev obj is NULL for id:%d", 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: %s] vdev[%d] is in L-Del state",
string_from_dbgid(id), wlan_vdev_get_id(vdev));
obj_mgr_err("[Ref id: %d] vdev(%d) is in Log Del",
id, vdev_id);
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);
QDF_STATUS wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev,
void wlan_objmgr_vdev_release_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;
}
uint8_t vdev_id;
if (vdev == NULL) {
obj_mgr_err("vdev is NULL for %s", string_from_dbgid(id));
obj_mgr_err("vdev obj is NULL for id:%d", id);
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
return;
}
vdev_id = wlan_vdev_get_id(vdev);
if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_id_dbg[id])) {
obj_mgr_err("vdev[%d] ref cnt was not taken by %s",
wlan_vdev_get_id(vdev),
string_from_dbgid(id));
obj_mgr_err("vdev (id:%d)ref cnt was not taken by %d",
vdev_id, 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[%d] ref cnt is 0", wlan_vdev_get_id(vdev));
obj_mgr_err("vdev ref cnt is 0");
WLAN_OBJMGR_BUG(0);
return;
}
qdf_atomic_dec(&vdev->vdev_objmgr.ref_id_dbg[id]);
@ -831,7 +791,7 @@ QDF_STATUS 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 QDF_STATUS_SUCCESS;
return;
}
EXPORT_SYMBOL(wlan_objmgr_vdev_release_ref);