qcacmn: Add objmgr lifecycle logs

Knowing the current and historical state of high level abstractions in
the driver is critical to successful debugging of issues. To assist
these efforts, add info-level logs for the following object manager
psoc/pdev/vdev/peer lifecycle events.

	* create
	* logical destroy
	* physical destroy

Change-Id: Idbb5350e85cb1b452e076a6fece31f83dcc7aafc
CRs-Fixed: 2179681
This commit is contained in:
Dustin Brown 2018-01-26 15:29:04 -08:00 • committed by snandini
commit 7229739ec7
6 changed files with 45 additions and 32 deletions

View file

@ -211,6 +211,7 @@ struct wlan_objmgr_psoc_nif {
/**
* struct wlan_objmgr_psoc_objmgr - psoc object manager sub structure
* @psoc_id: The PSOC's numeric Id
* @wlan_pdev_count: PDEV count
* @wlan_pdev_list[]: PDEV list
* @wlan_pdev_id_map: PDEV id map, to allocate free ids
@ -226,6 +227,7 @@ struct wlan_objmgr_psoc_nif {
* @qdf_dev: QDF Device
*/
struct wlan_objmgr_psoc_objmgr {
uint8_t psoc_id;
uint8_t wlan_pdev_count;
struct wlan_objmgr_pdev *wlan_pdev_list[WLAN_UMAC_MAX_PDEVS];
uint8_t wlan_pdev_id_map;

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
* Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@ -21,18 +21,12 @@
#include "wlan_objmgr_global_obj_i.h"
#include <wlan_objmgr_global_obj.h>
#include "wlan_objmgr_psoc_obj.h"
#include "qdf_mem.h"
/* Global object, it is declared globally */
struct wlan_objmgr_global *g_umac_glb_obj;
/* Component Name table */
const char *wlan_umac_Component_name[] = {
"MLME",
"SCAN_MGR",
"SCAN_CACHE",
"MGMT_TXRX",
"",
};
/*
** APIs to Create/Delete Global object APIs
*/
@ -715,7 +709,6 @@ QDF_STATUS wlan_objmgr_unregister_peer_status_handler(
return QDF_STATUS_SUCCESS;
}
QDF_STATUS wlan_objmgr_psoc_object_attach(struct wlan_objmgr_psoc *psoc)
{
uint8_t index = 0;
@ -727,6 +720,7 @@ QDF_STATUS wlan_objmgr_psoc_object_attach(struct wlan_objmgr_psoc *psoc)
if (g_umac_glb_obj->psoc[index] == NULL) {
/* Found free slot, store psoc */
g_umac_glb_obj->psoc[index] = psoc;
psoc->soc_objmgr.psoc_id = index;
status = QDF_STATUS_SUCCESS;
break;
}
@ -738,21 +732,18 @@ QDF_STATUS wlan_objmgr_psoc_object_attach(struct wlan_objmgr_psoc *psoc)
QDF_STATUS wlan_objmgr_psoc_object_detach(struct wlan_objmgr_psoc *psoc)
{
uint8_t index = 0;
QDF_STATUS status = QDF_STATUS_E_FAILURE;
uint8_t psoc_id;
psoc_id = psoc->soc_objmgr.psoc_id;
QDF_BUG(psoc_id < WLAN_OBJMGR_MAX_DEVICES);
if (psoc_id >= WLAN_OBJMGR_MAX_DEVICES)
return QDF_STATUS_E_INVAL;
qdf_spin_lock_bh(&g_umac_glb_obj->global_lock);
while (index < WLAN_OBJMGR_MAX_DEVICES) {
if (g_umac_glb_obj->psoc[index] == psoc) {
/* found psoc, store NULL */
g_umac_glb_obj->psoc[index] = NULL;
status = QDF_STATUS_SUCCESS;
break;
}
index++;
}
g_umac_glb_obj->psoc[psoc_id] = NULL;
qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock);
return status;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS wlan_objmgr_global_obj_can_destroyed(void)

View file

@ -169,6 +169,9 @@ struct wlan_objmgr_pdev *wlan_objmgr_pdev_obj_create(
wlan_objmgr_pdev_obj_delete(pdev);
return NULL;
}
obj_mgr_info("Created pdev %d", pdev->pdev_objmgr.wlan_pdev_id);
return pdev;
}
EXPORT_SYMBOL(wlan_objmgr_pdev_obj_create);
@ -188,6 +191,8 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev)
pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
obj_mgr_info("Physically deleting pdev %d", pdev_id);
if (pdev->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) {
obj_mgr_err("pdev object delete is not invoked: pdev-id:%d",
pdev_id);
@ -233,11 +238,12 @@ QDF_STATUS wlan_objmgr_pdev_obj_delete(struct wlan_objmgr_pdev *pdev)
return QDF_STATUS_E_FAILURE;
}
obj_mgr_info("Logically deleting pdev %d",
pdev->pdev_objmgr.wlan_pdev_id);
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)",
pdev->pdev_objmgr.wlan_pdev_id);
wlan_objmgr_print_ref_ids(pdev->pdev_objmgr.ref_id_dbg);
}

View file

@ -245,6 +245,10 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create(
wlan_objmgr_peer_obj_delete(peer);
return NULL;
}
obj_mgr_debug("Created peer " QDF_MAC_ADDR_STR,
QDF_MAC_ADDR_ARRAY(macaddr));
return peer;
}
@ -263,6 +267,9 @@ static QDF_STATUS wlan_objmgr_peer_obj_destroy(struct wlan_objmgr_peer *peer)
macaddr = wlan_peer_get_macaddr(peer);
obj_mgr_debug("Physically deleting peer " QDF_MAC_ADDR_STR,
QDF_MAC_ADDR_ARRAY(macaddr));
if (peer->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) {
obj_mgr_err(
"peer(%02x:%02x:%02x:%02x:%02x:%02x) object del is not invoked",
@ -311,14 +318,12 @@ QDF_STATUS wlan_objmgr_peer_obj_delete(struct wlan_objmgr_peer *peer)
macaddr = wlan_peer_get_macaddr(peer);
wlan_peer_obj_unlock(peer);
obj_mgr_debug("Logically deleting peer " QDF_MAC_ADDR_STR,
QDF_MAC_ADDR_ARRAY(macaddr));
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]);
wlan_objmgr_print_ref_ids(peer->peer_objmgr.ref_id_dbg);
}

View file

@ -182,6 +182,8 @@ struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version,
return NULL;
}
obj_mgr_info("Created psoc %d", psoc->soc_objmgr.psoc_id);
return psoc;
}
EXPORT_SYMBOL(wlan_objmgr_psoc_obj_create);
@ -198,6 +200,8 @@ static QDF_STATUS wlan_objmgr_psoc_obj_destroy(struct wlan_objmgr_psoc *psoc)
return QDF_STATUS_E_FAILURE;
}
obj_mgr_info("Physically deleting psoc %d", psoc->soc_objmgr.psoc_id);
if (psoc->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) {
obj_mgr_err("psoc object delete is not invoked");
WLAN_OBJMGR_BUG(0);
@ -244,11 +248,11 @@ QDF_STATUS wlan_objmgr_psoc_obj_delete(struct wlan_objmgr_psoc *psoc)
return QDF_STATUS_E_FAILURE;
}
print_idx = qdf_get_pidx();
obj_mgr_info("Logically deleting psoc %d", psoc->soc_objmgr.psoc_id);
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 psoc");
wlan_objmgr_print_ref_ids(psoc->soc_objmgr.ref_id_dbg);
}

View file

@ -227,6 +227,9 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
vdev->vdev_objmgr.vdev_id);
return NULL;
}
obj_mgr_info("Created vdev %d", vdev->vdev_objmgr.vdev_id);
return vdev;
}
EXPORT_SYMBOL(wlan_objmgr_vdev_obj_create);
@ -246,6 +249,8 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev)
vdev_id = wlan_vdev_get_id(vdev);
obj_mgr_info("Physically deleting vdev %d", vdev_id);
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));
@ -292,11 +297,11 @@ QDF_STATUS wlan_objmgr_vdev_obj_delete(struct wlan_objmgr_vdev *vdev)
return QDF_STATUS_E_FAILURE;
}
obj_mgr_info("Logically deleting vdev %d", vdev->vdev_objmgr.vdev_id);
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);
wlan_objmgr_print_ref_ids(vdev->vdev_objmgr.ref_id_dbg);
}