Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09628aa1 authored by Abhinav Kumar's avatar Abhinav Kumar Committed by Gerrit - the friendly Code Review server
Browse files

qcacld-3.0: Fix race between vdev_stop and update_11k_offload

Currently, host sends 11k offload command to FW as part of RSO Start
and 11k offload disables to FW during RSO Stop. In case of STA+STA
concurrency, Host sends vdev_stop before 11k_deconfig for
currently enabled STA results to assert in FW.

In order to configure 11k for second STA without assertion, Driver
should de-config 11k for currently enabled STA before vdev stop/delete.

Fix is to configure 11k while start roaming and de-configure 11k
while stop roaming irrespective of the reason for roaming STOP.

Change-Id: I0915d8a0141194c331eb59ba0f2dfa9c8995628a
CRs-Fixed: 2449431
parent c1791905
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -7181,6 +7181,8 @@ QDF_STATUS sme_stop_roaming(tHalHandle hal, uint8_t session_id, uint8_t reason)
	else
		csr_roam_reset_roam_params(mac_ctx);

	req->offload_11k_params.offload_11k_bitmask = 0;

	wma_msg.type = WMA_ROAM_SCAN_OFFLOAD_REQ;
	wma_msg.bodyptr = req;

+2 −4
Original line number Diff line number Diff line
@@ -20534,11 +20534,9 @@ csr_roam_offload_scan(tpAniSirGlobal mac_ctx, uint8_t session_id,
	 * 11k offload is enabled during RSO Start after connect indication and
	 * 11k offload is disabled during RSO Stop after disconnect indication
	 */
	if (command == ROAM_SCAN_OFFLOAD_START &&
	    reason == REASON_CTX_INIT)
	if (command == ROAM_SCAN_OFFLOAD_START)
		csr_update_11k_offload_params(mac_ctx, session, req_buf, TRUE);
	else if (command == ROAM_SCAN_OFFLOAD_STOP &&
		 reason == REASON_DISCONNECTED)
	else if (command == ROAM_SCAN_OFFLOAD_STOP)
		csr_update_11k_offload_params(mac_ctx, session, req_buf, FALSE);
	QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
+6 −7
Original line number Diff line number Diff line
@@ -1652,15 +1652,14 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
		/*
		 * Send 11k offload disable command to FW as part of RSO Stop
		 */
		if (roam_req->reason == REASON_DISCONNECTED) {
			qdf_status = wma_send_offload_11k_params(wma_handle,
		qdf_status =
		    wma_send_offload_11k_params(wma_handle,
						&roam_req->offload_11k_params);
			if (qdf_status != QDF_STATUS_SUCCESS) {
		if (QDF_IS_STATUS_ERROR(qdf_status)) {
			WMA_LOGE("11k offload disable not sent, status %d",
				 qdf_status);
			break;
		}
		}

		/* Send BTM config as disabled during RSO Stop */
		qdf_status = wma_roam_scan_btm_offload(wma_handle, roam_req);