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
This commit is contained in:
Deepak Dhamdhere 2017-02-12 12:50:42 -08:00 • committed by snandini
commit be72e80caa
2 changed files with 17 additions and 3 deletions

View file

@ -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;
}

View file

@ -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);