summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPadma, Santhosh Kumar <skpadma@codeaurora.org>2017-04-10 18:49:12 +0530
committerspuligil <spuligil@codeaurora.org>2017-04-15 12:49:47 -0700
commit239538c9a7594fa1aa5aa25c6d55dd42071bbba8 (patch)
treee1bcd1a6f579750660e62d6165c459fe227871e3
parent8b74f6e4236daf4ca7a8e272ede7c88127acd9c2 (diff)
qcacld-3.0: Remove peer if add bss fails
Currently peer is not removed if add bss fails. This can cause assert in firmware as driver sends VDEV DELETE without peer delete. Add changes to remove peer if add bss fails. Change-Id: I7591af55f24919af9cf2d1f288a5bd9ff706adda CRs-Fixed: 2029804
-rw-r--r--core/wma/src/wma_dev_if.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c
index 56b4d7b4c5fd..44f92a812332 100644
--- a/core/wma/src/wma_dev_if.c
+++ b/core/wma/src/wma_dev_if.c
@@ -673,6 +673,9 @@ static void wma_vdev_start_rsp(tp_wma_handle wma,
resp_event)
{
struct beacon_info *bcn;
+ ol_txrx_pdev_handle pdev;
+ ol_txrx_peer_handle peer = NULL;
+ uint8_t peer_id;
#ifdef QCA_IBSS_SUPPORT
WMA_LOGD("%s: vdev start response received for %s mode", __func__,
@@ -729,6 +732,25 @@ static void wma_vdev_start_rsp(tp_wma_handle wma,
}
add_bss->smpsMode = host_map_smps_mode(resp_event->smps_mode);
send_fail_resp:
+ if (add_bss->status != QDF_STATUS_SUCCESS) {
+ WMA_LOGE("%s: ADD BSS failure %d", __func__, add_bss->status);
+
+ pdev = cds_get_context(QDF_MODULE_ID_TXRX);
+ if (NULL == pdev)
+ WMA_LOGE("%s: Failed to get pdev", __func__);
+
+ if (pdev)
+ peer = ol_txrx_find_peer_by_addr(pdev,
+ add_bss->bssId, &peer_id);
+ if (!peer)
+ WMA_LOGE("%s Failed to find peer %pM", __func__,
+ add_bss->bssId);
+
+ if (peer)
+ wma_remove_peer(wma, add_bss->bssId,
+ resp_event->vdev_id, peer, false);
+ }
+
WMA_LOGD("%s: Sending add bss rsp to umac(vdev %d status %d)",
__func__, resp_event->vdev_id, add_bss->status);
wma_send_msg(wma, WMA_ADD_BSS_RSP, (void *)add_bss, 0);