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
This commit is contained in:
Dustin Brown 2017-03-15 14:28:48 -07:00 • committed by Sandeep Puligilla
commit dba48c8d9d

View file

@ -141,6 +141,7 @@ int hdd_create_and_store_vdev(struct wlan_objmgr_pdev *pdev,
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 @@ int hdd_create_and_store_vdev(struct wlan_objmgr_pdev *pdev,
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 @@ int hdd_create_and_store_vdev(struct wlan_objmgr_pdev *pdev,
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;
}