diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 8d1bf4d6deed..7071835e93e1 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -2061,6 +2061,11 @@ static void dp_ast_aging_timer_fn(void *soc_hdl) soc->wds_ast_aging_timer_cnt = 0; 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); for (i = 0; i < MAX_PDEV_CNT && soc->pdev_list[i]; i++) { @@ -2114,6 +2119,7 @@ static void dp_ast_aging_timer_fn(void *soc_hdl) } 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, @@ -2652,8 +2658,6 @@ static int dp_soc_cmn_setup(struct dp_soc *soc) goto fail1; } - qdf_spinlock_create(&soc->ast_lock); - dp_soc_wds_attach(soc); /* Reset the cpu ring map if radio is NSS offloaded */ if (wlan_cfg_get_dp_soc_nss_cfg(soc_cfg_ctx)) { @@ -3668,6 +3672,8 @@ static void dp_soc_deinit(void *txrx_soc) dp_srng_deinit(soc, &soc->reo_cmd_ring, REO_CMD, 0); dp_srng_deinit(soc, &soc->reo_status_ring, REO_STATUS, 0); + dp_soc_wds_detach(soc); + qdf_spinlock_destroy(&soc->peer_ref_mutex); qdf_spinlock_destroy(&soc->htt_stats.lock); @@ -3679,7 +3685,6 @@ static void dp_soc_deinit(void *txrx_soc) qdf_spinlock_destroy(&soc->rx.reo_cmd_lock); dp_reo_desc_freelist_destroy(soc); - dp_soc_wds_detach(soc); qdf_spinlock_destroy(&soc->ast_lock); dp_soc_mem_reset(soc); @@ -9437,6 +9442,8 @@ void *dp_soc_init(void *dpsoc, HTC_HANDLE htc_handle, void *hif_handle) } qdf_spinlock_create(&soc->peer_ref_mutex); + qdf_spinlock_create(&soc->ast_lock); + dp_soc_wds_attach(soc); qdf_spinlock_create(&soc->reo_desc_freelist_lock); qdf_list_create(&soc->reo_desc_freelist, REO_DESC_FREELIST_SIZE);