Bladeren bron

qcacld-3.0: Fix IBSS peer info handling when no peers are connected

qcacld-2.0 to qcacld-3.0 propagation

wma_ibss_peer_info_event_handler returns error when peer_info is NULL.
However, peer_info can be NULL in case num_peers connected is 0.
Handle this case in hdd_get_ibss_peer_info_cb so that callers of
GETIBSSPEERINFOALL do not see stale results after all connected peers
have left the IBSS. Also, log the errors for enabling debug and reset
the ibss_peer_info statistics.

Change-Id: I913748bf11f9362e5faaaf29c26fc39fda85f4a9
CRs-Fixed: 1007555
Sriram Madhvapathi 8 jaren geleden
bovenliggende
commit
58f0e27b2b
1 gewijzigde bestanden met toevoegingen van 15 en 12 verwijderingen
  1. 15 12
      core/hdd/src/wlan_hdd_ioctl.c

+ 15 - 12
core/hdd/src/wlan_hdd_ioctl.c

@@ -446,21 +446,24 @@ hdd_get_ibss_peer_info_cb(void *pUserData,
 	pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
 	if (NULL != pPeerInfo && QDF_STATUS_SUCCESS == pPeerInfo->status) {
 		/* validate number of peers */
-		if (pPeerInfo->numPeers < SIR_MAX_NUM_STA_IN_IBSS) {
-			pStaCtx->ibss_peer_info.status = pPeerInfo->status;
-			pStaCtx->ibss_peer_info.numPeers = pPeerInfo->numPeers;
-
-			for (i = 0; i < pPeerInfo->numPeers; i++) {
-				pStaCtx->ibss_peer_info.peerInfoParams[i] =
-					pPeerInfo->peerInfoParams[i];
-			}
-			hdd_info("Peer Info copied in HDD");
-		} else {
-			hdd_info("Number of peers %d returned is more than limit %d",
+		if (pPeerInfo->numPeers > SIR_MAX_NUM_STA_IN_IBSS) {
+			hdd_warn("Limiting num_peers %u to %u",
 				pPeerInfo->numPeers, SIR_MAX_NUM_STA_IN_IBSS);
+			pPeerInfo->numPeers = SIR_MAX_NUM_STA_IN_IBSS;
 		}
+		pStaCtx->ibss_peer_info.status = pPeerInfo->status;
+		pStaCtx->ibss_peer_info.numPeers = pPeerInfo->numPeers;
+
+		for (i = 0; i < pPeerInfo->numPeers; i++)
+			pStaCtx->ibss_peer_info.peerInfoParams[i] =
+				pPeerInfo->peerInfoParams[i];
 	} else {
-		hdd_info("peerInfo returned is NULL");
+		hdd_err("peerInfo %s: status %u, numPeers %u",
+			pPeerInfo ? "valid" : "null",
+			pPeerInfo ? pPeerInfo->status : QDF_STATUS_E_FAILURE,
+			pPeerInfo ? pPeerInfo->numPeers : 0);
+		pStaCtx->ibss_peer_info.numPeers = 0;
+		pStaCtx->ibss_peer_info.status = QDF_STATUS_E_FAILURE;
 	}
 
 	complete(&adapter->ibss_peer_info_comp);