Prechádzať zdrojové kódy

qcacmn: Fix for qdf spinlock destroyed twice or never created

Fix for qdf_spinlock_destroy being destroyed twice or never created.

Change-Id: Ib45843ecd1c859be112fb75d218aa3d01e6ccdcf
CRs-Fixed: 3471529
Naveen S 2 rokov pred
rodič
commit
450a3d2fa4
2 zmenil súbory, kde vykonal 27 pridanie a 22 odobranie
  1. 11 8
      dp/wifi3.0/dp_rx_desc.c
  2. 16 14
      dp/wifi3.0/dp_tx_desc.c

+ 11 - 8
dp/wifi3.0/dp_rx_desc.c

@@ -452,18 +452,21 @@ void dp_rx_desc_pool_deinit(struct dp_soc *soc,
 			    struct rx_desc_pool *rx_desc_pool,
 			    uint32_t pool_id)
 {
-	qdf_spin_lock_bh(&rx_desc_pool->lock);
+	if (rx_desc_pool->pool_size) {
+		qdf_spin_lock_bh(&rx_desc_pool->lock);
 
-	rx_desc_pool->freelist = NULL;
-	rx_desc_pool->pool_size = 0;
+		rx_desc_pool->freelist = NULL;
+		rx_desc_pool->pool_size = 0;
 
-	/* Deinitialize rx mon dest frag flag */
-	rx_desc_pool->rx_mon_dest_frag_enable = false;
+		/* Deinitialize rx mon dest frag flag */
+		rx_desc_pool->rx_mon_dest_frag_enable = false;
 
-	soc->arch_ops.dp_rx_desc_pool_deinit(soc, rx_desc_pool, pool_id);
+		soc->arch_ops.dp_rx_desc_pool_deinit(soc, rx_desc_pool,
+						     pool_id);
 
-	qdf_spin_unlock_bh(&rx_desc_pool->lock);
-	qdf_spinlock_destroy(&rx_desc_pool->lock);
+		qdf_spin_unlock_bh(&rx_desc_pool->lock);
+		qdf_spinlock_destroy(&rx_desc_pool->lock);
+	}
 }
 
 qdf_export_symbol(dp_rx_desc_pool_deinit);

+ 16 - 14
dp/wifi3.0/dp_tx_desc.c

@@ -530,13 +530,14 @@ void dp_tx_tso_desc_pool_deinit_by_id(struct dp_soc *soc, uint8_t pool_id)
 
 	tso_desc_pool = &soc->tx_tso_desc[pool_id];
 
-	qdf_spin_lock_bh(&tso_desc_pool->lock);
-	tso_desc_pool->freelist = NULL;
-	tso_desc_pool->num_free = 0;
-	tso_desc_pool->pool_size = 0;
-	qdf_spin_unlock_bh(&tso_desc_pool->lock);
-
-	qdf_spinlock_destroy(&tso_desc_pool->lock);
+	if (tso_desc_pool->pool_size) {
+		qdf_spin_lock_bh(&tso_desc_pool->lock);
+		tso_desc_pool->freelist = NULL;
+		tso_desc_pool->num_free = 0;
+		tso_desc_pool->pool_size = 0;
+		qdf_spin_unlock_bh(&tso_desc_pool->lock);
+		qdf_spinlock_destroy(&tso_desc_pool->lock);
+	}
 }
 
 void dp_tx_tso_desc_pool_deinit(struct dp_soc *soc, uint8_t num_pool)
@@ -666,13 +667,14 @@ void dp_tx_tso_num_seg_pool_deinit_by_id(struct dp_soc *soc, uint8_t pool_id)
 
 	tso_num_seg_pool = &soc->tx_tso_num_seg[pool_id];
 
-	qdf_spin_lock_bh(&tso_num_seg_pool->lock);
-	tso_num_seg_pool->freelist = NULL;
-	tso_num_seg_pool->num_free = 0;
-	tso_num_seg_pool->num_seg_pool_size = 0;
-	qdf_spin_unlock_bh(&tso_num_seg_pool->lock);
-
-	qdf_spinlock_destroy(&tso_num_seg_pool->lock);
+	if (tso_num_seg_pool->num_seg_pool_size) {
+		qdf_spin_lock_bh(&tso_num_seg_pool->lock);
+		tso_num_seg_pool->freelist = NULL;
+		tso_num_seg_pool->num_free = 0;
+		tso_num_seg_pool->num_seg_pool_size = 0;
+		qdf_spin_unlock_bh(&tso_num_seg_pool->lock);
+		qdf_spinlock_destroy(&tso_num_seg_pool->lock);
+	}
 }
 
 void dp_tx_tso_num_seg_pool_deinit(struct dp_soc *soc, uint8_t num_pool)