qcacld-3.0: Fix QDF_TRACE() in ol_txrx_peer_remove_obj_map_entries

Save peer_ids[] array during cleanup and print it later, after
releasing peer_map_unmap_lock. It avoids usage of multiple QDF_TRACE()
calls inside critical region.

CRs-Fixed: 2027795
Change-Id: I77474f75d0889604e30ba637a04d39fddcaf754c
This commit is contained in:
Deepak Dhamdhere 2017-10-27 01:48:01 -07:00 • committed by snandini
commit 66bb63ddda

View file

@ -669,10 +669,13 @@ void ol_txrx_peer_remove_obj_map_entries(ol_txrx_pdev_handle pdev,
uint16_t peer_id;
int32_t peer_id_ref_cnt;
int32_t num_deleted_maps = 0;
uint16_t save_peer_ids[MAX_NUM_PEER_ID_PER_PEER];
uint16_t save_peer_id_ref_cnt[MAX_NUM_PEER_ID_PER_PEER];
qdf_spin_lock_bh(&pdev->peer_map_unmap_lock);
for (i = 0; i < MAX_NUM_PEER_ID_PER_PEER; i++) {
peer_id = peer->peer_ids[i];
save_peer_ids[i] = HTT_INVALID_PEER;
if (peer_id == HTT_INVALID_PEER ||
pdev->peer_id_to_obj_map[peer_id].peer == NULL) {
/* unused peer_id, or object is already dereferenced */
@ -687,9 +690,9 @@ void ol_txrx_peer_remove_obj_map_entries(ol_txrx_pdev_handle pdev,
peer_id_ref_cnt = qdf_atomic_read(
&pdev->peer_id_to_obj_map[peer_id].
peer_id_ref_cnt);
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_LOW,
FL("peer_id = %d, peer_id_ref_cnt = %d, index = %d"),
peer_id, peer_id_ref_cnt, i);
save_peer_ids[i] = peer_id;
save_peer_id_ref_cnt[i] = peer_id_ref_cnt;
/*
* 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
@ -709,6 +712,15 @@ void ol_txrx_peer_remove_obj_map_entries(ol_txrx_pdev_handle pdev,
}
qdf_spin_unlock_bh(&pdev->peer_map_unmap_lock);
/* Debug print the information after releasing bh spinlock */
for (i = 0; i < MAX_NUM_PEER_ID_PER_PEER; i++) {
if (save_peer_ids[i] == HTT_INVALID_PEER)
continue;
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_LOW,
FL("peer_id = %d, peer_id_ref_cnt = %d, index = %d"),
save_peer_ids[i], save_peer_id_ref_cnt[i], i);
}
while (num_deleted_maps-- > 0)
OL_TXRX_PEER_UNREF_DELETE(peer);
}