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) 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 * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * 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. * this scenario.
*/ */
if_mgr_disable_roaming(pdev, vdev, RSO_CONNECT_START); if_mgr_disable_roaming(pdev, vdev, RSO_CONNECT_START);
wlan_tdls_teardown_links_sync(psoc);
} }
return QDF_STATUS_SUCCESS; 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; 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, status = cm_sm_deliver_event(vdev, WLAN_CM_SM_EV_ROAM_SYNC,
event_data_len, event); event_data_len, event);