qcacld-3.0: Add debug prints to catch session_id/vdev_id desync
When HDD detects that the session id and vdev id have de-synchronized,
print the PSOC reference tree and induce a crash.
Change-Id: I1ca47837cd024fd66e19d86222cfbbd85e3f5704
CRs-Fixed: 2020092
diff --git a/core/hdd/src/wlan_hdd_object_manager.c b/core/hdd/src/wlan_hdd_object_manager.c
index 746fef5..2aa531b 100644
--- a/core/hdd/src/wlan_hdd_object_manager.c
+++ b/core/hdd/src/wlan_hdd_object_manager.c
@@ -141,6 +141,7 @@
struct wlan_objmgr_peer *peer;
struct vdev_osif_priv *osif_priv;
struct wlan_vdev_create_params vdev_params;
+ uint8_t vdev_id;
vdev_params.opmode = adapter->device_mode;
qdf_mem_copy(vdev_params.macaddr, adapter->macAddressCurrent.bytes,
@@ -165,10 +166,14 @@
return -ENOMEM;
}
- if (adapter->sessionId != wlan_vdev_get_id(vdev)) {
- hdd_err("session id and vdev id mismatch");
- wlan_objmgr_vdev_obj_delete(vdev);
- QDF_ASSERT(0);
+ vdev_id = wlan_vdev_get_id(vdev);
+ if (vdev_id != adapter->sessionId) {
+ hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
+ hdd_err("session id (%d) and vdev id (%d) mismatch\n"
+ "likely, a component leaked a vdev reference",
+ adapter->sessionId, vdev_id);
+ wlan_objmgr_print_ref_all_objects_per_psoc(hdd_ctx->hdd_psoc);
+ QDF_BUG(0);
return -EINVAL;
}
@@ -176,7 +181,7 @@
vdev_params.macaddr);
if (!peer) {
hdd_err("obj manager self peer create fails for adapter %d",
- adapter->device_mode);
+ adapter->device_mode);
wlan_objmgr_vdev_obj_delete(vdev);
return -ENOMEM;
}