ソースを参照

qcacld-3.0: Avoid RSO start during OWE link connecting

When OWE roamed to 2 links AP:
1. Set vdev1 connect_req bitmap.
2. Trigger vdev1 disconnect.
3. Clear vdev1 connected_links bitmap.
4. Clear vdev1 connect_req bitmap.
5. Trigger vdev1 connect.
6. Set vdev1 connected_links bitmap.

between #3 and #6, App can send RSO start to F/W before vdev1 up,
F/W will assert during next roaming.

To fix it, if vdev connect_req bitmap is set, don't allow RSO start,
clear vdev1 connect_req bitmap in last step.
1. Set vdev1 connect_req bitmap.
2. Trigger vdev1 disconnect.
3. Clear vdev1 connect_req bitmap.
4. Trigger vdev1 connect.
5. Set vdev1 connected_links bitmap.
6. Clear vdev1 connect_req bitmap.

Change-Id: I4157a5adcf4e41995bdb92a888bd8d2fcb5994a3
CRs-Fixed: 3719140
Jianmin Zhu 1 年間 前
コミット
8ccbca35ef
1 ファイル変更5 行追加3 行削除
  1. 5 3
      components/umac/mlme/mlo_mgr/src/wlan_mlo_mgr_roam.c

+ 5 - 3
components/umac/mlme/mlo_mgr/src/wlan_mlo_mgr_roam.c

@@ -885,7 +885,8 @@ mlo_check_if_all_vdev_up(struct wlan_objmgr_vdev *vdev)
 		if (!mlo_dev_ctx->wlan_vdev_list[i])
 			continue;
 
-		if (qdf_test_bit(i, sta_ctx->wlan_connected_links) &&
+		if ((qdf_test_bit(i, sta_ctx->wlan_connected_links) ||
+		     qdf_test_bit(i, sta_ctx->wlan_connect_req_links)) &&
 		    !QDF_IS_STATUS_SUCCESS(wlan_vdev_is_up(mlo_dev_ctx->wlan_vdev_list[i]))) {
 			mlo_debug("Vdev id %d is not in up state",
 				  wlan_vdev_get_id(mlo_dev_ctx->wlan_vdev_list[i]));
@@ -1451,7 +1452,6 @@ mlo_roam_link_connect_notify(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 		}
 
 		if (mlo_check_connect_req_bmap(link_vdev)) {
-			mlo_update_connect_req_links(link_vdev, false);
 			status = mlo_roam_prepare_and_send_link_connect_req(assoc_vdev,
 							link_vdev,
 							rsp,
@@ -1459,8 +1459,10 @@ mlo_roam_link_connect_notify(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 							partner_info.partner_link_info[i].chan_freq);
 			if (QDF_IS_STATUS_ERROR(status))
 				goto err;
-			else
+			else {
+				mlo_update_connect_req_links(link_vdev, false);
 				goto end;
+			}
 		}
 	}
 err: