Browse Source

qcacld-3.0: Add check to avoid multiple disassoc on ML disconnect

When send disassoc, check if ML peer state is ML_PEER_DISCONN_INITIATED
that indicates the link vdev has sent disassoc frame to FW. If the
check is true, then do not send another disassoc for assoc vdev
to avoid FW assert.

Change-Id: I8ba98c98fa3af8f4a547f4b7e63c73a44e32df74
CRs-Fixed: 3379097
Jianmin Zhu 2 years ago
parent
commit
a8256d8add
1 changed files with 11 additions and 0 deletions
  1. 11 0
      core/mac/src/pe/lim/lim_send_management_frames.c

+ 11 - 0
core/mac/src/pe/lim/lim_send_management_frames.c

@@ -4232,6 +4232,17 @@ lim_send_disassoc_mgmt_frame(struct mac_context *mac,
 		if (waitForAck)
 			lim_send_disassoc_cnf(mac);
 		return;
+	} else if (lim_is_ml_peer_state_disconn(mac, pe_session, peer)) {
+		/**
+		 * Check if disassoc is already sent on link vdev and ML peer
+		 * state is moved to ML_PEER_DISCONN_INITIATED. In which case,
+		 * do not send disassoc on assoc vdev, issue disassoc only if
+		 * this check fails.
+		 */
+		pe_debug("disassoc tx not required for vdev id %d",
+			 pe_session->vdev_id);
+		lim_send_disassoc_cnf(mac);
+		return;
 	}
 	smeSessionId = pe_session->smeSessionId;