Эх сурвалжийг харах

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
Vinod Kumar Pirla 1 жил өмнө
parent
commit
f3d3f64f12

+ 8 - 7
os_if/linux/mlme/src/osif_cm_connect_rsp.c

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

+ 8 - 11
os_if/linux/mlme/src/osif_cm_roam_rsp.c

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