Parcourir la source

qcacld-3.0: Do not abort link switch in progress if sap is coming up

1.	Link switch request received on VDEV0 and host moved it as link VDEV to
process it.
	a.	Link switch is currently in connecting state on new link.+

2.	There is SAP interface for which VDEV is created which was
	ongoing interface down from framework.
	a.As part of this, if any ongoing connection is in
	  progress on STA/P2P-CLI interface those will be terminated to
	  avoid timeout issues as connection might take more time if
	  trying multiple candidates due to failure and this can lead to
	  SAP stop timeout and peer leak.

3.	Disconnect is issued as link switch VDEV is in connecting state.
	a. Disconnect is serialized first on VDEV as VDEV0 is set as link VDEV) then later on
	   VDEV1

4.	Link switch is completed, VDEV flags are restored and cmd is removed from serialization,
	then VDEV0 disconnect (queued in 3.a) got active.
	a.On disconnect complete on VDEV0 kernel is notified.
	b.Framework initiated set mac address even before VDEV1 disconnect is completed.
	c. FW asserted as VDEV1 is still in UP state.

Do not abort connection if that VDEV is in link switch progress.

CRs-Fixed: 3614424
Change-Id: Ia56c832706878c4df7261f8c59769ab783c12cfb
Arun Kumar Khandavalli il y a 1 an
Parent
commit
1f4f4201a5
1 fichiers modifiés avec 4 ajouts et 2 suppressions
  1. 4 2
      core/hdd/src/wlan_hdd_assoc.c

+ 4 - 2
core/hdd/src/wlan_hdd_assoc.c

@@ -590,7 +590,8 @@ void hdd_abort_ongoing_sta_connection(struct hdd_context *hdd_ctx)
 	struct wlan_hdd_link_info *link_info;
 
 	link_info = hdd_get_sta_connection_in_progress(hdd_ctx);
-	if (link_info)
+	if (link_info &&
+	    !wlan_vdev_mlme_is_mlo_link_switch_in_progress(link_info->vdev))
 		wlan_hdd_cm_issue_disconnect(link_info,
 					     REASON_UNSPEC_FAILURE, false);
 }
@@ -602,7 +603,8 @@ void hdd_abort_ongoing_sta_sae_connection(struct hdd_context *hdd_ctx)
 	int32_t key_mgmt;
 
 	link_info = hdd_get_sta_connection_in_progress(hdd_ctx);
-	if (!link_info)
+	if (!link_info ||
+	    wlan_vdev_mlme_is_mlo_link_switch_in_progress(link_info->vdev))
 		return;
 
 	vdev = hdd_objmgr_get_vdev_by_user(link_info->adapter->deflink,