mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 05:29:04 -04:00
qcacmn: Add objmgr check for vdev leaks API
During objmgr psoc teardown, it would be useful to assert that there are no longer any vdevs attached. Add an API that logs a list of all vdevs attached to a given psoc, and panics if any are found. Change-Id: Id618fa396ec1238b1bb7a78dfb6267e2b08470e4 CRs-Fixed: 2255503
This commit is contained in:
parent
76da7996ae
commit
028f560991
2 changed files with 58 additions and 0 deletions
|
|
@ -1436,6 +1436,14 @@ QDF_STATUS wlan_objmgr_print_ref_all_objects_per_psoc(
|
|||
QDF_STATUS wlan_objmgr_psoc_set_user_config(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_psoc_user_config *user_config_data);
|
||||
|
||||
/**
|
||||
* wlan_objmgr_psoc_check_for_vdev_leaks() - Assert no vdevs attached to @psoc
|
||||
* @psoc: The psoc to check
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void wlan_objmgr_psoc_check_for_vdev_leaks(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* wlan_objmgr_psoc_get_dual_mac_disable () - get user config
|
||||
* data for DBS disable
|
||||
|
|
|
|||
|
|
@ -2004,3 +2004,53 @@ QDF_STATUS wlan_objmgr_psoc_set_user_config(struct wlan_objmgr_psoc *psoc,
|
|||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void wlan_objmgr_psoc_check_for_vdev_leaks(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct wlan_objmgr_psoc_objmgr *_psoc;
|
||||
int vdev_id;
|
||||
int ref_id;
|
||||
|
||||
QDF_BUG(psoc);
|
||||
if (!psoc)
|
||||
return;
|
||||
|
||||
wlan_psoc_obj_lock(psoc);
|
||||
_psoc = &psoc->soc_objmgr;
|
||||
if (!_psoc->wlan_vdev_count) {
|
||||
wlan_psoc_obj_unlock(psoc);
|
||||
return;
|
||||
}
|
||||
|
||||
obj_mgr_err("objmgr vdev leaks detected for psoc %u!", _psoc->psoc_id);
|
||||
obj_mgr_err("--------------------------------------------------------");
|
||||
obj_mgr_err("Vdev Id Refs Module");
|
||||
obj_mgr_err("--------------------------------------------------------");
|
||||
|
||||
for (vdev_id = 0; vdev_id < _psoc->max_vdev_count; vdev_id++) {
|
||||
struct wlan_objmgr_vdev *vdev = _psoc->wlan_vdev_list[vdev_id];
|
||||
qdf_atomic_t *ref_id_dbg;
|
||||
|
||||
if (!vdev)
|
||||
continue;
|
||||
|
||||
wlan_vdev_obj_lock(vdev);
|
||||
ref_id_dbg = vdev->vdev_objmgr.ref_id_dbg;
|
||||
for (ref_id = 0; ref_id < WLAN_REF_ID_MAX; ref_id++) {
|
||||
int32_t refs = qdf_atomic_read(&ref_id_dbg[ref_id]);
|
||||
|
||||
if (refs <= 0)
|
||||
continue;
|
||||
|
||||
obj_mgr_err("%7u %4u x %s",
|
||||
vdev_id, refs, string_from_dbgid(ref_id));
|
||||
}
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
}
|
||||
|
||||
wlan_psoc_obj_unlock(psoc);
|
||||
|
||||
QDF_DEBUG_PANIC();
|
||||
}
|
||||
qdf_export_symbol(wlan_objmgr_psoc_check_for_vdev_leaks);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue