qcacmn: Reset MON_BUF ring filters only when monitor mode is enabled

When enhanced stats are enabled/disabled, dp_mon_filter_update () API
sets/resets MON_BUF ring filters also, this is leading to connection issues
traffic stall on Rx side

Set/Reset MON_BUF ring filters when monitor mode is enabled

Change-Id: I0de7be81465b11224b95c0918b4e8c8e339e3802
This commit is contained in:
Amir Patel
2021-04-24 20:51:58 +05:30
committed by Madan Koyyalamudi
parent 49846e25ef
commit ef543f271e
2 changed files with 8 additions and 5 deletions

View File

@@ -7029,13 +7029,13 @@ static int dp_update_filter_neighbour_peers(struct cdp_soc_t *soc_hdl,
if (TAILQ_EMPTY(&pdev->neighbour_peers_list)) { if (TAILQ_EMPTY(&pdev->neighbour_peers_list)) {
QDF_STATUS status = QDF_STATUS_SUCCESS; QDF_STATUS status = QDF_STATUS_SUCCESS;
pdev->neighbour_peers_added = false;
dp_mon_filter_reset_smart_monitor(pdev); dp_mon_filter_reset_smart_monitor(pdev);
status = dp_mon_filter_update(pdev); status = dp_mon_filter_update(pdev);
if (status != QDF_STATUS_SUCCESS) { if (status != QDF_STATUS_SUCCESS) {
dp_cdp_err("%pK: smart mon filter clear failed", dp_cdp_err("%pK: smart mon filter clear failed",
soc); soc);
} }
pdev->neighbour_peers_added = false;
} }
@@ -7661,7 +7661,6 @@ static inline void
dp_pdev_disable_mcopy_code(struct dp_pdev *pdev) dp_pdev_disable_mcopy_code(struct dp_pdev *pdev)
{ {
pdev->mcopy_mode = M_COPY_DISABLED; pdev->mcopy_mode = M_COPY_DISABLED;
pdev->monitor_configured = false;
pdev->monitor_vdev = NULL; pdev->monitor_vdev = NULL;
} }
@@ -7689,7 +7688,6 @@ QDF_STATUS dp_reset_monitor_mode(struct cdp_soc_t *soc_hdl,
dp_soc_config_full_mon_mode(pdev, DP_FULL_MON_DISABLE); dp_soc_config_full_mon_mode(pdev, DP_FULL_MON_DISABLE);
pdev->monitor_vdev = NULL; pdev->monitor_vdev = NULL;
pdev->monitor_configured = false;
/* /*
* Lite monitor mode, smart monitor mode and monitor * Lite monitor mode, smart monitor mode and monitor
@@ -7713,6 +7711,7 @@ QDF_STATUS dp_reset_monitor_mode(struct cdp_soc_t *soc_hdl,
dp_rx_mon_dest_err("%pK: Failed to reset monitor filters", dp_rx_mon_dest_err("%pK: Failed to reset monitor filters",
soc); soc);
} }
pdev->monitor_configured = false;
qdf_spin_unlock_bh(&pdev->mon_lock); qdf_spin_unlock_bh(&pdev->mon_lock);
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
@@ -8925,6 +8924,7 @@ dp_config_debug_sniffer(struct dp_pdev *pdev, int val)
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
FL("Failed to reset AM copy mode filters")); FL("Failed to reset AM copy mode filters"));
} }
pdev->monitor_configured = false;
#endif /* FEATURE_PERPKT_INFO */ #endif /* FEATURE_PERPKT_INFO */
} }
switch (val) { switch (val) {

View File

@@ -1181,14 +1181,17 @@ QDF_STATUS dp_mon_filter_update(struct dp_pdev *pdev)
} else { } else {
/* /*
* For WIN case the monitor buffer ring is used and it does need * For WIN case the monitor buffer ring is used and it does need
* reset when monitor mode gets disabled. * reset when monitor mode gets enabled/disabled.
*/ */
if (soc->wlan_cfg_ctx->rxdma1_enable) { if (soc->wlan_cfg_ctx->rxdma1_enable) {
if (pdev->monitor_configured || mon_mode_set ||
pdev->neighbour_peers_added) {
status = dp_mon_ht2_rx_ring_cfg(soc, pdev, status = dp_mon_ht2_rx_ring_cfg(soc, pdev,
mon_srng_type, mon_srng_type,
&filter.tlv_filter); &filter.tlv_filter);
} }
} }
}
if (status != QDF_STATUS_SUCCESS) { if (status != QDF_STATUS_SUCCESS) {
dp_mon_filter_err("%pK: Monitor destination ring filter setting failed", dp_mon_filter_err("%pK: Monitor destination ring filter setting failed",