浏览代码

qcacmn: Modify the minidump_remove function

The wlan_minidump_remove function utilizes the updated kernel API.
So, modify the function definition and parameters accordingly.

Change-Id: Ib62a46688400d5d9c2ff45c17dc41d5f0b7f58d0
CRs-Fixed: 2860432
Aditya Kodukula 4 年之前
父节点
当前提交
1c6fef8450

+ 4 - 3
umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2021 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
@@ -206,6 +206,9 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev)
 		WLAN_OBJMGR_BUG(0);
 	}
 
+	wlan_minidump_remove(pdev, sizeof(*pdev), wlan_pdev_get_psoc(pdev),
+			     WLAN_MD_OBJMGR_PDEV, "wlan_objmgr_pdev");
+
 	/* Invoke registered destroy handlers */
 	for (id = 0; id < WLAN_UMAC_MAX_COMPONENTS; id++) {
 		handler = g_umac_glb_obj->pdev_destroy_handler[id];
@@ -233,8 +236,6 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev)
 		pdev->obj_state = WLAN_OBJ_STATE_PARTIALLY_DELETED;
 		return QDF_STATUS_COMP_ASYNC;
 	}
-
-	wlan_minidump_remove(pdev);
 	/* Free PDEV object */
 	return wlan_objmgr_pdev_obj_free(pdev);
 }

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

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2021 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
@@ -104,7 +104,6 @@ static QDF_STATUS wlan_objmgr_psoc_obj_free(struct wlan_objmgr_psoc *psoc)
 	wlan_objmgr_psoc_peer_list_deinit(&psoc->soc_objmgr.peer_list);
 
 	qdf_spinlock_destroy(&psoc->psoc_lock);
-	wlan_minidump_remove(psoc);
 	qdf_mem_free(psoc);
 
 	return QDF_STATUS_SUCCESS;
@@ -215,6 +214,9 @@ static QDF_STATUS wlan_objmgr_psoc_obj_destroy(struct wlan_objmgr_psoc *psoc)
 		WLAN_OBJMGR_BUG(0);
 	}
 
+	wlan_minidump_remove(psoc, sizeof(*psoc), psoc,
+			     WLAN_MD_OBJMGR_PSOC, "wlan_objmgr_psoc");
+
 	/* Invoke registered create handlers */
 	for (id = 0; id < WLAN_UMAC_MAX_COMPONENTS; id++) {
 		handler = g_umac_glb_obj->psoc_destroy_handler[id];

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

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2021 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 above
@@ -113,7 +113,6 @@ static QDF_STATUS wlan_objmgr_vdev_obj_free(struct wlan_objmgr_vdev *vdev)
 
 	qdf_mem_free(vdev->vdev_mlme.bss_chan);
 	qdf_mem_free(vdev->vdev_mlme.des_chan);
-	wlan_minidump_remove(vdev);
 	qdf_mem_free(vdev);
 
 	return QDF_STATUS_SUCCESS;
@@ -308,6 +307,9 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev)
 		WLAN_OBJMGR_BUG(0);
 	}
 
+	wlan_minidump_remove(vdev, sizeof(*vdev), wlan_vdev_get_psoc(vdev),
+			     WLAN_MD_OBJMGR_VDEV, "wlan_objmgr_vdev");
+
 	/* Invoke registered destroy handlers */
 	for (id = 0; id < WLAN_UMAC_MAX_COMPONENTS; id++) {
 		handler = g_umac_glb_obj->vdev_destroy_handler[id];

+ 22 - 3
umac/cmn_services/utils/inc/wlan_utility.h

@@ -449,11 +449,30 @@ enum wlan_minidump_host_data {
 	WLAN_MD_MAX
 };
 
-void wlan_minidump_log(void *start_addr, size_t size,
-		       void *psoc,
+/**
+ * wlan_minidump_log() - Log memory address to be included in minidump
+ * @start_addr: Start address of the memory to be dumped
+ * @size: Size in bytes
+ * @psoc_obj: Psoc Object
+ * @type: Type of data structure
+ * @name: String to identify this entry
+ */
+void wlan_minidump_log(void *start_addr, const size_t size,
+		       void *psoc_obj,
 		       enum wlan_minidump_host_data type,
 		       const char *name);
 
-void wlan_minidump_remove(void *addr);
+/**
+ * wlan_minidump_remove() - Remove memory address from  minidump
+ * @start_addr: Start address of the memory previously added
+ * @size: Size in bytes
+ * @psoc_obj: Psoc Object
+ * @type: Type of data structure
+ * @name: String to identify this entry
+ */
+void wlan_minidump_remove(void *start_addr, const size_t size,
+			  void *psoc_obj,
+			  enum wlan_minidump_host_data type,
+			  const char *name);
 
 #endif /* _WLAN_UTILITY_H_ */

+ 58 - 42
umac/cmn_services/utils/src/wlan_utility.c

@@ -678,50 +678,39 @@ uint16_t wlan_util_get_peer_count_for_mode(struct wlan_objmgr_pdev *pdev,
 }
 
 #ifdef CONFIG_QCA_MINIDUMP
-void wlan_minidump_log(void *start_addr, size_t size,
-		       void *psoc_obj,
-		       enum wlan_minidump_host_data type,
-		       const char *name)
+static bool wlan_minidump_log_enabled(struct wlan_objmgr_psoc *psoc,
+				      enum wlan_minidump_host_data type)
 {
-	int setval = 0;
-
-	struct wlan_objmgr_psoc *psoc;
-
-	if (!psoc_obj) {
-		qdf_debug("Minidump: Psoc is NULL");
-		return;
-	}
-
-	psoc = (struct wlan_objmgr_psoc *)psoc_obj;
+	bool setval = false;
 
 	switch (type) {
 	case WLAN_MD_CP_EXT_PDEV:
 		if (cfg_get(psoc, CFG_OL_MD_CP_EXT_PDEV))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_CP_EXT_PSOC:
 		if (cfg_get(psoc, CFG_OL_MD_CP_EXT_PSOC))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_CP_EXT_VDEV:
 		if (cfg_get(psoc, CFG_OL_MD_CP_EXT_VDEV))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_CP_EXT_PEER:
 		if (cfg_get(psoc, CFG_OL_MD_CP_EXT_PEER))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_DP_SOC:
 		if (cfg_get(psoc, CFG_OL_MD_DP_SOC))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_DP_PDEV:
 		if (cfg_get(psoc, CFG_OL_MD_DP_PDEV))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_DP_PEER:
 		if (cfg_get(psoc, CFG_OL_MD_DP_PEER))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_DP_SRNG_REO_DEST:
 	case WLAN_MD_DP_SRNG_REO_EXCEPTION:
@@ -730,23 +719,23 @@ void wlan_minidump_log(void *start_addr, size_t size,
 	case WLAN_MD_DP_SRNG_REO_CMD:
 	case WLAN_MD_DP_SRNG_REO_STATUS:
 		if (cfg_get(psoc, CFG_OL_MD_DP_SRNG_REO))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_DP_SRNG_TCL_DATA:
 	case WLAN_MD_DP_SRNG_TCL_CMD:
 	case WLAN_MD_DP_SRNG_TCL_STATUS:
 	case WLAN_MD_DP_SRNG_TX_COMP:
 		if (cfg_get(psoc, CFG_OL_MD_DP_SRNG_TCL))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_DP_SRNG_WBM_DESC_REL:
 	case WLAN_MD_DP_SRNG_WBM_IDLE_LINK:
 		if (cfg_get(psoc, CFG_OL_MD_DP_SRNG_WBM))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_DP_LINK_DESC_BANK:
 		if (cfg_get(psoc, CFG_OL_MD_DP_LINK_DESC_BANK))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_DP_SRNG_RXDMA_MON_BUF:
 	case WLAN_MD_DP_SRNG_RXDMA_MON_DST:
@@ -754,48 +743,75 @@ void wlan_minidump_log(void *start_addr, size_t size,
 	case WLAN_MD_DP_SRNG_RXDMA_ERR_DST:
 	case WLAN_MD_DP_SRNG_RXDMA_MON_STATUS:
 		if (cfg_get(psoc, CFG_OL_MD_DP_SRNG_RXDMA))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_DP_HAL_SOC:
 		if (cfg_get(psoc, CFG_OL_MD_DP_HAL_SOC))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_OBJMGR_PSOC:
 	case WLAN_MD_OBJMGR_PSOC_TGT_INFO:
 		if (cfg_get(psoc, CFG_OL_MD_OBJMGR_PSOC))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_OBJMGR_PDEV:
 	case WLAN_MD_OBJMGR_PDEV_MLME:
 		if (cfg_get(psoc, CFG_OL_MD_OBJMGR_PDEV))
-			setval = 1;
+			setval = true;
 		break;
 	case WLAN_MD_OBJMGR_VDEV_MLME:
 	case WLAN_MD_OBJMGR_VDEV_SM:
 	case WLAN_MD_OBJMGR_VDEV:
 		if (cfg_get(psoc, CFG_OL_MD_OBJMGR_VDEV))
-			setval = 1;
+			setval = true;
 		break;
 	default:
 		qdf_debug("Minidump: Type not implemented");
 	}
-	if (setval)
-		qdf_minidump_log(start_addr, size, name);
-}
-qdf_export_symbol(wlan_minidump_log);
 
-void wlan_minidump_remove(void *addr)
+	return setval;
+}
+#else /* CONFIG_QCA_MINIDUMP */
+static bool wlan_minidump_log_enabled(struct wlan_objmgr_psoc *psoc,
+				      enum wlan_minidump_host_data type)
 {
-	qdf_minidump_remove(addr);
+	return false;
 }
-qdf_export_symbol(wlan_minidump_remove);
-#else
-void wlan_minidump_log(void *start_addr, size_t size,
+#endif
+void wlan_minidump_log(void *start_addr, const size_t size,
 		       void *psoc_obj,
 		       enum wlan_minidump_host_data type,
-		       const char *name) {}
+		       const char *name)
+{
+	struct wlan_objmgr_psoc *psoc;
+
+	if (!psoc_obj) {
+		qdf_debug("Minidump: Psoc is NULL");
+		return;
+	}
+
+	psoc = (struct wlan_objmgr_psoc *)psoc_obj;
+
+	if (psoc && wlan_minidump_log_enabled(psoc, type))
+		qdf_minidump_log(start_addr, size, name);
+}
 qdf_export_symbol(wlan_minidump_log);
 
-void wlan_minidump_remove(void *addr) {}
+void wlan_minidump_remove(void *start_addr, const size_t size,
+			  void *psoc_obj,
+			  enum wlan_minidump_host_data type,
+			  const char *name)
+{
+	struct wlan_objmgr_psoc *psoc;
+
+	if (!psoc_obj) {
+		qdf_debug("Minidump: Psoc is NULL");
+		return;
+	}
+
+	psoc = (struct wlan_objmgr_psoc *)psoc_obj;
+
+	if (psoc && wlan_minidump_log_enabled(psoc, type))
+		qdf_minidump_remove(start_addr, size, name);
+}
 qdf_export_symbol(wlan_minidump_remove);
-#endif /* CONFIG_QCA_MINIDUMP */

+ 10 - 5
umac/mlme/mlme_objmgr/dispatcher/src/wlan_pdev_mlme_main.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019-2021 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 above
@@ -64,7 +64,9 @@ static QDF_STATUS mlme_pdev_obj_create_handler(struct wlan_objmgr_pdev *pdev,
 	return QDF_STATUS_SUCCESS;
 
 init_failed:
-	wlan_minidump_remove(pdev_mlme);
+	wlan_minidump_remove(pdev_mlme, sizeof(*pdev_mlme), psoc,
+			     WLAN_MD_OBJMGR_PDEV_MLME, "pdev_mlme");
+
 	qdf_mem_free(pdev_mlme);
 
 	return QDF_STATUS_E_FAILURE;
@@ -81,11 +83,14 @@ static QDF_STATUS mlme_pdev_obj_destroy_handler(struct wlan_objmgr_pdev *pdev,
 		return QDF_STATUS_SUCCESS;
 	}
 
-	mlme_pdev_ops_ext_hdl_destroy(pdev_mlme);
-
 	wlan_objmgr_pdev_component_obj_detach(pdev, WLAN_UMAC_COMP_MLME,
 					      (void *)pdev_mlme);
-	wlan_minidump_remove(pdev_mlme);
+	mlme_pdev_ops_ext_hdl_destroy(pdev_mlme);
+
+	wlan_minidump_remove(pdev_mlme, sizeof(*pdev_mlme),
+			     wlan_pdev_get_psoc(pdev),
+			     WLAN_MD_OBJMGR_PDEV_MLME, "pdev_mlme");
+
 	qdf_mem_free(pdev_mlme);
 
 	return QDF_STATUS_SUCCESS;

+ 13 - 6
umac/mlme/mlme_objmgr/dispatcher/src/wlan_vdev_mlme_main.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2021 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 above
@@ -137,7 +137,9 @@ ext_hdl_create_failed:
 cm_sm_create_failed:
 	mlme_vdev_sm_destroy(vdev_mlme);
 init_failed:
-	wlan_minidump_remove(vdev_mlme);
+	wlan_minidump_remove(vdev_mlme, sizeof(*vdev_mlme), psoc,
+			     WLAN_MD_OBJMGR_VDEV_MLME, "vdev_mlme");
+
 	qdf_mem_free(vdev_mlme);
 	return QDF_STATUS_E_FAILURE;
 }
@@ -158,14 +160,19 @@ static QDF_STATUS mlme_vdev_obj_destroy_handler(struct wlan_objmgr_vdev *vdev,
 		return QDF_STATUS_SUCCESS;
 	}
 
+	wlan_objmgr_vdev_component_obj_detach(vdev, WLAN_UMAC_COMP_MLME,
+					      vdev_mlme);
+
+	mlme_vdev_ops_ext_hdl_destroy(vdev_mlme);
+
 	wlan_cm_deinit(vdev_mlme);
+
 	mlme_vdev_sm_destroy(vdev_mlme);
 
-	mlme_vdev_ops_ext_hdl_destroy(vdev_mlme);
+	wlan_minidump_remove(vdev_mlme, sizeof(*vdev_mlme),
+			     wlan_vdev_get_psoc(vdev),
+			     WLAN_MD_OBJMGR_VDEV_MLME, "vdev_mlme");
 
-	wlan_objmgr_vdev_component_obj_detach(vdev, WLAN_UMAC_COMP_MLME,
-					      vdev_mlme);
-	wlan_minidump_remove(vdev_mlme);
 	qdf_mem_free(vdev_mlme);
 
 	return QDF_STATUS_SUCCESS;

+ 7 - 1
umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.c

@@ -1950,11 +1950,17 @@ QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme)
 
 QDF_STATUS mlme_vdev_sm_destroy(struct vdev_mlme_obj *vdev_mlme)
 {
+	struct wlan_objmgr_vdev *vdev = vdev_mlme->vdev;
+
 	mlme_vdev_cmd_mutex_destroy(vdev_mlme);
 
 	mlme_vdev_sm_spinlock_destroy(vdev_mlme);
 
-	wlan_minidump_remove(vdev_mlme->sm_hdl);
+	wlan_minidump_remove(vdev_mlme->sm_hdl,
+			     sizeof(*vdev_mlme->sm_hdl),
+			     wlan_vdev_get_psoc(vdev),
+			     WLAN_MD_OBJMGR_VDEV_SM, "wlan_sm");
+
 	wlan_sm_delete(vdev_mlme->sm_hdl);
 
 	return QDF_STATUS_SUCCESS;