From 8a4c03a86963af7c2591b34137fffafe8e01e091 Mon Sep 17 00:00:00 2001 From: "Pamidipati, Vijay" Date: Sat, 8 Dec 2018 12:52:38 +0530 Subject: [PATCH] qcacmn: protect peer-list access in AST aging timer Add missing lock to protect peer list access in AST aging timer Change-Id: I3e0f7c0bd0e81398dd927bb4f51627a46c5eae19 --- dp/wifi3.0/dp_main.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) 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);