Эх сурвалжийг харах

qcacmn: protect peer-list access in AST aging timer

Add missing lock to protect peer list access in AST
aging timer

Change-Id: I3e0f7c0bd0e81398dd927bb4f51627a46c5eae19
Pamidipati, Vijay 6 жил өмнө
parent
commit
8a4c03a869
1 өөрчлөгдсөн 10 нэмэгдсэн , 3 устгасан
  1. 10 3
      dp/wifi3.0/dp_main.c

+ 10 - 3
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);