qcacld-3.0: Avoid tacking CM lock after holding sme global lock
When STA receives a connect req (C1) and it requires hw mode change. Now the hw mode change resp will take the SME global lock and call connection manager API, which will try to acquire CM lock. But if before that one more connect req (C2) is received in another thread which has acquired CM lock before C1 can acquire it, and this connect req C2 will also flush the C1 from CM queue. Now if C2 also require hw mode change, which also require to acquire SME global lock. So both connect will wait for each other to complete, leading to deadlock. To fix this, from hw mode change response, break the context (by posting to scheduler thread) so that sme global lock is released and C2 is processed. As C1 is already flushed by C2, on scheduler thread execution once it get CM lock it will be dropped silently, and C2 will proceed with connect. Change-Id: I14efb0f21442edcae90a4abea20cb0b9e06a0758 CRs-Fixed: 3223786
This commit is contained in:

committed by
Madan Koyyalamudi

parent
f261a89b11
commit
1d58140b54
@@ -3775,4 +3775,9 @@ void wlan_mlme_get_safe_mode_enable(struct wlan_objmgr_psoc *psoc,
|
||||
* Return: 6g_power_type
|
||||
*/
|
||||
uint32_t wlan_mlme_get_6g_ap_power_type(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
QDF_STATUS wlan_connect_hw_mode_change_resp(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
wlan_cm_id cm_id,
|
||||
QDF_STATUS status);
|
||||
#endif /* _WLAN_MLME_API_H_ */
|
||||
|
Reference in New Issue
Block a user