Browse Source

qcacmn: Assert when regsiterng second handler for objects create/destroy

Assert when there is a second registration for any of the psoc
pdev vdev  & peer create/destroy handlers.

As seen in IR-224607, where there was a second registration
for psoc create handler which failed,
and the first one was already stored in psoc object,
and when psoc was trying to
call the first  handler we see crash.

Change-Id: I7534c7cf2fb9d86329938dcf080362bc719ab582
CRs-Fixed: 2053892
Vivek 7 years ago
parent
commit
9e4783cd41
1 changed files with 16 additions and 0 deletions
  1. 16 0
      umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c

+ 16 - 0
umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c

@@ -102,6 +102,7 @@ QDF_STATUS wlan_objmgr_register_psoc_create_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -128,6 +129,7 @@ QDF_STATUS wlan_objmgr_unregister_psoc_create_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */
@@ -154,6 +156,7 @@ QDF_STATUS wlan_objmgr_register_psoc_destroy_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -180,6 +183,7 @@ QDF_STATUS wlan_objmgr_unregister_psoc_destroy_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */
@@ -257,6 +261,7 @@ QDF_STATUS wlan_objmgr_register_pdev_create_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -283,6 +288,7 @@ QDF_STATUS wlan_objmgr_unregister_pdev_create_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */
@@ -309,6 +315,7 @@ QDF_STATUS wlan_objmgr_register_pdev_destroy_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -335,6 +342,7 @@ QDF_STATUS wlan_objmgr_unregister_pdev_destroy_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */
@@ -412,6 +420,7 @@ QDF_STATUS wlan_objmgr_register_vdev_create_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -437,6 +446,7 @@ QDF_STATUS wlan_objmgr_unregister_vdev_create_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */
@@ -462,6 +472,7 @@ QDF_STATUS wlan_objmgr_register_vdev_destroy_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -487,6 +498,7 @@ QDF_STATUS wlan_objmgr_unregister_vdev_destroy_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */
@@ -563,6 +575,7 @@ QDF_STATUS wlan_objmgr_register_peer_create_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -589,6 +602,7 @@ QDF_STATUS wlan_objmgr_unregister_peer_create_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */
@@ -614,6 +628,7 @@ QDF_STATUS wlan_objmgr_register_peer_destroy_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Store handler and args in Global object table */
@@ -639,6 +654,7 @@ QDF_STATUS wlan_objmgr_unregister_peer_destroy_handler(
 	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);
+		QDF_ASSERT(0);
 		return QDF_STATUS_E_FAILURE;
 	}
 	/* Reset handlers, and args to NULL */