From d7637a443d7161db438cc9328880c9b19d2eeb1a Mon Sep 17 00:00:00 2001 From: Chaithanya Garrepalli Date: Fri, 2 Jul 2021 13:32:55 +0530 Subject: [PATCH] qcacmn: Add handling for rxdma_rx_flush and invalid psh_rsn In WBM error path, add handling for packets received with rxdma_psh_rsn as rxdma_rx_flush. Also add assert for packets received with an invalid push reason. Change-Id: I4e445d52f00bbbdca358225aef488da0e8dccaa7 CRs-Fixed: 2978262 --- dp/wifi3.0/dp_rx_err.c | 24 ++++++++++++++++++++++-- dp/wifi3.0/dp_stats.c | 1 + dp/wifi3.0/dp_types.h | 2 ++ hal/wifi3.0/hal_rx.h | 1 + 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index 399e6ab5d1..a35f83ce87 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -2722,10 +2722,17 @@ done: qdf_nbuf_free(nbuf); } } else if (wbm_err_info.reo_psh_rsn - == HAL_RX_WBM_REO_PSH_RSN_ROUTE) + == HAL_RX_WBM_REO_PSH_RSN_ROUTE) { dp_rx_err_route_hdl(soc, nbuf, peer, rx_tlv_hdr, HAL_RX_WBM_ERR_SRC_REO); + } else { + /* should not enter here */ + dp_rx_err_alert("invalid reo push reason %u", + wbm_err_info.reo_psh_rsn); + qdf_nbuf_free(nbuf); + qdf_assert_always(0); + } } else if (wbm_err_info.wbm_err_src == HAL_RX_WBM_ERR_SRC_RXDMA) { if (wbm_err_info.rxdma_psh_rsn @@ -2790,10 +2797,23 @@ done: wbm_err_info.rxdma_err_code); } } else if (wbm_err_info.rxdma_psh_rsn - == HAL_RX_WBM_RXDMA_PSH_RSN_ROUTE) + == HAL_RX_WBM_RXDMA_PSH_RSN_ROUTE) { dp_rx_err_route_hdl(soc, nbuf, peer, rx_tlv_hdr, HAL_RX_WBM_ERR_SRC_RXDMA); + } else if (wbm_err_info.rxdma_psh_rsn + == HAL_RX_WBM_RXDMA_PSH_RSN_FLUSH) { + dp_rx_err_err("rxdma push reason %u", + wbm_err_info.rxdma_psh_rsn); + DP_STATS_INC(soc, rx.err.rx_flush_count, 1); + qdf_nbuf_free(nbuf); + } else { + /* should not enter here */ + dp_rx_err_alert("invalid rxdma push reason %u", + wbm_err_info.rxdma_psh_rsn); + qdf_nbuf_free(nbuf); + qdf_assert_always(0); + } } else { /* Should not come here */ qdf_assert(0); diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index 320f0a9174..22567f1e94 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -6628,6 +6628,7 @@ dp_print_soc_rx_stats(struct dp_soc *soc) soc->stats.rx.rxdma2rel_route_drop); DP_PRINT_STATS("Reo2rel route drop:%d", soc->stats.rx.reo2rel_route_drop); + DP_PRINT_STATS("Rx Flush count:%d", soc->stats.rx.err.rx_flush_count); } #ifdef FEATURE_TSO_STATS diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index c6987ca6fa..c7362201a3 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -1080,6 +1080,8 @@ struct dp_soc_stats { uint32_t pn_in_dest_check_fail; /* MSDU len err count */ uint32_t msdu_len_err; + /* Rx flush count */ + uint32_t rx_flush_count; } err; /* packet count per core - per ring */ diff --git a/hal/wifi3.0/hal_rx.h b/hal/wifi3.0/hal_rx.h index 599cb893b1..cc44e569f4 100644 --- a/hal/wifi3.0/hal_rx.h +++ b/hal/wifi3.0/hal_rx.h @@ -1443,6 +1443,7 @@ enum hal_rx_wbm_reo_push_reason { enum hal_rx_wbm_rxdma_push_reason { HAL_RX_WBM_RXDMA_PSH_RSN_ERROR = 0, HAL_RX_WBM_RXDMA_PSH_RSN_ROUTE, + HAL_RX_WBM_RXDMA_PSH_RSN_FLUSH, }; static inline void hal_rx_dump_mpdu_start_tlv(struct rx_mpdu_start *mpdu_start,