Преглед на файлове

qcacld-3.0: Fetch right vdev id to continue MLO link disconnect

When disconnected request started for an MLO connection,
link vdev gets disconnected first and then assoc vdev. So active
disconnect request is queued for link vdev first. As part of
RSO stop request-response handshake, the disconnect request is
cached and RSO stop request is sent to firmware. Disconnect is
supposed to resume for link vdev after getting the RSO stop
response . But currently, first MLO vdev gets checked if it
has active disconnect. This may fail to fetch the active
disconnect request if the first vdev in the list is assoc vdev
as it doesn't have active disconnect but link vdev has.
Check if it's a link vdev to resolve this and fetch active
disconnect req always.

Also, if there is only one link present(e.g. single link
connection or failed to connect the secondary link, etc.. ) in the
vdev_list, current release of vdev refs at the end of the API
wlan_cm_mlo_update_disconnecting_vdev_id() is not valid as it's
trying to release all links. Release only the links for which
reference is taken.

Change-Id: Idcb8a979dbdadafd4690e51a7301c4a7dfe82f73
CRs-Fixed: 3203969
Srinivas Dasari преди 2 години
родител
ревизия
ed58b63609
променени са 1 файла, в които са добавени 4 реда и са изтрити 3 реда
  1. 4 3
      components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_disconnect.c

+ 4 - 3
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_disconnect.c

@@ -436,8 +436,9 @@ wlan_cm_mlo_update_disconnecting_vdev_id(struct wlan_objmgr_psoc *psoc,
 	}
 
 	for (i = 0; i < num_links; i++) {
-		if (wlan_vdev_mlme_is_mlo_vdev(vdev_list[i]) &&
-		    wlan_cm_is_vdev_disconnecting(vdev_list[i])) {
+		if (wlan_vdev_mlme_is_mlo_link_vdev(vdev_list[i]) &&
+		    wlan_cm_get_active_req_type(vdev_list[i]) ==
+							CM_DISCONNECT_ACTIVE) {
 			/*
 			 * This is expected to match only once as per current
 			 * design.
@@ -448,7 +449,7 @@ wlan_cm_mlo_update_disconnecting_vdev_id(struct wlan_objmgr_psoc *psoc,
 	}
 
 release_mlo_ref:
-	for (i = 0; i < QDF_ARRAY_SIZE(vdev_list); i++)
+	for (i = 0; i < num_links; i++)
 		mlo_release_vdev_ref(vdev_list[i]);
 
 done: