qcacld-3.0: Abort roaming on link as well for MLO

Currently, roaming is not aborted in failure cases on
the link vdev and it's aborted only on primary vdev.
It results in link vdev not being cleaned up when roaming
fails due to some reason.

Change-Id: I0eb4b1da06a295935ff95be38228a5cacf127a73
CRs-Fixed: 3096648
This commit is contained in:
Srinivas Dasari
2022-01-07 09:43:25 +05:30
committed by Madan Koyyalamudi
父節點 071e0d2559
當前提交 6d7dd83436
共有 3 個文件被更改,包括 41 次插入0 次删除

查看文件

@@ -529,6 +529,7 @@ QDF_STATUS cm_roam_sync_event_handler_cb(struct wlan_objmgr_vdev *vdev,
err:
if (QDF_IS_STATUS_ERROR(status)) {
wlan_mlo_roam_abort_on_link(psoc, sync_ind);
cm_fw_roam_abort_req(psoc, sync_ind->roamed_vdev_id);
cm_roam_stop_req(psoc, sync_ind->roamed_vdev_id,
REASON_ROAM_SYNCH_FAILED);

查看文件

@@ -173,6 +173,21 @@ void mlo_cm_roam_sync_cb(struct wlan_objmgr_vdev *vdev,
void *event, uint32_t event_data_len);
#endif /* WLAN_FEATURE_11BE_MLO_ADV_FEATURE */
/**
* wlan_mlo_roam_abort_on_link - Abort roam on link
*
* @psoc: psoc pointer
* @sync_ind: Roam sync indication
*
* Abort roaming on all the links except the primary. Roam abort on primary
* link would be taken care in legacy path.
*
* Return: QDF_STATUS
*/
QDF_STATUS
wlan_mlo_roam_abort_on_link(struct wlan_objmgr_psoc *psoc,
struct roam_offload_synch_ind *sync_ind);
#else /* WLAN_FEATURE_11BE_MLO */
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
static inline
@@ -232,5 +247,12 @@ static inline void
mlo_roam_update_connected_links(struct wlan_objmgr_vdev *vdev,
struct wlan_cm_connect_resp *connect_rsp)
{}
static inline QDF_STATUS
wlan_mlo_roam_abort_on_link(struct wlan_objmgr_psoc *psoc,
struct roam_offload_synch_ind *sync_ind)
{
return QDF_STATUS_E_NOSUPPORT;
}
#endif /* WLAN_FEATURE_11BE_MLO */
#endif

查看文件

@@ -369,3 +369,21 @@ mlo_roam_update_connected_links(struct wlan_objmgr_vdev *vdev,
connect_rsp->ml_parnter_info);
}
QDF_STATUS
wlan_mlo_roam_abort_on_link(struct wlan_objmgr_psoc *psoc,
struct roam_offload_synch_ind *sync_ind)
{
uint8_t i;
QDF_STATUS status;
for (i = 0; i < sync_ind->num_setup_links; i++)
if (sync_ind->ml_link[i].vdev_id != sync_ind->roamed_vdev_id) {
status = cm_fw_roam_abort_req(psoc,
sync_ind->roamed_vdev_id);
if (QDF_IS_STATUS_ERROR(status))
mlme_err("LFR3: Fail to abort roam on vdev: %u",
sync_ind->ml_link[i].vdev_id);
}
return QDF_STATUS_SUCCESS;
}