浏览代码

qcacmn: Adding validation to check monitor rings

There is a possible race condition that target_start can be
called during load unload leading to htt_srng_setup being
called before monitor srngs are initialized. This check will
prevent the srng_setup_call from soc_start. The rings will
subsequently be initialized when monitor modle is loaded.

Change-Id: Ie697b45425e38e6d709b7466bb495a20bef4f820
CRs-Fixed: 3125255
Arunpandi K 3 年之前
父节点
当前提交
ec3bfd9dc9
共有 2 个文件被更改,包括 9 次插入0 次删除
  1. 3 0
      dp/wifi3.0/monitor/1.0/dp_mon_1.0.c
  2. 6 0
      dp/wifi3.0/monitor/2.0/dp_mon_2.0.c

+ 3 - 0
dp/wifi3.0/monitor/1.0/dp_mon_1.0.c

@@ -744,6 +744,9 @@ QDF_STATUS dp_mon_htt_srng_setup_1_0(struct dp_soc *soc,
 			return status;
 	}
 
+	if (!soc->rxdma_mon_status_ring[mac_id].hal_srng)
+		return QDF_STATUS_SUCCESS;
+
 	status = htt_srng_setup(soc->htt_handle, mac_for_pdev,
 				soc->rxdma_mon_status_ring[mac_id]
 				.hal_srng,

+ 6 - 0
dp/wifi3.0/monitor/2.0/dp_mon_2.0.c

@@ -554,6 +554,9 @@ QDF_STATUS dp_mon_pdev_htt_srng_setup_2_0(struct dp_soc *soc,
 	struct dp_mon_soc_be *mon_soc_be = dp_get_be_mon_soc_from_dp_mon_soc(mon_soc);
 	QDF_STATUS status;
 
+	if (!soc->rxdma_mon_dst_ring[mac_id].hal_srng)
+		return QDF_STATUS_SUCCESS;
+
 	status = htt_srng_setup(soc->htt_handle, mac_for_pdev,
 				soc->rxdma_mon_dst_ring[mac_id].hal_srng,
 				RXDMA_MONITOR_DST);
@@ -563,6 +566,9 @@ QDF_STATUS dp_mon_pdev_htt_srng_setup_2_0(struct dp_soc *soc,
 		return status;
 	}
 
+	if (!mon_soc_be->tx_mon_dst_ring[mac_id].hal_srng)
+		return QDF_STATUS_SUCCESS;
+
 	status = htt_srng_setup(soc->htt_handle, mac_for_pdev,
 				mon_soc_be->tx_mon_dst_ring[mac_id].hal_srng,
 				TX_MONITOR_DST);