From ccf15df948367d9654355b782364ae54347e240d Mon Sep 17 00:00:00 2001 From: Chaithanya Garrepalli Date: Thu, 6 Aug 2020 10:42:59 +0530 Subject: [PATCH] qca-wifi: use peer_list_lock instead of peer_ref_mutex Iterate vdev->peer_list under vdev->peer_list_lock Change-Id: If69016109cf47681a9616adde59c5d73aaba5217 --- dp/wifi3.0/dp_tx_capture.c | 16 +++++++--------- dp/wifi3.0/dp_txrx_wds.c | 6 ++---- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/dp/wifi3.0/dp_tx_capture.c b/dp/wifi3.0/dp_tx_capture.c index e851b9b7fe..f970c9a92e 100644 --- a/dp/wifi3.0/dp_tx_capture.c +++ b/dp/wifi3.0/dp_tx_capture.c @@ -240,15 +240,15 @@ struct dp_peer *dp_tx_cap_peer_find_by_id(struct dp_soc *soc, { struct dp_peer *peer; - qdf_spin_lock_bh(&soc->peer_ref_mutex); + qdf_spin_lock_bh(&soc->peer_map_lock); peer = __dp_peer_find_by_id(soc, peer_id); if (!peer || (peer && peer->delete_in_progress)) { - qdf_spin_unlock_bh(&soc->peer_ref_mutex); + qdf_spin_unlock_bh(&soc->peer_map_lock); return NULL; } qdf_atomic_inc(&peer->ref_cnt); - qdf_spin_unlock_bh(&soc->peer_ref_mutex); + qdf_spin_unlock_bh(&soc->peer_map_lock); return peer; } @@ -290,7 +290,6 @@ void dp_tx_capture_htt_frame_counter(struct dp_pdev *pdev, void dp_print_tid_qlen_per_peer(void *pdev_hdl, uint8_t consolidated) { struct dp_pdev *pdev = (struct dp_pdev *)pdev_hdl; - struct dp_soc *soc = pdev->soc; struct dp_vdev *vdev = NULL; struct dp_peer *peer = NULL; uint64_t c_defer_msdu_len = 0; @@ -298,10 +297,10 @@ void dp_print_tid_qlen_per_peer(void *pdev_hdl, uint8_t consolidated) uint64_t c_pending_q_len = 0; DP_PRINT_STATS("pending peer msdu and ppdu:"); - qdf_spin_lock_bh(&soc->peer_ref_mutex); qdf_spin_lock_bh(&pdev->vdev_list_lock); DP_PDEV_ITERATE_VDEV_LIST(pdev, vdev) { + qdf_spin_lock_bh(&vdev->peer_list_lock); DP_VDEV_ITERATE_PEER_LIST(vdev, peer) { int tid; struct dp_tx_tid *tx_tid; @@ -335,6 +334,7 @@ void dp_print_tid_qlen_per_peer(void *pdev_hdl, uint8_t consolidated) if (!consolidated) dp_tx_capture_print_stats(peer); } + qdf_spin_unlock_bh(&vdev->peer_list_lock); } DP_PRINT_STATS("consolidated: msdu_comp_q[%d] defer_msdu_q[%d] pending_ppdu_q[%d]", @@ -342,7 +342,6 @@ void dp_print_tid_qlen_per_peer(void *pdev_hdl, uint8_t consolidated) c_pending_q_len); qdf_spin_unlock_bh(&pdev->vdev_list_lock); - qdf_spin_unlock_bh(&soc->peer_ref_mutex); } static void @@ -1559,21 +1558,20 @@ static void dp_soc_set_txrx_ring_map_single(struct dp_soc *soc) static void dp_iterate_free_peer_msdu_q(void *pdev_hdl) { struct dp_pdev *pdev = (struct dp_pdev *)pdev_hdl; - struct dp_soc *soc = pdev->soc; struct dp_vdev *vdev = NULL; struct dp_peer *peer = NULL; - qdf_spin_lock_bh(&soc->peer_ref_mutex); qdf_spin_lock_bh(&pdev->vdev_list_lock); DP_PDEV_ITERATE_VDEV_LIST(pdev, vdev) { + qdf_spin_lock_bh(&vdev->peer_list_lock); DP_VDEV_ITERATE_PEER_LIST(vdev, peer) { /* set peer tx cap enabled to 0, when feature disable */ peer->tx_cap_enabled = 0; dp_peer_tid_queue_cleanup(peer); } + qdf_spin_unlock_bh(&vdev->peer_list_lock); } qdf_spin_unlock_bh(&pdev->vdev_list_lock); - qdf_spin_unlock_bh(&soc->peer_ref_mutex); } /* diff --git a/dp/wifi3.0/dp_txrx_wds.c b/dp/wifi3.0/dp_txrx_wds.c index a7b4ec602e..587b7a4030 100644 --- a/dp/wifi3.0/dp_txrx_wds.c +++ b/dp/wifi3.0/dp_txrx_wds.c @@ -55,9 +55,6 @@ static void dp_ast_aging_timer_fn(void *soc_hdl) check_wds_ase = true; } - /* Peer list access lock */ - qdf_spin_lock_bh(&soc->peer_ref_mutex); - /* AST list access lock */ qdf_spin_lock_bh(&soc->ast_lock); @@ -65,6 +62,7 @@ static void dp_ast_aging_timer_fn(void *soc_hdl) pdev = soc->pdev_list[i]; qdf_spin_lock_bh(&pdev->vdev_list_lock); DP_PDEV_ITERATE_VDEV_LIST(pdev, vdev) { + qdf_spin_lock_bh(&vdev->peer_list_lock); DP_VDEV_ITERATE_PEER_LIST(vdev, peer) { DP_PEER_ITERATE_ASE_LIST(peer, ase, temp_ase) { /* @@ -107,12 +105,12 @@ static void dp_ast_aging_timer_fn(void *soc_hdl) } } } + qdf_spin_unlock_bh(&vdev->peer_list_lock); } qdf_spin_unlock_bh(&pdev->vdev_list_lock); } qdf_spin_unlock_bh(&soc->ast_lock); - qdf_spin_unlock_bh(&soc->peer_ref_mutex); if (qdf_atomic_read(&soc->cmn_init_done)) qdf_timer_mod(&soc->ast_aging_timer,