qcacld-3.0: Fix deadlock for race condition

When connect from wpa_supplicant and roam from F/W happens at same
time, supplicant hold cm cm_req_lock and wait rsp from scheduler
thread, sheduler thread is blocked to wait for cm_req_lock.

Change-Id: I6b9010972d29be9a32d3b85ee72891ed62b50801
CRs-Fixed: 3087169
This commit is contained in:
Jianmin Zhu
2021-12-02 16:43:40 +08:00
committed by Madan Koyyalamudi
parent 5f3b829cf5
commit 86a4abbf0f
2 changed files with 8 additions and 1 deletions

View File

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -84,7 +85,6 @@ QDF_STATUS if_mgr_connect_start(struct wlan_objmgr_vdev *vdev,
* this scenario.
*/
if_mgr_disable_roaming(pdev, vdev, RSO_CONNECT_START);
wlan_tdls_teardown_links_sync(psoc);
}
return QDF_STATUS_SUCCESS;

View File

@@ -60,6 +60,13 @@ QDF_STATUS cm_fw_roam_sync_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
return QDF_STATUS_E_NULL_VALUE;
}
if (cm_is_vdev_connecting(vdev) || cm_is_vdev_disconnecting(vdev)) {
mlme_err("vdev %d Roam sync not handled in conneting/disconneting state",
vdev_id);
return cm_roam_stop_req(psoc, vdev_id,
REASON_ROAM_SYNCH_FAILED);
}
status = cm_sm_deliver_event(vdev, WLAN_CM_SM_EV_ROAM_SYNC,
event_data_len, event);