qcacmn: Fix deadlock due to peer_ref_mutex and scn_lock
Deadlock happens when control path takes scn_lock and calls dp_peer_unref_delete() which in tern tries to acquire peer_ref_mutex. At the same time, if other core starts handling peer_unmap by acquiring peer_ref_mutex and calls dp_reset_and_release_peer_mem() which in turn calls ol_ath_node_free() and tries to acquire scn_lock leading to a deadlock. Fix this by unlocking peer_ref_mutex before calling dp_reset_and_release_peer_mem(). Change-Id: I343a8ef8f0914f9245a06b2818c9cbbe1db5218f CRs-Fixed: 2449878
这个提交包含在:
@@ -5655,7 +5655,9 @@ void dp_peer_unref_delete(void *peer_handle)
|
||||
|
||||
/* cleanup the peer data */
|
||||
dp_peer_cleanup(vdev, peer);
|
||||
qdf_spin_unlock_bh(&soc->peer_ref_mutex);
|
||||
dp_reset_and_release_peer_mem(soc, pdev, peer, vdev);
|
||||
qdf_spin_lock_bh(&soc->peer_ref_mutex);
|
||||
|
||||
/* check whether the parent vdev has no peers left */
|
||||
if (TAILQ_EMPTY(&vdev->peer_list)) {
|
||||
|
在新工单中引用
屏蔽一个用户