Răsfoiți Sursa

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
Dustin Brown 7 ani în urmă
părinte
comite
7229739ec7

+ 2 - 0
umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h

@@ -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;

+ 13 - 22
umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c

@@ -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)

+ 8 - 2
umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c

@@ -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);
 	}
 

+ 9 - 4
umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c

@@ -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);
 	}
 

+ 6 - 2
umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c

@@ -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);
 	}
 

+ 7 - 2
umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c

@@ -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);
 	}