qcacld-3.0: Wait HO_FAIL event when roam sync failed

Host received deauth and roam sync back-to-back after WoW, sent vdev
RSO_DISABLE before RSO_STATUS event, F/W assert.
1. Host received deauth event, limSmeState went out of link est state, sent
async event of cm_send_sb_disconnect_req.
2. Host received and handled roam_sync, CM_RSO: vdev0:
[ROAM_RSO_ENABLED(2)] --> [ROAM_SYNCH_IN_PROG(5)], roam sync failed since
not in link est state.
3. Host aborted roaming, ent back to CM-VDEV-0: CONNECTED, removed roaming
cmd from serialization queue.
4. Host sent RSO stop to F/W.
5. Host handled cm_send_sb_disconnect_req, dropped RSO stop during roam
sync, called cm_disconnect_continue_after_rso_stop without waiting for
RSO_STATUS event.
6. Host sent vdev RSO_DISABLE and vdev stop before received RSO_STATUS
event, F/W asserted.

To fix it, if host roam sync failed, need wait for HO_FAIL event and handle
it before handling other cmd, can't remove roaming cmd from assoc vdev
serialization queue to unblock other pending cmd before handling
HO_FAIL, just send assoc link RSO stop to F/W one time with
REASON_ROAM_SYNCH_FAILED, then wait for 2 events: FW_ROAM_EVT RSO status
and HO_FAIL. then handle HO_FAIL, at last remove roaming cmd, unblock other
cmd and trigger disconnect.

Change-Id: I03dd3ed21007ee67613c2d90b5567348c240f375
CRs-Fixed: 3445233
This commit is contained in:
Jianmin Zhu
2023-03-24 23:13:40 +08:00
committed by Madan Koyyalamudi
parent a8b69af9a8
commit 9228383500
4 changed files with 5 additions and 29 deletions

View File

@@ -2661,7 +2661,6 @@ end:
abort_roam:
if (QDF_IS_STATUS_ERROR(status)) {
wmi_err("%d Failed to extract roam sync ind", status);
wlan_cm_fw_roam_abort_req(psoc, synch_event->vdev_id);
wlan_cm_roam_stop_req(psoc, synch_event->vdev_id,
REASON_ROAM_SYNCH_FAILED);
}