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
parent 071e0d2559
commit 6d7dd83436
3 changed files with 41 additions and 0 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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;
}