Browse Source

qcacmn: Remove serialization command priority on HO fail

On HO failure driver triggers internal disconnect and if
the existing connection is two link MLO, then disconnect
is issued first on partner VDEV and later on assoc VDEV.

To avoid STA+STA roaming conflict where STA2 roamed to
STA1's BSSID and STA1 resulted in HO failure and to
prioritize STA1 cleanup so that STA2 will not fail during
peer create.
The original change I379c03138b70580f44c2b96489ada030ec6fc20e

This is leading to cleaning up assoc VDEV first followed by
partner VDEV, but DP component removes the entry of DP peer
on assoc VDEV cleanup as the expectation is partner VDEV
gets cleaned first followed by assoc VDEV. This is causes
reference leak on the peer.

To address this issue don't prioritize disconnect for
HO Fail case.

Change-Id: I8d5abd0bb5ded49527ce851b9155ad22d7dcf5a8
CRs-Fixed: 3708018
Vinod Kumar Pirla 1 year ago
parent
commit
d2815cb9cf
1 changed files with 3 additions and 15 deletions
  1. 3 15
      umac/mlme/connection_mgr/core/src/wlan_cm_disconnect.c

+ 3 - 15
umac/mlme/connection_mgr/core/src/wlan_cm_disconnect.c

@@ -1,6 +1,6 @@
 /*
 /*
  * Copyright (c) 2012-2015,2020-2021 The Linux Foundation. All rights reserved.
  * Copyright (c) 2012-2015,2020-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
  * purpose with or without fee is hereby granted, provided that the above
@@ -231,12 +231,6 @@ static QDF_STATUS cm_ser_disconnect_req(struct wlan_objmgr_pdev *pdev,
 	cmd.cmd_cb = cm_ser_disconnect_cb;
 	cmd.cmd_cb = cm_ser_disconnect_cb;
 	cmd.source = WLAN_UMAC_COMP_MLME;
 	cmd.source = WLAN_UMAC_COMP_MLME;
 	cmd.is_high_priority = false;
 	cmd.is_high_priority = false;
-	/* Set high priority if queueing disconnect as part of
-	 * ho failure
-	 */
-	if (req->req.reason_code == REASON_FW_TRIGGERED_ROAM_FAILURE &&
-	    req->req.source == CM_MLME_DISCONNECT)
-		cmd.is_high_priority = true;
 	cmd.cmd_timeout_duration = DISCONNECT_TIMEOUT;
 	cmd.cmd_timeout_duration = DISCONNECT_TIMEOUT;
 	cmd.vdev = cm_ctx->vdev;
 	cmd.vdev = cm_ctx->vdev;
 	cmd.is_blocking = cm_ser_get_blocking_cmd();
 	cmd.is_blocking = cm_ser_get_blocking_cmd();
@@ -729,14 +723,8 @@ cm_handle_discon_req_in_non_connected_state(struct cnx_mgr *cm_ctx,
 						 true);
 						 true);
 		break;
 		break;
 	case WLAN_CM_S_ROAMING:
 	case WLAN_CM_S_ROAMING:
-		/* for FW roam/LFR3 remove the req from the list but
-		 * for ho failure don't flush pending requests as disconnect
-		 * should be queued in serialization queue before
-		 * dequeueing roam.
-		 */
-		if (cm_roam_offload_enabled(wlan_vdev_get_psoc(cm_ctx->vdev)) &&
-		    !(cm_req->req.source == CM_MLME_DISCONNECT &&
-		      cm_req->req.reason_code == REASON_FW_TRIGGERED_ROAM_FAILURE))
+		/* for FW roam/LFR3 remove the req from the list */
+		if (cm_roam_offload_enabled(wlan_vdev_get_psoc(cm_ctx->vdev)))
 			cm_flush_pending_request(cm_ctx, ROAM_REQ_PREFIX,
 			cm_flush_pending_request(cm_ctx, ROAM_REQ_PREFIX,
 						 false);
 						 false);
 		fallthrough;
 		fallthrough;