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

qcacmn: Deregister stats handler before monitor pdev deinit

Module unload is getting trigered in between
Vap restart due to channel switch
while waiting in monitor module unload for 500ms VAPs are coming up.
And after wait, during monitor pdev deinit
HOST start receiving stats indication.
Monitor pdev is getting dettached while processing stats indication.

Move register/derester of stats handler to intr ops.

Change-Id: I821c144f54bfe78c567039ab57fcf1eac7cb4f46
CRs-Fixed: 3192980
aloksing 3 жил өмнө
parent
commit
ddad8e0543

+ 16 - 4
dp/wifi3.0/monitor/1.0/dp_mon_1.0.c

@@ -992,11 +992,27 @@ dp_rx_mon_process_1_0(struct dp_soc *soc, struct dp_intr *int_ctx,
 	return dp_rx_mon_status_process(soc, int_ctx, mac_id, quota);
 }
 
+#if defined(WDI_EVENT_ENABLE) &&\
+	(defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG))
+static inline
+void dp_mon_ppdu_stats_handler_register(struct dp_mon_soc *mon_soc)
+{
+	mon_soc->mon_ops->mon_ppdu_stats_ind_handler =
+					dp_ppdu_stats_ind_handler;
+}
+#else
+static inline
+void dp_mon_ppdu_stats_handler_register(struct dp_mon_soc *mon_soc)
+{
+}
+#endif
+
 static void dp_mon_register_intr_ops_1_0(struct dp_soc *soc)
 {
 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
 
 	mon_soc->mon_rx_process = dp_rx_mon_process_1_0;
+	dp_mon_ppdu_stats_handler_register(mon_soc);
 }
 #endif
 
@@ -1049,10 +1065,6 @@ dp_mon_register_feature_ops_1_0(struct dp_soc *soc)
 	mon_ops->mon_config_enh_tx_capture = NULL;
 	mon_ops->mon_tx_peer_filter = NULL;
 #endif
-#if defined(WDI_EVENT_ENABLE) &&\
-	(defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG))
-	mon_ops->mon_ppdu_stats_ind_handler = dp_ppdu_stats_ind_handler;
-#endif
 #ifdef WLAN_RX_PKT_CAPTURE_ENH
 	mon_ops->mon_config_enh_rx_capture = dp_config_enh_rx_capture;
 #endif

+ 16 - 4
dp/wifi3.0/monitor/2.0/dp_mon_2.0.c

@@ -1311,6 +1311,21 @@ dp_mon_pdev_params_rssi_dbm_conv(struct cdp_soc_t *cdp_soc,
 }
 #endif
 
+#if defined(WDI_EVENT_ENABLE) &&\
+	(defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG))
+static inline
+void dp_mon_ppdu_stats_handler_register(struct dp_mon_soc *mon_soc)
+{
+	mon_soc->mon_ops->mon_ppdu_stats_ind_handler =
+					dp_ppdu_stats_ind_handler;
+}
+#else
+static inline
+void dp_mon_ppdu_stats_handler_register(struct dp_mon_soc *mon_soc)
+{
+}
+#endif
+
 static void dp_mon_register_intr_ops_2_0(struct dp_soc *soc)
 {
 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
@@ -1320,6 +1335,7 @@ static void dp_mon_register_intr_ops_2_0(struct dp_soc *soc)
 	mon_soc->mon_ops->tx_mon_refill_buf_ring =
 			NULL,
 	mon_soc->mon_rx_process = dp_rx_mon_process_2_0;
+	dp_mon_ppdu_stats_handler_register(mon_soc);
 }
 
 /**
@@ -1372,10 +1388,6 @@ dp_mon_register_feature_ops_2_0(struct dp_soc *soc)
 	mon_ops->mon_config_enh_tx_capture = dp_config_enh_tx_core_capture_2_0;
 	mon_ops->mon_tx_peer_filter = NULL;
 #endif
-#if defined(WDI_EVENT_ENABLE) &&\
-	(defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG))
-	mon_ops->mon_ppdu_stats_ind_handler = dp_ppdu_stats_ind_handler;
-#endif
 #ifdef WLAN_RX_PKT_CAPTURE_ENH
 	mon_ops->mon_config_enh_rx_capture = NULL;
 #endif

+ 15 - 4
dp/wifi3.0/monitor/dp_mon.c

@@ -5733,11 +5733,26 @@ void dp_mon_cdp_ops_deregister(struct dp_soc *soc)
 	return;
 }
 
+#if defined(WDI_EVENT_ENABLE) &&\
+	(defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG))
+static inline
+void dp_mon_ppdu_stats_handler_deregister(struct dp_mon_soc *mon_soc)
+{
+	mon_soc->mon_ops->mon_ppdu_stats_ind_handler = NULL;
+}
+#else
+static inline
+void dp_mon_ppdu_stats_handler_deregister(struct dp_mon_soc *mon_soc)
+{
+}
+#endif
+
 void dp_mon_intr_ops_deregister(struct dp_soc *soc)
 {
 	struct dp_mon_soc *mon_soc = soc->monitor_soc;
 
 	mon_soc->mon_rx_process = NULL;
+	dp_mon_ppdu_stats_handler_deregister(mon_soc);
 }
 
 void dp_mon_feature_ops_deregister(struct dp_soc *soc)
@@ -5770,10 +5785,6 @@ void dp_mon_feature_ops_deregister(struct dp_soc *soc)
 	mon_ops->mon_print_pdev_tx_capture_stats = NULL;
 	mon_ops->mon_config_enh_tx_capture = NULL;
 #endif
-#if defined(WDI_EVENT_ENABLE) &&\
-	(defined(QCA_ENHANCED_STATS_SUPPORT) || !defined(REMOVE_PKT_LOG))
-	mon_ops->mon_ppdu_stats_ind_handler = NULL;
-#endif
 #ifdef WLAN_RX_PKT_CAPTURE_ENH
 	mon_ops->mon_config_enh_rx_capture = NULL;
 #endif