diff options
author | Vinay Gannevaram <quic_vganneva@quicinc.com> | 2019-07-01 14:55:03 +0530 |
---|---|---|
committer | Sunil Ravi <sunilravi@google.com> | 2019-08-07 15:23:04 -0700 |
commit | a7ddf874d7d2c7a0302413326ddc8e54f5ae96da (patch) | |
tree | c75fe23c34f345a8fc236b3ba8ea28cf09b0e8c9 | |
parent | 422f064f2021fa3c2e3e7d12de28f564562dc2ed (diff) | |
download | qcacld-a7ddf874d7d2c7a0302413326ddc8e54f5ae96da.tar.gz |
qcacld-3.0: Remove all calls to cdp_remove_peers_for_vdev
Remove all calls to cdp_remove_peers_for_vdev().
cdp_remove_peers_for_vdev() is called from vdev_resp_handler
to remove all vdev peers. All the peers associated with the vdev
are deleted before vdev stop and hence this call to
cdp_remove_peers_for_vdev() is redundant.
Delete only the self peer and remove the code to delete the
vdev peers.
Change-Id: I8a91509917a371b860058a66831d8417b3a78671
CRs-Fixed: 2002372
Bug: 135964915
Signed-off-by: Vinay Gannevaram <quic_vganneva@quicinc.com>
-rw-r--r-- | core/wma/src/wma_dev_if.c | 179 | ||||
-rw-r--r-- | core/wma/src/wma_nan_datapath.c | 55 | ||||
-rw-r--r-- | core/wma/src/wma_nan_datapath.h | 8 |
3 files changed, 68 insertions, 174 deletions
diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 56d4542cea..d3c0d430c2 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -1512,83 +1512,6 @@ err: return QDF_STATUS_E_FAILURE; } -#ifdef QCA_IBSS_SUPPORT - -/** - * wma_delete_all_ibss_peers() - delete all ibss peer for vdev_id - * @wma: wma handle - * @vdev_id: vdev id - * - * This function send peer delete command to fw for all - * peers in peer_list and remove ref count for peer id - * peer will actually remove from list after receving - * unmap event from firmware. - * - * Return: none - */ -static void wma_delete_all_ibss_peers(tp_wma_handle wma, A_UINT32 vdev_id) -{ - ol_txrx_vdev_handle vdev; - - if (!wma || vdev_id >= wma->max_bssid) - return; - - vdev = wma->interfaces[vdev_id].handle; - if (!vdev) - return; - - /* remove all remote peers of IBSS */ - ol_txrx_remove_peers_for_vdev(vdev, - (ol_txrx_vdev_peer_remove_cb)wma_remove_peer, wma, - true); -} -#else -/** - * wma_delete_all_ibss_peers(): dummy function for when ibss is not supported - * @wma: wma handle - * @vdev_id: vdev id - * - * This function send peer delete command to fw for all - * peers in peer_list and remove ref count for peer id - * peer will actually remove from list after receving - * unmap event from firmware. - * - * Return: none - */ -static void wma_delete_all_ibss_peers(tp_wma_handle wma, A_UINT32 vdev_id) -{ -} -#endif /* QCA_IBSS_SUPPORT */ - -/** - * wma_delete_all_ap_remote_peers() - delete all ap peer for vdev_id - * @wma: wma handle - * @vdev_id: vdev id - * - * This function send peer delete command to fw for all - * peers in peer_list and remove ref count for peer id - * peer will actually remove from list after receving - * unmap event from firmware. - * - * Return: none - */ -static void wma_delete_all_ap_remote_peers(tp_wma_handle wma, A_UINT32 vdev_id) -{ - ol_txrx_vdev_handle vdev; - - if (!wma || vdev_id >= wma->max_bssid) - return; - - vdev = wma->interfaces[vdev_id].handle; - if (!vdev) - return; - - WMA_LOGD("%s: vdev_id - %d", __func__, vdev_id); - /* remove all remote peers of SAP */ - ol_txrx_remove_peers_for_vdev(vdev, - (ol_txrx_vdev_peer_remove_cb)wma_remove_peer, wma, false); -} - /** * wma_hidden_ssid_vdev_restart_on_vdev_stop() - restart vdev to set hidden ssid * @wma_handle: wma handle @@ -1660,6 +1583,60 @@ static void wma_cleanup_target_req_param(struct wma_target_req *tgt_req) } /** + * wma_remove_bss_peer() - remove BSS peer + * @wma: pointer to WMA handle + * @pdev: pointer to PDEV + * @vdev_id: vdev id on which delete BSS request was received + * @params: pointer to Delete BSS params + * + * This function is called on receiving vdev stop response from FW or + * vdev stop response timeout. In case of IBSS/NDI, use vdev's self MAC + * for removing the peer. In case of STA/SAP use bssid passed as part of + * delete STA parameter. + * + * Return: 0 on success, ERROR code on failure + */ +static int wma_remove_bss_peer(tp_wma_handle wma, void *pdev, + struct wma_target_req *req_msg, uint32_t vdev_id, + tpDeleteBssParams params) +{ + ol_txrx_vdev_handle vdev; + ol_txrx_peer_handle peer = NULL; + uint8_t peer_id; + uint8_t *mac_addr = NULL; + + vdev = ol_txrx_get_vdev_from_vdev_id(vdev_id); + if (!vdev) { + WMA_LOGE(FL("vdev is NULL for vdev_id = %d"), vdev_id); + wma_cleanup_target_req_param(req_msg); + return -EINVAL; + } + + if (wma_is_vdev_in_ibss_mode(wma, vdev_id) || + WMA_IS_VDEV_IN_NDI_MODE(wma->interfaces, vdev_id)) { + mac_addr = ol_txrx_get_vdev_mac_addr(vdev); + if (!mac_addr) { + WMA_LOGE(FL("mac_addr is NULL for vdev_id = %d"), + vdev_id); + wma_cleanup_target_req_param(req_msg); + return -EINVAL; + } + } else { + mac_addr = params->bssid; + } + + peer = ol_txrx_find_peer_by_addr(pdev, mac_addr, &peer_id); + if (!peer) { + WMA_LOGE(FL("peer NULL for vdev_id = %d"), vdev_id); + wma_cleanup_target_req_param(req_msg); + return -EINVAL; + } + wma_remove_peer(wma, mac_addr, vdev_id, peer, false); + + return 0; +} + +/** * get_fw_active_apf_mode() - convert HDD APF mode to FW configurable APF * mode * @mode: APF mode maintained in HDD @@ -1908,8 +1885,8 @@ int wma_vdev_stop_resp_handler(void *handle, uint8_t *cmd_param_info, wmi_vdev_stopped_event_fixed_param *resp_event; struct wma_target_req *req_msg, *new_req_msg; ol_txrx_pdev_handle pdev; - uint8_t peer_id; struct wma_txrx_node *iface; + uint8_t peer_id; int32_t status = 0; QDF_STATUS result; @@ -2012,28 +1989,11 @@ int wma_vdev_stop_resp_handler(void *handle, uint8_t *cmd_param_info, qdf_mem_zero(&iface->arp_offload_req, sizeof(iface->arp_offload_req)); - if (wma_is_vdev_in_ibss_mode(wma, resp_event->vdev_id)) - wma_delete_all_ibss_peers(wma, resp_event->vdev_id); - else if (WMA_IS_VDEV_IN_NDI_MODE(wma->interfaces, - resp_event->vdev_id)) { - wma_delete_all_nan_remote_peers(wma, - resp_event->vdev_id); - } else { - if (wma_is_vdev_in_ap_mode(wma, resp_event->vdev_id)) { - wma_delete_all_ap_remote_peers(wma, - resp_event->vdev_id); - } - result = wma_remove_peer_by_reference(pdev, - wma, params, - &peer_id, - params->bssid, - resp_event->vdev_id, - WMA_DELETE_PEER_RSP); - - if (result == QDF_STATUS_SUCCESS) - goto free_req_msg; + status = wma_remove_bss_peer(wma, pdev, req_msg, + resp_event->vdev_id, params); + if (status != 0) + goto free_req_msg; - } wma_send_del_bss_response(wma, req_msg, resp_event->vdev_id); } else if (req_msg->msg_type == WMA_SET_LINK_STATE) { @@ -3256,9 +3216,10 @@ void wma_vdev_resp_timer(void *data) struct wma_target_req *tgt_req = (struct wma_target_req *)data; ol_txrx_peer_handle peer; ol_txrx_pdev_handle pdev; - uint8_t peer_id; struct wma_target_req *msg; struct wma_txrx_node *iface; + QDF_STATUS status = QDF_STATUS_SUCCESS; + uint8_t peer_id; #ifdef FEATURE_AP_MCC_CH_AVOIDANCE tpAniSirGlobal mac_ctx; #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ @@ -3359,19 +3320,11 @@ void wma_vdev_resp_timer(void *data) return; } - if (wma_is_vdev_in_ibss_mode(wma, tgt_req->vdev_id)) - wma_delete_all_ibss_peers(wma, tgt_req->vdev_id); - else { - if (wma_is_vdev_in_ap_mode(wma, tgt_req->vdev_id)) { - wma_delete_all_ap_remote_peers(wma, - tgt_req-> - vdev_id); - } - peer = ol_txrx_find_peer_by_addr(pdev, params->bssid, - &peer_id); - wma_remove_peer(wma, params->bssid, tgt_req->vdev_id, - peer, false); - } + + status = wma_remove_bss_peer(wma, pdev, tgt_req, + tgt_req->vdev_id, params); + if (QDF_IS_STATUS_ERROR(status)) + goto free_tgt_req; if (wma_send_vdev_down_to_fw(wma, tgt_req->vdev_id) != QDF_STATUS_SUCCESS) { diff --git a/core/wma/src/wma_nan_datapath.c b/core/wma/src/wma_nan_datapath.c index 56b3e1fe95..b5b41d2388 100644 --- a/core/wma/src/wma_nan_datapath.c +++ b/core/wma/src/wma_nan_datapath.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -1280,59 +1280,6 @@ send_fail_resp: } /** - * wma_delete_all_nan_remote_peers() - Delete all nan peers - * @wma: wma handle - * @vdev_id: vdev id - * - * Return: None - */ -void wma_delete_all_nan_remote_peers(tp_wma_handle wma, uint32_t vdev_id) -{ - ol_txrx_vdev_handle vdev; - ol_txrx_peer_handle peer, temp; - - if (vdev_id >= wma->max_bssid) { - WMA_LOGE("%s: invalid vdev_id = %d", __func__, vdev_id); - return; - } - - vdev = wma->interfaces[vdev_id].handle; - if (!vdev) { - WMA_LOGE("%s: vdev is NULL for vdev_id = %d", - __func__, vdev_id); - return; - } - - /* remove all remote peers of ndi */ - qdf_spin_lock_bh(&vdev->pdev->peer_ref_mutex); - - temp = NULL; - TAILQ_FOREACH_REVERSE(peer, &vdev->peer_list, - peer_list_t, peer_list_elem) { - if (temp) { - qdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex); - if (qdf_atomic_read( - &temp->delete_in_progress) == 0) - wma_remove_peer(wma, temp->mac_addr.raw, - vdev_id, temp, false); - qdf_spin_lock_bh(&vdev->pdev->peer_ref_mutex); - } - /* self peer is deleted last */ - if (peer == TAILQ_FIRST(&vdev->peer_list)) { - WMA_LOGE("%s: self peer removed", __func__); - break; - } - temp = peer; - } - qdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex); - - /* remove ndi self peer last */ - peer = TAILQ_FIRST(&vdev->peer_list); - wma_remove_peer(wma, peer->mac_addr.raw, vdev_id, peer, - false); -} - -/** * wma_register_ndp_cb() - Register NDP callbacks * @pe_ndp_event_handler: PE NDP callback routine pointer * diff --git a/core/wma/src/wma_nan_datapath.h b/core/wma/src/wma_nan_datapath.h index d65c2b100a..36d7d3bd4d 100644 --- a/core/wma/src/wma_nan_datapath.h +++ b/core/wma/src/wma_nan_datapath.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2017, 2019 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -69,8 +69,6 @@ static inline bool wma_is_ndi_active(tp_wma_handle wma_handle) QDF_STATUS wma_handle_ndp_responder_req(tp_wma_handle wma_handle, struct ndp_responder_req *req_params); -void wma_delete_all_nan_remote_peers(tp_wma_handle wma, - uint32_t vdev_id); void wma_ndp_register_all_event_handlers(tp_wma_handle wma_handle); void wma_ndp_unregister_all_event_handlers(tp_wma_handle wma_handle); @@ -95,10 +93,6 @@ static inline void wma_add_bss_ndi_mode(tp_wma_handle wma, tpAddBssParams add_bss) { } -static inline void wma_delete_all_nan_remote_peers(tp_wma_handle wma, - uint32_t vdev_id) -{ -} static inline void wma_ndp_register_all_event_handlers( tp_wma_handle wma_handle) {} static inline void wma_ndp_unregister_all_event_handlers( |