summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSriram, Madhvapathi <msriram@codeaurora.org>2016-04-25 16:47:53 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-05-10 17:56:23 +0530
commitfe47c98bde66b4a786ee818b15571dec81d5de0a (patch)
tree7b52178de01345e2cb5bc63fdb171dbf3a06b97b
parent6bedf46fdd67e4a940130d9c4c4a8a7083dac381 (diff)
qcacld-2.0: Fix IBSS peer info handling when no peers are connected
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. CRs-Fixed: 1007555 Change-Id: I913748bf11f9362e5faaaf29c26fc39fda85f4a9
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 3014a7d6a539..b8b7564604b5 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -1469,24 +1469,30 @@ hdd_get_ibss_peer_info_cb(v_VOID_t *pUserData,
}
pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+
if (NULL != pPeerInfo && eHAL_STATUS_SUCCESS == pPeerInfo->status) {
/* validate number of peers */
- if (pPeerInfo->numPeers < HDD_MAX_NUM_IBSS_STA) {
- pStaCtx->ibss_peer_info.status = pPeerInfo->status;
- pStaCtx->ibss_peer_info.numPeers = pPeerInfo->numPeers;
+ if (pPeerInfo->numPeers > HDD_MAX_NUM_IBSS_STA) {
+ hddLog(LOGW,
+ FL("Limiting num_peers %u to %u"),
+ pPeerInfo->numPeers, HDD_MAX_NUM_IBSS_STA);
+ pPeerInfo->numPeers = HDD_MAX_NUM_IBSS_STA;
+ }
+
+ 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] =
+ for (i = 0; i < pPeerInfo->numPeers; i++) {
+ pStaCtx->ibss_peer_info.peerInfoParams[i] =
pPeerInfo->peerInfoParams[i];
- }
- hddLog(LOG1, FL("Peer Info copied in HDD"));
- } else {
- hddLog(LOG1,
- FL("Number of peers %d returned is more than limit %d"),
- pPeerInfo->numPeers, HDD_MAX_NUM_IBSS_STA);
}
} else {
- hddLog(LOG1, FL("peerInfo returned is NULL"));
+ hddLog(LOGE, FL("peerInfo %s: status %u, numPeers %u"),
+ pPeerInfo ? "valid" : "null",
+ pPeerInfo ? pPeerInfo->status : eHAL_STATUS_FAILURE,
+ pPeerInfo ? pPeerInfo->numPeers : 0);
+ pStaCtx->ibss_peer_info.numPeers = 0;
+ pStaCtx->ibss_peer_info.status = eHAL_STATUS_FAILURE;
}
complete(&pAdapter->ibss_peer_info_comp);