瀏覽代碼

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
Chaithanya Garrepalli 4 年之前
父節點
當前提交
d7637a443d
共有 4 個文件被更改,包括 26 次插入2 次删除
  1. 22 2
      dp/wifi3.0/dp_rx_err.c
  2. 1 0
      dp/wifi3.0/dp_stats.c
  3. 2 0
      dp/wifi3.0/dp_types.h
  4. 1 0
      hal/wifi3.0/hal_rx.h

+ 22 - 2
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);

+ 1 - 0
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

+ 2 - 0
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 */

+ 1 - 0
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,