qcacld-3.0: Avoid MLO RSO start before link vdev up

For mlo initial connect, vdev0 connected first, when received assoc rsp,
then up vdev0 at last trigger vdev1 connect, set wlan_connected_links
bitmap for vdev1.

For owe 1x roaming, vdev1 link is set up on host side, when handle roam
sync, we need stop RSO first to finish EAPOL, then trigger vdev1 connect,
set wlan_connected_links bitmap for vdev1.

Above design has race condition issue:
vdev0 becomes up (T1) before set wlan_connected_links bitmap for vdev1
(T2), if enable RSO for vdev0 happens between T1 and T2 for some reason
like vdev2 connect/disconnect, mlo_check_if_all_vdev_up return true, so
mlo vdev0 RSO is enabled in F/W before vdev1 up, which is unexpected.

Fix proposal for both initial connect and roaming:
For mlo initial connect, vdev0 connected first, when received assoc rsp,
we know whether other links need set up, can set wlan_connected_links
bitmap at that time, then up vdev0, at last trigger vdev1 connect.

For owe 1x roaming, vdev1 link is set up on host side, when handle roam
sync, we need stop RSO first to finish EAPOL, then set
wlan_connected_links bitmap for vdev1, at last trigger vdev1 connect.

Change-Id: I9abe48dbf7781be80ab5ec99ec42e6324a676283
CRs-Fixed: 3576584
此提交包含在:
Jianmin Zhu
2023-08-03 15:47:09 +08:00
提交者 Rahul Choudhary
父節點 334ee752ef
當前提交 af2244d20a
共有 2 個檔案被更改,包括 25 行新增0 行删除

查看文件

@@ -1034,6 +1034,9 @@ cm_fw_roam_sync_propagation(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
CM_PREFIX_REF(vdev_id, cm_id));
goto error;
}
if (!wlan_vdev_mlme_is_mlo_link_vdev(vdev))
mlo_roam_update_connected_links(vdev, connect_rsp);
mlme_cm_osif_connect_complete(vdev, connect_rsp);
mlme_cm_osif_roam_complete(vdev);