qcacmn: Always update OSIF/HDD connect info

Driver tries to fetch BSS info from kernel to update
connect results and at the same time updates HDD/OSIF
of the current link's BSSID and link ID.
OSIF/HDD will not be updated, if BSS info is not found
in kernel. This will leave MLO manager and OSIF/HDD to
go out-of-sync.

This can later lead to link switch failure as HDD is
not having all link's information.

To keep MLO manager and OSIF/HDD in sync, always update
OSIF/HDD even if BSS info fetch from kernel fails.

Change-Id: Ie2e67317256cc2d9edaa7663d3902b63a45cbaaa
CRs-Fixed: 3729709
This commit is contained in:
Vinod Kumar Pirla
2024-02-19 01:39:09 -08:00
committed by Ravindra Konda
parent f4dda761c5
commit f3d3f64f12
2 changed files with 16 additions and 18 deletions

View File

@@ -491,11 +491,14 @@ void osif_populate_connect_response_for_link(struct wlan_objmgr_vdev *vdev,
uint8_t *link_addr,
struct cfg80211_bss *bss)
{
osif_debug("Link_id :%d", link_id);
conn_rsp_params->valid_links |= BIT(link_id);
conn_rsp_params->links[link_id].bssid = bss->bssid;
conn_rsp_params->links[link_id].bss = bss;
conn_rsp_params->links[link_id].addr = link_addr;
if (bss) {
osif_debug("Link_id :%d", link_id);
conn_rsp_params->valid_links |= BIT(link_id);
conn_rsp_params->links[link_id].bssid = bss->bssid;
conn_rsp_params->links[link_id].bss = bss;
conn_rsp_params->links[link_id].addr = link_addr;
}
mlo_mgr_osif_update_connect_info(vdev, link_id);
}
@@ -546,8 +549,6 @@ osif_populate_partner_links_mlo_params(struct wlan_objmgr_vdev *vdev,
bss = osif_get_chan_bss_from_kernel(vdev, rsp_partner_info,
rsp);
if (!bss)
continue;
osif_populate_connect_response_for_link(vdev, conn_rsp_params,
link_id,

View File

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-2015,2020-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -79,11 +79,13 @@ osif_roam_populate_mlo_info_for_link(struct wlan_objmgr_vdev *roamed_vdev,
uint8_t link_id, struct cfg80211_bss *bss,
uint8_t *self_link_addr)
{
osif_debug("Link_id :%d", link_id);
roam_info->valid_links |= BIT(link_id);
roam_info->links[link_id].bssid = bss->bssid;
roam_info->links[link_id].bss = bss;
roam_info->links[link_id].addr = self_link_addr;
if (bss) {
osif_debug("Link_id :%d", link_id);
roam_info->valid_links |= BIT(link_id);
roam_info->links[link_id].bssid = bss->bssid;
roam_info->links[link_id].bss = bss;
roam_info->links[link_id].addr = self_link_addr;
}
mlo_mgr_osif_update_connect_info(roamed_vdev, link_id);
}
@@ -131,11 +133,6 @@ osif_populate_partner_links_roam_mlo_params(struct wlan_objmgr_vdev *roamed_vdev
bss = osif_get_chan_bss_from_kernel(roamed_vdev,
rsp_partner_info, rsp);
if (!bss) {
osif_debug("kernel bss not found for link_id:%d",
link_id);
continue;
}
osif_roam_populate_mlo_info_for_link(roamed_vdev,
roam_info_params,