qcacld-3.0: Add macros to inc/dec peer->ref_cnt

Currently peer ref_cnt increments and decrements are done by the caller
function. Wrap peer->ref_cnt increment and decrement into MACRO calls so
they can be tracked.

Change-Id: I64d8b85d5898545bbc5a4b81101d1fd306de3fc9
CRs-Fixed: 2005652
This commit is contained in:
Mohit Khanna
2017-02-13 18:54:35 -08:00
committed by snandini
parent 1eabdb6027
commit b04dfcd09a
7 changed files with 86 additions and 98 deletions

View File

@@ -1524,7 +1524,7 @@ int ol_txrx_mgmt_send_frame(
1 /* error */); 1 /* error */);
if (tx_msdu_info->peer) { if (tx_msdu_info->peer) {
/* remove the peer reference added above */ /* remove the peer reference added above */
ol_txrx_peer_unref_delete(tx_msdu_info->peer); OL_TXRX_PEER_UNREF_DELETE(tx_msdu_info->peer);
} }
return 1; /* can't accept the tx mgmt frame */ return 1; /* can't accept the tx mgmt frame */
} }
@@ -1549,7 +1549,7 @@ int ol_txrx_mgmt_send_frame(
ol_tx_enqueue(vdev->pdev, txq, tx_desc, tx_msdu_info); ol_tx_enqueue(vdev->pdev, txq, tx_desc, tx_msdu_info);
if (tx_msdu_info->peer) { if (tx_msdu_info->peer) {
/* remove the peer reference added above */ /* remove the peer reference added above */
ol_txrx_peer_unref_delete(tx_msdu_info->peer); OL_TXRX_PEER_UNREF_DELETE(tx_msdu_info->peer);
} }
ol_tx_sched(vdev->pdev); ol_tx_sched(vdev->pdev);
@@ -1739,7 +1739,7 @@ ol_tx_hl_base(
if (tx_msdu_info.peer) { if (tx_msdu_info.peer) {
/* remove the peer reference /* remove the peer reference
* added above */ * added above */
ol_txrx_peer_unref_delete( OL_TXRX_PEER_UNREF_DELETE(
tx_msdu_info.peer); tx_msdu_info.peer);
} }
goto MSDU_LOOP_BOTTOM; goto MSDU_LOOP_BOTTOM;
@@ -1757,7 +1757,7 @@ ol_tx_hl_base(
ol_tx_desc_frame_free_nonstd(pdev, ol_tx_desc_frame_free_nonstd(pdev,
tx_desc, tx_desc,
1); 1);
ol_txrx_peer_unref_delete( OL_TXRX_PEER_UNREF_DELETE(
tx_msdu_info.peer); tx_msdu_info.peer);
msdu = next; msdu = next;
continue; continue;
@@ -1773,7 +1773,7 @@ ol_tx_hl_base(
ol_tx_desc_frame_free_nonstd( ol_tx_desc_frame_free_nonstd(
pdev, pdev,
tx_desc, 1); tx_desc, 1);
ol_txrx_peer_unref_delete( OL_TXRX_PEER_UNREF_DELETE(
tx_msdu_info.peer); tx_msdu_info.peer);
msdu = next; msdu = next;
continue; continue;
@@ -1822,7 +1822,7 @@ ol_tx_hl_base(
OL_TX_PEER_STATS_UPDATE(tx_msdu_info.peer, OL_TX_PEER_STATS_UPDATE(tx_msdu_info.peer,
msdu); msdu);
/* remove the peer reference added above */ /* remove the peer reference added above */
ol_txrx_peer_unref_delete(tx_msdu_info.peer); OL_TXRX_PEER_UNREF_DELETE(tx_msdu_info.peer);
} }
MSDU_LOOP_BOTTOM: MSDU_LOOP_BOTTOM:
msdu = next; msdu = next;

View File

@@ -357,7 +357,7 @@ struct ol_txrx_peer_t *ol_tx_tdls_peer_find(struct ol_txrx_pdev_t *pdev,
peer = NULL; peer = NULL;
} else { } else {
if (peer) if (peer)
qdf_atomic_inc(&peer->ref_cnt); OL_TXRX_PEER_INC_REF_CNT(peer);
} }
} }
if (!peer) if (!peer)
@@ -582,7 +582,7 @@ ol_tx_classify(
"%s: remove the peer for invalid peer_id %p\n", "%s: remove the peer for invalid peer_id %p\n",
__func__, peer); __func__, peer);
/* remove the peer reference added above */ /* remove the peer reference added above */
ol_txrx_peer_unref_delete(peer); OL_TXRX_PEER_UNREF_DELETE(peer);
tx_msdu_info->peer = NULL; tx_msdu_info->peer = NULL;
} }
return NULL; return NULL;
@@ -605,7 +605,7 @@ ol_tx_classify(
"%s: remove the peer reference %p\n", "%s: remove the peer reference %p\n",
__func__, peer); __func__, peer);
/* remove the peer reference added above */ /* remove the peer reference added above */
ol_txrx_peer_unref_delete(tx_msdu_info->peer); OL_TXRX_PEER_UNREF_DELETE(tx_msdu_info->peer);
/* Making peer NULL in case if multicast non STA mode */ /* Making peer NULL in case if multicast non STA mode */
tx_msdu_info->peer = NULL; tx_msdu_info->peer = NULL;
} }
@@ -688,11 +688,7 @@ ol_tx_classify_mgmt(
if (ol_txrx_peer_find_mac_addr_cmp( if (ol_txrx_peer_find_mac_addr_cmp(
mac_addr, mac_addr,
&peer->mac_addr) != 0) { &peer->mac_addr) != 0) {
rcnt = ol_txrx_peer_unref_delete(peer); rcnt = OL_TXRX_PEER_UNREF_DELETE(peer);
QDF_TRACE(QDF_MODULE_ID_TXRX,
QDF_TRACE_LEVEL_INFO_HIGH,
"%s: peer %p peer->ref_cnt %d",
__func__, peer, rcnt);
peer = NULL; peer = NULL;
} }
} }

View File

@@ -111,13 +111,7 @@ ol_tx_queue_vdev_flush(struct ol_txrx_pdev_t *pdev, struct ol_txrx_vdev_t *vdev)
for (i = 0; i < OL_TX_NUM_TIDS; i++) { for (i = 0; i < OL_TX_NUM_TIDS; i++) {
txq = &peer->txqs[i]; txq = &peer->txqs[i];
if (txq->frms) { if (txq->frms) {
qdf_atomic_inc(&peer->ref_cnt); OL_TXRX_PEER_INC_REF_CNT(peer);
QDF_TRACE(QDF_MODULE_ID_TXRX,
QDF_TRACE_LEVEL_INFO_HIGH,
"%s: peer %p peer->ref_cnt %d",
__func__, peer,
qdf_atomic_read
(&peer->ref_cnt));
peers[peer_count++] = peer; peers[peer_count++] = peer;
break; break;
} }
@@ -135,7 +129,7 @@ ol_tx_queue_vdev_flush(struct ol_txrx_pdev_t *pdev, struct ol_txrx_vdev_t *vdev)
} }
ol_txrx_info( ol_txrx_info(
"%s: Delete Peer %p\n", __func__, peer); "%s: Delete Peer %p\n", __func__, peer);
ol_txrx_peer_unref_delete(peers[i]); OL_TXRX_PEER_UNREF_DELETE(peers[i]);
} }
} while (peer_count >= PEER_ARRAY_COUNT); } while (peer_count >= PEER_ARRAY_COUNT);
} }

View File

@@ -310,10 +310,7 @@ ol_txrx_find_peer_by_addr_and_vdev(struct cdp_pdev *ppdev,
if (!peer) if (!peer)
return NULL; return NULL;
*peer_id = peer->local_id; *peer_id = peer->local_id;
qdf_atomic_dec(&peer->ref_cnt); OL_TXRX_PEER_DEC_REF_CNT(peer);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH,
"%s: peer %p peer->ref_cnt %d", __func__, peer,
qdf_atomic_read(&peer->ref_cnt));
return peer; return peer;
} }
@@ -369,11 +366,8 @@ void *ol_txrx_find_peer_by_addr(struct cdp_pdev *ppdev,
if (!peer) if (!peer)
return NULL; return NULL;
*peer_id = peer->local_id; *peer_id = peer->local_id;
qdf_atomic_dec(&peer->ref_cnt); OL_TXRX_PEER_DEC_REF_CNT(peer);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH, return peer;
"%s: peer %p peer->ref_cnt %d", __func__, peer,
qdf_atomic_read(&peer->ref_cnt));
return (void *)peer;
} }
static uint16_t ol_txrx_local_peer_id(void *ppeer) static uint16_t ol_txrx_local_peer_id(void *ppeer)
@@ -2505,7 +2499,7 @@ ol_txrx_peer_attach(struct cdp_vdev *pvdev, uint8_t *peer_mac_addr)
qdf_atomic_init(&peer->ref_cnt); qdf_atomic_init(&peer->ref_cnt);
/* keep one reference for attach */ /* keep one reference for attach */
qdf_atomic_inc(&peer->ref_cnt); OL_TXRX_PEER_INC_REF_CNT(peer);
/* /*
* Set a flag to indicate peer create is pending in firmware and * Set a flag to indicate peer create is pending in firmware and
@@ -2516,7 +2510,7 @@ ol_txrx_peer_attach(struct cdp_vdev *pvdev, uint8_t *peer_mac_addr)
*/ */
qdf_atomic_init(&peer->fw_create_pending); qdf_atomic_init(&peer->fw_create_pending);
qdf_atomic_set(&peer->fw_create_pending, 1); qdf_atomic_set(&peer->fw_create_pending, 1);
qdf_atomic_inc(&peer->ref_cnt); OL_TXRX_PEER_INC_REF_CNT(peer);
peer->valid = 1; peer->valid = 1;
qdf_timer_init(pdev->osdev, &peer->peer_unmap_timer, qdf_timer_init(pdev->osdev, &peer->peer_unmap_timer,
@@ -2943,11 +2937,7 @@ QDF_STATUS ol_txrx_peer_state_update(struct cdp_pdev *ppdev,
"%s: no state change, returns directly\n", "%s: no state change, returns directly\n",
__func__); __func__);
#endif #endif
peer_ref_cnt = ol_txrx_peer_unref_delete(peer); peer_ref_cnt = OL_TXRX_PEER_UNREF_DELETE(peer);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH,
"%s: peer %p peer->ref_cnt %d",
__func__, peer, peer_ref_cnt);
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
@@ -2977,15 +2967,12 @@ QDF_STATUS ol_txrx_peer_state_update(struct cdp_pdev *ppdev,
ol_txrx_peer_tid_unpause(peer, tid); ol_txrx_peer_tid_unpause(peer, tid);
} }
} }
peer_ref_cnt = ol_txrx_peer_unref_delete(peer); peer_ref_cnt = OL_TXRX_PEER_UNREF_DELETE(peer);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH,
"%s: peer %p peer->ref_cnt %d",
__func__, peer, peer_ref_cnt);
/* /*
* after ol_txrx_peer_unref_delete, peer object cannot be accessed * after OL_TXRX_PEER_UNREF_DELETE, peer object cannot be accessed
* if the return code was 0 * if the return code was 0
*/ */
if (peer_ref_cnt) if (peer_ref_cnt > 0)
/* /*
* Set the state after the Pause to avoid the race condiction * Set the state after the Pause to avoid the race condiction
* with ADDBA check in tx path * with ADDBA check in tx path
@@ -3090,10 +3077,7 @@ ol_txrx_peer_update(ol_txrx_vdev_handle vdev,
break; break;
} }
} /* switch */ } /* switch */
peer_ref_cnt = ol_txrx_peer_unref_delete(peer); peer_ref_cnt = OL_TXRX_PEER_UNREF_DELETE(peer);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH,
"%s: peer %p peer->ref_cnt %d",
__func__, peer, peer_ref_cnt);
} }
uint8_t uint8_t
@@ -3119,7 +3103,9 @@ ol_txrx_peer_qoscapable_get(struct ol_txrx_pdev_t *txrx_pdev, uint16_t peer_id)
return 0; return 0;
} }
int ol_txrx_peer_unref_delete(ol_txrx_peer_handle peer) int ol_txrx_peer_unref_delete(ol_txrx_peer_handle peer,
const char *fname,
int line)
{ {
int rc; int rc;
struct ol_txrx_vdev_t *vdev; struct ol_txrx_vdev_t *vdev;
@@ -3285,8 +3271,8 @@ int ol_txrx_peer_unref_delete(ol_txrx_peer_handle peer)
} else { } else {
qdf_spin_unlock_bh(&pdev->peer_ref_mutex); qdf_spin_unlock_bh(&pdev->peer_ref_mutex);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_DEBUG, QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_DEBUG,
"%s: peer %p peer->ref_cnt = %d", "ref delete(%s): peer %p peer->ref_cnt = %d",
__func__, peer, rc); fname, peer, rc);
} }
return rc; return rc;
@@ -3449,7 +3435,7 @@ static void ol_txrx_peer_detach(void *ppeer)
* PEER_UNMAP message arrives to remove the other * PEER_UNMAP message arrives to remove the other
* reference, added by the PEER_MAP message. * reference, added by the PEER_MAP message.
*/ */
ol_txrx_peer_unref_delete(peer); OL_TXRX_PEER_UNREF_DELETE(peer);
} }
/** /**
@@ -3477,7 +3463,7 @@ static void ol_txrx_peer_detach_force_delete(void *ppeer)
qdf_spin_unlock_bh(&pdev->peer_map_unmap_lock); qdf_spin_unlock_bh(&pdev->peer_map_unmap_lock);
/* /*
* Set ref_cnt = 1 so that ol_txrx_peer_unref_delete() called by * Set ref_cnt = 1 so that OL_TXRX_PEER_UNREF_DELETE() called by
* ol_txrx_peer_detach() will actually delete this peer entry properly. * ol_txrx_peer_detach() will actually delete this peer entry properly.
*/ */
qdf_spin_lock_bh(&pdev->peer_ref_mutex); qdf_spin_lock_bh(&pdev->peer_ref_mutex);
@@ -3497,7 +3483,7 @@ ol_txrx_peer_find_by_addr(struct ol_txrx_pdev_t *pdev, uint8_t *peer_mac_addr)
ol_txrx_info_high( ol_txrx_info_high(
"%s: Delete extra reference %p", __func__, peer); "%s: Delete extra reference %p", __func__, peer);
/* release the extra reference */ /* release the extra reference */
ol_txrx_peer_unref_delete(peer); OL_TXRX_PEER_UNREF_DELETE(peer);
} }
return peer; return peer;
} }

View File

@@ -39,8 +39,13 @@
* only for forwarding path. * only for forwarding path.
*/ */
#define OL_TX_NON_FWD_RESERVE 100 #define OL_TX_NON_FWD_RESERVE 100
#define OL_TXRX_PEER_UNREF_DELETE(peer) \
ol_txrx_peer_unref_delete(peer, __func__, __LINE__);
int ol_txrx_peer_unref_delete(ol_txrx_peer_handle peer,
const char *fname,
int line);
int ol_txrx_peer_unref_delete(struct ol_txrx_peer_t *peer);
/** /**
* ol_tx_desc_pool_size_hl() - allocate tx descriptor pool size for HL systems * ol_tx_desc_pool_size_hl() - allocate tx descriptor pool size for HL systems

View File

@@ -69,6 +69,26 @@ static int ol_txrx_log2_ceil(unsigned int value)
return log2; return log2;
} }
/**
* __ol_txrx_peer_change_ref_cnt() - change peer ref count by the input value
* @peer: pointer to peer structure
* @change: value to add to the peer->ref_cnt, can be negative
* @fname: name of the calling function
* @line: line number of the calling function
*
* Return: the QDF_STATUS return from hdd_execute_config_command
*/
void __ol_txrx_peer_change_ref_cnt(struct ol_txrx_peer_t *peer,
int change,
const char *fname,
int line)
{
qdf_atomic_add(change, &peer->ref_cnt);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH,
"[%s][%d]: peer %p peer->ref_cnt changed by(%d) to %d",
fname, line, peer, change, qdf_atomic_read(&peer->ref_cnt));
}
/*=== function definitions for peer MAC addr --> peer object hash table =====*/ /*=== function definitions for peer MAC addr --> peer object hash table =====*/
/* /*
@@ -178,15 +198,9 @@ struct ol_txrx_peer_t *ol_txrx_peer_vdev_find_hash(struct ol_txrx_pdev_t *pdev,
if (ol_txrx_peer_find_mac_addr_cmp(mac_addr, &peer->mac_addr) == if (ol_txrx_peer_find_mac_addr_cmp(mac_addr, &peer->mac_addr) ==
0 && (check_valid == 0 || peer->valid) 0 && (check_valid == 0 || peer->valid)
&& peer->vdev == vdev) { && peer->vdev == vdev) {
/*
* found it - increment the ref count before releasing /* found it */
* the lock OL_TXRX_PEER_INC_REF_CNT(peer);
*/
qdf_atomic_inc(&peer->ref_cnt);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH,
"%s: peer %p peer->ref_cnt %d",
__func__, peer,
qdf_atomic_read(&peer->ref_cnt));
qdf_spin_unlock_bh(&pdev->peer_ref_mutex); qdf_spin_unlock_bh(&pdev->peer_ref_mutex);
return peer; return peer;
} }
@@ -216,16 +230,9 @@ struct ol_txrx_peer_t *ol_txrx_peer_find_hash_find(struct ol_txrx_pdev_t *pdev,
TAILQ_FOREACH(peer, &pdev->peer_hash.bins[index], hash_list_elem) { TAILQ_FOREACH(peer, &pdev->peer_hash.bins[index], hash_list_elem) {
if (ol_txrx_peer_find_mac_addr_cmp(mac_addr, &peer->mac_addr) == if (ol_txrx_peer_find_mac_addr_cmp(mac_addr, &peer->mac_addr) ==
0 && (check_valid == 0 || peer->valid)) { 0 && (check_valid == 0 || peer->valid)) {
/* /* found it */
* found it - increment the ref count before OL_TXRX_PEER_INC_REF_CNT(peer);
* releasing the lock
*/
qdf_atomic_inc(&peer->ref_cnt);
qdf_spin_unlock_bh(&pdev->peer_ref_mutex); qdf_spin_unlock_bh(&pdev->peer_ref_mutex);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH,
"%s: peer %p peer->ref_cnt %d",
__func__, peer,
qdf_atomic_read(&peer->ref_cnt));
return peer; return peer;
} }
} }
@@ -286,16 +293,11 @@ void ol_txrx_peer_find_hash_erase(struct ol_txrx_pdev_t *pdev)
/* /*
* Artificially adjust the peer's ref count to * Artificially adjust the peer's ref count to
* 1, so it will get deleted by * 1, so it will get deleted by
* ol_txrx_peer_unref_delete. * OL_TXRX_PEER_UNREF_DELETE.
*/ */
qdf_atomic_init(&peer->ref_cnt); /* set to 0 */ qdf_atomic_init(&peer->ref_cnt); /* set to 0 */
qdf_atomic_inc(&peer->ref_cnt); /* incr to 1 */ OL_TXRX_PEER_INC_REF_CNT(peer); /* incr to 1 */
QDF_TRACE(QDF_MODULE_ID_TXRX, OL_TXRX_PEER_UNREF_DELETE(peer);
QDF_TRACE_LEVEL_INFO_HIGH,
"%s: Delete Peer %p ref_cnt %d\n",
__func__, peer,
qdf_atomic_read(&peer->ref_cnt));
ol_txrx_peer_unref_delete(peer);
} }
} }
} }
@@ -345,6 +347,8 @@ static inline void ol_txrx_peer_find_add_id(struct ol_txrx_pdev_t *pdev,
struct ol_txrx_peer_t *peer; struct ol_txrx_peer_t *peer;
int status; int status;
int i; int i;
uint32_t peer_id_ref_cnt;
uint32_t peer_ref_cnt;
/* check if there's already a peer object with this MAC address */ /* check if there's already a peer object with this MAC address */
peer = peer =
@@ -395,18 +399,17 @@ static inline void ol_txrx_peer_find_add_id(struct ol_txrx_pdev_t *pdev,
* was sent to firmware. * was sent to firmware.
*/ */
qdf_atomic_set(&peer->fw_create_pending, 0); qdf_atomic_set(&peer->fw_create_pending, 0);
ol_txrx_peer_unref_delete(peer); OL_TXRX_PEER_UNREF_DELETE(peer);
} }
qdf_spin_unlock(&pdev->peer_map_unmap_lock); qdf_spin_unlock(&pdev->peer_map_unmap_lock);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, peer_id_ref_cnt = qdf_atomic_read(&pdev->
peer_id_to_obj_map[peer_id].peer_id_ref_cnt);
peer_ref_cnt = qdf_atomic_read(&peer->ref_cnt);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH,
"%s: peer %p ID %d peer_id[%d] peer_id_ref_cnt %d peer->ref_cnt %d", "%s: peer %p ID %d peer_id[%d] peer_id_ref_cnt %d peer->ref_cnt %d",
__func__, peer, peer_id, i, __func__, peer, peer_id, i, peer_id_ref_cnt, peer_ref_cnt);
qdf_atomic_read(&pdev->
peer_id_to_obj_map[peer_id].
peer_id_ref_cnt),
qdf_atomic_read(&peer->ref_cnt));
if (status) { if (status) {
/* TBDXXX: assert for now */ /* TBDXXX: assert for now */
@@ -591,7 +594,7 @@ void ol_rx_peer_unmap_handler(ol_txrx_pdev_handle pdev, uint16_t peer_id)
* Remove a reference to the peer. * Remove a reference to the peer.
* If there are no more references, delete the peer object. * If there are no more references, delete the peer object.
*/ */
ol_txrx_peer_unref_delete(peer); OL_TXRX_PEER_UNREF_DELETE(peer);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_DEBUG, QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_DEBUG,
"%s: Remove the ID %d reference to peer %p peer_id_ref_cnt %d", "%s: Remove the ID %d reference to peer %p peer_id_ref_cnt %d",
@@ -633,7 +636,7 @@ void ol_txrx_peer_remove_obj_map_entries(ol_txrx_pdev_handle pdev,
peer_id, peer_id_ref_cnt, i); peer_id, peer_id_ref_cnt, i);
/* /*
* Transfer peer_id_ref_cnt into del_peer_id_ref_cnt so that * Transfer peer_id_ref_cnt into del_peer_id_ref_cnt so that
* ol_txrx_peer_unref_delete will decrement del_peer_id_ref_cnt * OL_TXRX_PEER_UNREF_DELETE will decrement del_peer_id_ref_cnt
* and any map events will increment peer_id_ref_cnt. Otherwise * and any map events will increment peer_id_ref_cnt. Otherwise
* accounting will be messed up. * accounting will be messed up.
* *
@@ -660,13 +663,8 @@ struct ol_txrx_peer_t *ol_txrx_assoc_peer_find(struct ol_txrx_vdev_t *vdev)
*/ */
if (vdev->last_real_peer if (vdev->last_real_peer
&& vdev->last_real_peer->peer_ids[0] != HTT_INVALID_PEER_ID) { && vdev->last_real_peer->peer_ids[0] != HTT_INVALID_PEER_ID) {
qdf_atomic_inc(&vdev->last_real_peer->ref_cnt); OL_TXRX_PEER_INC_REF_CNT(vdev->last_real_peer);
peer = vdev->last_real_peer; peer = vdev->last_real_peer;
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH,
"%s: peer %p peer->ref_cnt %d",
__func__, peer,
qdf_atomic_read
(&peer->ref_cnt));
} else { } else {
peer = NULL; peer = NULL;
} }

View File

@@ -36,6 +36,17 @@
#include <cdp_txrx_cmn.h> /* ol_txrx_pdev_t, etc. */ #include <cdp_txrx_cmn.h> /* ol_txrx_pdev_t, etc. */
#include <ol_txrx_internal.h> /* TXRX_ASSERT */ #include <ol_txrx_internal.h> /* TXRX_ASSERT */
#define OL_TXRX_PEER_INC_REF_CNT(peer) \
__ol_txrx_peer_change_ref_cnt(peer, 1, __func__, __LINE__);
#define OL_TXRX_PEER_DEC_REF_CNT(peer) \
__ol_txrx_peer_change_ref_cnt(peer, (-1), __func__, __LINE__);
void __ol_txrx_peer_change_ref_cnt(struct ol_txrx_peer_t *peer,
int change,
const char *fname,
int line);
int ol_txrx_peer_find_attach(struct ol_txrx_pdev_t *pdev); int ol_txrx_peer_find_attach(struct ol_txrx_pdev_t *pdev);
void ol_txrx_peer_find_detach(struct ol_txrx_pdev_t *pdev); void ol_txrx_peer_find_detach(struct ol_txrx_pdev_t *pdev);
@@ -107,10 +118,8 @@ ol_txrx_peer_find_hash_remove(struct ol_txrx_pdev_t *pdev,
void ol_txrx_peer_find_hash_erase(struct ol_txrx_pdev_t *pdev); void ol_txrx_peer_find_hash_erase(struct ol_txrx_pdev_t *pdev);
struct ol_txrx_peer_t *ol_txrx_assoc_peer_find(struct ol_txrx_vdev_t *vdev); struct ol_txrx_peer_t *ol_txrx_assoc_peer_find(struct ol_txrx_vdev_t *vdev);
void ol_txrx_peer_remove_obj_map_entries(ol_txrx_pdev_handle pdev, void ol_txrx_peer_remove_obj_map_entries(ol_txrx_pdev_handle pdev,
struct ol_txrx_peer_t *peer); struct ol_txrx_peer_t *peer);
#if defined(TXRX_DEBUG_LEVEL) && TXRX_DEBUG_LEVEL > 5 #if defined(TXRX_DEBUG_LEVEL) && TXRX_DEBUG_LEVEL > 5
void ol_txrx_peer_find_display(ol_txrx_pdev_handle pdev, int indent); void ol_txrx_peer_find_display(ol_txrx_pdev_handle pdev, int indent);
#else #else