diff options
| author | Sriram, Madhvapathi <msriram@codeaurora.org> | 2016-04-25 16:47:53 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-05-10 17:56:23 +0530 |
| commit | fe47c98bde66b4a786ee818b15571dec81d5de0a (patch) | |
| tree | 7b52178de01345e2cb5bc63fdb171dbf3a06b97b | |
| parent | 6bedf46fdd67e4a940130d9c4c4a8a7083dac381 (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.c | 30 |
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); |
