From 3968e9abd7238d6209b0b1939583f5b4b4f1a0fb Mon Sep 17 00:00:00 2001 From: Debasis Das Date: Tue, 14 Mar 2017 12:24:12 +0530 Subject: [PATCH] qcacmn: Increment peer ref count for mgmt Tx frame The peer ref count needs to be incremented in the mgmt_txrx tx_frame API.The decrement happens in the tx_completion API. Change-Id: I604150ce4d238ec84e24f2b8ba807d929860438e CR's Fixed:2019110 --- .../mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c | 9 ++++----- .../dispatcher/src/wlan_mgmt_txrx_utils_api.c | 11 ++++++++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c b/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c index 2db21ef9e467..8e1c8aa285d4 100644 --- a/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c +++ b/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c @@ -990,12 +990,11 @@ QDF_STATUS tgt_mgmt_txrx_tx_completion_handler( ota_comp_cb(cb_context, nbuf, status, tx_compl_params); no_registered_cb: - /** - * decremneting the peer ref count that has been incremented while - * passing peer in wlan_mgmt_txrx_mgmt_frame_tx or - * wlan_mgmt_txrx_beacon_frame_tx APIs. + /* + * decrementing the peer ref count that was incremented while + * accessing peer in wlan_mgmt_txrx_mgmt_frame_tx */ - wlan_objmgr_peer_release_ref(mgmt_desc->peer, WLAN_MGMT_NB_ID); + wlan_objmgr_peer_release_ref(mgmt_desc->peer, WLAN_MGMT_SB_ID); wlan_mgmt_txrx_desc_put(mgmt_txrx_ctx, desc_id); return QDF_STATUS_SUCCESS; } diff --git a/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_utils_api.c b/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_utils_api.c index ead2c807c1c2..35733c901851 100644 --- a/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_utils_api.c +++ b/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_utils_api.c @@ -224,9 +224,12 @@ QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer, return QDF_STATUS_E_NULL_VALUE; } + wlan_objmgr_peer_get_ref(peer, WLAN_MGMT_SB_ID); + vdev = wlan_peer_get_vdev(peer); if (!vdev) { mgmt_txrx_err("vdev unavailable for peer %p", peer); + wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID); return QDF_STATUS_E_NULL_VALUE; } @@ -234,6 +237,7 @@ QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer, if (!psoc) { mgmt_txrx_err("psoc unavailable for peer %p vdev %p", peer, vdev); + wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID); return QDF_STATUS_E_NULL_VALUE; } @@ -243,12 +247,15 @@ QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer, if (!txrx_ctx) { mgmt_txrx_err("No txrx context for peer %p psoc %p", peer, psoc); + wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID); return QDF_STATUS_E_NULL_VALUE; } desc = wlan_mgmt_txrx_desc_get(txrx_ctx); - if (!desc) + if (!desc) { + wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID); return QDF_STATUS_E_RESOURCES; + } desc->nbuf = buf; desc->tx_ota_cmpl_cb = tx_ota_comp_cb; @@ -260,6 +267,7 @@ QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer, if (!psoc->soc_cb.tx_ops.mgmt_txrx_tx_ops.mgmt_tx_send) { mgmt_txrx_err("mgmt txrx tx op to send mgmt frame is NULL for psoc: %p", psoc); + wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID); wlan_mgmt_txrx_desc_put(txrx_ctx, desc->desc_id); return QDF_STATUS_E_FAILURE; } @@ -268,6 +276,7 @@ QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer, vdev, buf, desc->desc_id, mgmt_tx_params)) { mgmt_txrx_err("Mgmt send fail for peer %p psoc %p", peer, psoc); + wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID); wlan_mgmt_txrx_desc_put(txrx_ctx, desc->desc_id); return QDF_STATUS_E_FAILURE; }