Forráskód Böngészése

qcacmn: Fix SCAN RANDOMIZATION failed for connected state

When F/W triggered roaming and wpa supplicant reassoc happen back to back,
disconnect may happen at last, but set send_disconnect flag of connect rsp
to true for last candidate, not for first candidate.
with Change-Id: I850c20cdfeb0c8423d074094f97c83599e43b409, first candidate
connect rsp is sent to kernel, kernel connected state isn’t cleared,
so SCAN RANDOMIZATION is always blocked later.

To fix it, copy send_disconnect flag of connect rsp from last candidate
to first candidate, then disconnect event of first candidate will be
sent to kernel to clear connected state, SCAN RANDOMIZATION won't be
blocked.

Change-Id: Ib7c0ec5d9b8e99de8f2548718f12ecddc94c792e
CRs-Fixed: 3615898
Jianmin Zhu 1 éve
szülő
commit
dfe6f3cf0a
1 módosított fájl, 12 hozzáadás és 1 törlés
  1. 12 1
      umac/mlme/connection_mgr/core/src/wlan_cm_connect.c

+ 12 - 1
umac/mlme/connection_mgr/core/src/wlan_cm_connect.c

@@ -2924,11 +2924,22 @@ static void cm_osif_connect_complete(struct cnx_mgr *cm_ctx,
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 	struct wlan_cm_connect_resp *connect_rsp = resp;
 
+	/* Currently, driver only notifies the first candidate failure to upper
+	 * layers, to post disconnect rsp to clear kernel connected state, need
+	 * copy send_disconnect flag from last candidate to first candidate.
+	 */
 	if (QDF_IS_STATUS_ERROR(resp->connect_status)) {
 		status = cm_get_first_candidate_rsp(cm_ctx, resp->cm_id,
 						    &first_failure_resp);
-		if (QDF_IS_STATUS_SUCCESS(status))
+		if (QDF_IS_STATUS_SUCCESS(status)) {
 			connect_rsp = &first_failure_resp;
+			if (resp->send_disconnect) {
+				connect_rsp->send_disconnect = resp->send_disconnect;
+				mlme_debug(CM_PREFIX_FMT "sent disconnect rsp for first candidate",
+					   CM_PREFIX_REF(wlan_vdev_get_id(cm_ctx->vdev),
+							 resp->cm_id));
+			}
+		}
 	}
 
 	mlme_cm_osif_connect_complete(cm_ctx->vdev, connect_rsp);