Selaa lähdekoodia

qcacmn: Fix logical_link_index for STA vaps

There was a case in which the logical_link_index for link vdev and
partner vdev was matching which was causing an issue.

The reason for duplicate logical link was because the mlo_link_connect
was not sent in same order in which partner link vdevs are added.

Send mlo_send_link_connect in order in which partner links are added.
This will ensure generation of logical link indices for link vdev
and partner vdevs correctly.

Change-Id: I4053fad7a7b615bca9b6386bf142ea785bca5ccf
CRs-Fixed: 3427985
Uraj Sasan 2 vuotta sitten
vanhempi
sitoutus
f5553f82ef
1 muutettua tiedostoa jossa 13 lisäystä ja 12 poistoa
  1. 13 12
      umac/mlo_mgr/src/wlan_mlo_mgr_sta.c

+ 13 - 12
umac/mlo_mgr/src/wlan_mlo_mgr_sta.c

@@ -897,23 +897,24 @@ mlo_send_link_connect(struct wlan_objmgr_vdev *vdev,
 	}
 
 	mlo_dev_lock_acquire(mlo_dev_ctx);
-	if (wlan_cm_is_vdev_connected(vdev)) {
+	if (!wlan_cm_is_vdev_connected(vdev)) {
+		mlo_dev_lock_release(mlo_dev_ctx);
+		return;
+	}
+
+	for (j = 0; j < ml_parnter_info->num_partner_links; j++) {
 		for (i =  0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
 			if (!mlo_dev_ctx->wlan_vdev_list[i])
 				continue;
 			/*
-			 * mlo_connect: update wlan_connected_links bitmap from
-			 * assoc resp parsing
-			 */
+			* mlo_connect: update wlan_connected_links bitmap from
+			* assoc resp parsing
+			*/
 			if (qdf_test_bit(i, mlo_dev_ctx->sta_ctx->wlan_connected_links)) {
 				if (wlan_cm_is_vdev_disconnected(
 					mlo_dev_ctx->wlan_vdev_list[i])) {
-					for (j = 0; j < ml_parnter_info->num_partner_links; j++) {
-						if (mlo_dev_ctx->wlan_vdev_list[i]->vdev_mlme.mlo_link_id ==
-							ml_parnter_info->partner_link_info[j].link_id)
-							break;
-					}
-					if (j < ml_parnter_info->num_partner_links) {
+					if (mlo_dev_ctx->wlan_vdev_list[i]->vdev_mlme.mlo_link_id
+						== ml_parnter_info->partner_link_info[j].link_id) {
 						wlan_vdev_mlme_get_ssid(
 							vdev, ssid.ssid,
 							&ssid.length);
@@ -922,9 +923,9 @@ mlo_send_link_connect(struct wlan_objmgr_vdev *vdev,
 							*ml_parnter_info,
 							ml_parnter_info->partner_link_info[j],
 							ssid);
+						mlo_dev_lock_release(mlo_dev_ctx);
+						return;
 					}
-					mlo_dev_lock_release(mlo_dev_ctx);
-					return;
 				}
 			}
 		}