mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 07:03:09 -04:00
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
This commit is contained in:
parent
7750a17a55
commit
ea368417b0
9 changed files with 328 additions and 200 deletions
|
|
@ -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);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue