Parcourir la source

qcacld-3.0: Fix error handling in peer creation

Return error instead of QDF_BUG(0) in ol_txrx_peer_attach() when it
times out on duplicate peer detection. Peer unmap events from firmware
may take more than 500 ms timeout observed by this routine.
wma_create_peer() should return error status on failure to create peer.

CRs-Fixed: 2004665
Change-Id: I8368c6320139f97584bd1647f1806a695d4a5929
Deepak Dhamdhere il y a 8 ans
Parent
commit
be72e80caa
2 fichiers modifiés avec 17 ajouts et 3 suppressions
  1. 8 2
      core/dp/txrx/ol_txrx.c
  2. 9 1
      core/wma/src/wma_data.c

+ 8 - 2
core/dp/txrx/ol_txrx.c

@@ -2455,8 +2455,14 @@ ol_txrx_peer_attach(struct cdp_vdev *pvdev, uint8_t *peer_mac_addr)
 			if (cds_is_self_recovery_enabled())
 				cds_trigger_recovery(false);
 			else
-				/* Added for debugging only */
-				QDF_BUG(0);
+
+				/*
+				 * Add equivalent of following line when it
+				 * becomes available.
+				 * wma_peer_debug_dump();
+				 */
+				QDF_ASSERT(0);
+
 			vdev->wait_on_peer_id = OL_TXRX_INVALID_LOCAL_PEER_ID;
 			return NULL;
 		}

+ 9 - 1
core/wma/src/wma_data.c

@@ -1177,6 +1177,7 @@ void wma_set_linkstate(tp_wma_handle wma, tpLinkStateParams params)
 	    (params->state != eSIR_LINK_DOWN_STATE)) {
 		WMA_LOGD("%s: unsupported link state %d",
 			 __func__, params->state);
+		params->status = false;
 		goto out;
 	}
 
@@ -1184,6 +1185,7 @@ void wma_set_linkstate(tp_wma_handle wma, tpLinkStateParams params)
 
 	if (NULL == pdev) {
 		WMA_LOGE("%s: Unable to get TXRX context", __func__);
+		params->status = false;
 		goto out;
 	}
 
@@ -1191,11 +1193,13 @@ void wma_set_linkstate(tp_wma_handle wma, tpLinkStateParams params)
 	if (!vdev) {
 		WMA_LOGP("%s: vdev not found for addr: %pM",
 			 __func__, params->selfMacAddr);
+		params->status = false;
 		goto out;
 	}
 
 	if (wma_is_vdev_in_ap_mode(wma, vdev_id)) {
 		WMA_LOGD("%s: Ignoring set link req in ap mode", __func__);
+		params->status = false;
 		goto out;
 	}
 
@@ -1205,8 +1209,10 @@ void wma_set_linkstate(tp_wma_handle wma, tpLinkStateParams params)
 		status = wma_create_peer(wma, pdev, vdev, params->bssid,
 				WMI_PEER_TYPE_DEFAULT, vdev_id,
 				roam_synch_in_progress);
-		if (status != QDF_STATUS_SUCCESS)
+		if (status != QDF_STATUS_SUCCESS) {
 			WMA_LOGE("%s: Unable to create peer", __func__);
+			params->status = false;
+		}
 		if (roam_synch_in_progress)
 			return;
 	} else {
@@ -1222,12 +1228,14 @@ void wma_set_linkstate(tp_wma_handle wma, tpLinkStateParams params)
 		if (!msg) {
 			WMA_LOGP(FL("Failed to fill vdev request for vdev_id %d"),
 				 vdev_id);
+			params->status = false;
 			status = QDF_STATUS_E_NOMEM;
 		}
 		wma_vdev_set_pause_bit(vdev_id, PAUSE_TYPE_HOST);
 		if (wma_send_vdev_stop_to_fw(wma, vdev_id)) {
 			WMA_LOGP("%s: %d Failed to send vdev stop",
 				 __func__, __LINE__);
+			params->status = false;
 		} else {
 			WMA_LOGP("%s: %d vdev stop sent vdev %d",
 				 __func__, __LINE__, vdev_id);