diff options
| author | Padma, Santhosh Kumar <skpadma@codeaurora.org> | 2017-04-10 18:49:12 +0530 |
|---|---|---|
| committer | spuligil <spuligil@codeaurora.org> | 2017-04-15 12:49:47 -0700 |
| commit | 239538c9a7594fa1aa5aa25c6d55dd42071bbba8 (patch) | |
| tree | e1bcd1a6f579750660e62d6165c459fe227871e3 | |
| parent | 8b74f6e4236daf4ca7a8e272ede7c88127acd9c2 (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.c | 22 |
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); |
