qcacmn: Fix possible spinlock vdev->peer_list_lock recursion
It is possible to hit spinlock vdev->peer_list_lock recursion if running SSR case, the call stack is as following: dp_vdev_flush_peers dp_vdev_iterate_peer qdf_spin_lock_bh(&vdev->peer_list_lock); -> first time lock dp_peer_delete dp_peer_delete_wifi3 dp_peer_vdev_list_remove qdf_spin_lock_bh(&vdev->peer_list_lock) -> lock again in same thread. Replace it with dp_vdev_iterate_peer_lock_safe. Change-Id: I40fe492d43b376b404b855a7e86aa2cd66ba1d22 CRs-Fixed: 2926284
This commit is contained in:

committed by
Madan Koyyalamudi

parent
034e1c4507
commit
aab2fe978c
@@ -6147,8 +6147,8 @@ static void dp_vdev_flush_peers(struct cdp_vdev *vdev_handle, bool unmap_only)
|
||||
|
||||
|
||||
if (!unmap_only)
|
||||
dp_vdev_iterate_peer(vdev, dp_peer_delete, NULL,
|
||||
DP_MOD_ID_CDP);
|
||||
dp_vdev_iterate_peer_lock_safe(vdev, dp_peer_delete, NULL,
|
||||
DP_MOD_ID_CDP);
|
||||
|
||||
for (i = 0; i < soc->max_peers ; i++) {
|
||||
peer = __dp_peer_get_ref_by_id(soc, i, DP_MOD_ID_CDP);
|
||||
|
Reference in New Issue
Block a user