ソースを参照

qcacmn: Handle raw frames and invalid flow_idx stats

Make sure to drop the raw Rx frames as both driver and stack
are not expected to handle them.
Add counter for invalid fisa flow_idx packet received.

Change-Id: I5107c554b8ce6a9a7973f2aeca44bb0f360dc2df
CRs-Fixed: 2733981
Jinwei Chen 5 年 前
コミット
87d4f73245
4 ファイル変更105 行追加63 行削除
  1. 31 0
      dp/wifi3.0/dp_rx.c
  2. 2 0
      dp/wifi3.0/dp_stats.c
  3. 9 0
      dp/wifi3.0/dp_types.h
  4. 63 63
      hal/wifi3.0/qca6490/hal_6490.c

+ 31 - 0
dp/wifi3.0/dp_rx.c

@@ -1918,6 +1918,31 @@ void dp_rx_set_hdr_pad(qdf_nbuf_t nbuf, uint32_t l3_padding)
 }
 #endif
 
+#ifdef DP_RX_DROP_RAW_FRM
+/**
+ * dp_rx_is_raw_frame_dropped() - if raw frame nbuf, free and drop
+ * @nbuf: pkt skb pointer
+ *
+ * Return: true - raw frame, dropped
+ *	   false - not raw frame, do nothing
+ */
+static inline
+bool dp_rx_is_raw_frame_dropped(qdf_nbuf_t nbuf)
+{
+	if (qdf_nbuf_is_raw_frame(nbuf)) {
+		qdf_nbuf_free(nbuf);
+		return true;
+	}
+
+	return false;
+}
+#else
+static inline
+bool dp_rx_is_raw_frame_dropped(qdf_nbuf_t nbuf)
+{
+	return false;
+}
+#endif
 
 /**
  * dp_rx_process() - Brain of the Rx processing functionality
@@ -2253,6 +2278,12 @@ done:
 	nbuf = nbuf_head;
 	while (nbuf) {
 		next = nbuf->next;
+		if (qdf_unlikely(dp_rx_is_raw_frame_dropped(nbuf))) {
+			nbuf = next;
+			DP_STATS_INC(soc, rx.err.raw_frm_drop, 1);
+			continue;
+		}
+
 		rx_tlv_hdr = qdf_nbuf_data(nbuf);
 		vdev_id = QDF_NBUF_CB_RX_VDEV_ID(nbuf);
 

+ 2 - 0
dp/wifi3.0/dp_stats.c

@@ -6049,6 +6049,8 @@ void dp_txrx_path_stats(struct dp_soc *soc)
 			       pdev->soc->stats.rx.err.reo_err_oor_drop);
 		DP_PRINT_STATS("Rx err msdu rejected: %d",
 			       soc->stats.rx.err.rejected);
+		DP_PRINT_STATS("Rx raw frame dropped: %d",
+			       soc->stats.rx.err.raw_frm_drop);
 
 		DP_PRINT_STATS("Reo Statistics");
 		DP_PRINT_STATS("near_full: %u ", soc->stats.rx.near_full);

+ 9 - 0
dp/wifi3.0/dp_types.h

@@ -849,6 +849,8 @@ struct dp_soc_stats {
 			uint32_t rejected;
 			/* Incorrect msdu count in MPDU desc info */
 			uint32_t msdu_count_mismatch;
+			/* RX raw frame dropped count */
+			uint32_t raw_frm_drop;
 		} err;
 
 		/* packet count per core - per ring */
@@ -2401,6 +2403,11 @@ struct dp_rx_fst {
 #define DP_RX_GET_SW_FT_ENTRY_SIZE sizeof(struct dp_rx_fse)
 #elif WLAN_SUPPORT_RX_FISA
 
+struct dp_fisa_stats {
+	/* flow index invalid from RX HW TLV */
+	uint32_t invalid_flow_index;
+};
+
 enum fisa_aggr_ret {
 	FISA_AGGR_DONE,
 	FISA_AGGR_NOT_ELIGIBLE,
@@ -2486,6 +2493,8 @@ struct dp_rx_fst {
 	qdf_atomic_t fse_cache_flush_posted;
 	qdf_timer_t fse_cache_flush_timer;
 	struct fse_cache_flush_history cache_fl_rec[MAX_FSE_CACHE_FL_HST];
+	/* FISA DP stats */
+	struct dp_fisa_stats stats;
 };
 
 #endif /* WLAN_SUPPORT_RX_FISA */

+ 63 - 63
hal/wifi3.0/qca6490/hal_6490.c

@@ -240,69 +240,69 @@ static void hal_rx_dump_msdu_start_tlv_6490(void *msdustart, uint8_t dbg_level)
 {
 	struct rx_msdu_start *msdu_start = (struct rx_msdu_start *)msdustart;
 
-	hal_verbose_debug(
-			  "rx_msdu_start tlv (1/2) - "
-			  "rxpcu_mpdu_filter_in_category: %x "
-			  "sw_frame_group_id: %x "
-			  "phy_ppdu_id: %x "
-			  "msdu_length: %x "
-			  "ipsec_esp: %x "
-			  "l3_offset: %x "
-			  "ipsec_ah: %x "
-			  "l4_offset: %x "
-			  "msdu_number: %x "
-			  "decap_format: %x "
-			  "ipv4_proto: %x "
-			  "ipv6_proto: %x "
-			  "tcp_proto: %x "
-			  "udp_proto: %x "
-			  "ip_frag: %x "
-			  "tcp_only_ack: %x "
-			  "da_is_bcast_mcast: %x "
-			  "ip4_protocol_ip6_next_header: %x "
-			  "toeplitz_hash_2_or_4: %x "
-			  "flow_id_toeplitz: %x "
-			  "user_rssi: %x "
-			  "pkt_type: %x "
-			  "stbc: %x "
-			  "sgi: %x "
-			  "rate_mcs: %x "
-			  "receive_bandwidth: %x "
-			  "reception_type: %x "
-			  "ppdu_start_timestamp: %u ",
-			  msdu_start->rxpcu_mpdu_filter_in_category,
-			  msdu_start->sw_frame_group_id,
-			  msdu_start->phy_ppdu_id,
-			  msdu_start->msdu_length,
-			  msdu_start->ipsec_esp,
-			  msdu_start->l3_offset,
-			  msdu_start->ipsec_ah,
-			  msdu_start->l4_offset,
-			  msdu_start->msdu_number,
-			  msdu_start->decap_format,
-			  msdu_start->ipv4_proto,
-			  msdu_start->ipv6_proto,
-			  msdu_start->tcp_proto,
-			  msdu_start->udp_proto,
-			  msdu_start->ip_frag,
-			  msdu_start->tcp_only_ack,
-			  msdu_start->da_is_bcast_mcast,
-			  msdu_start->ip4_protocol_ip6_next_header,
-			  msdu_start->toeplitz_hash_2_or_4,
-			  msdu_start->flow_id_toeplitz,
-			  msdu_start->user_rssi,
-			  msdu_start->pkt_type,
-			  msdu_start->stbc,
-			  msdu_start->sgi,
-			  msdu_start->rate_mcs,
-			  msdu_start->receive_bandwidth,
-			  msdu_start->reception_type,
-			  msdu_start->ppdu_start_timestamp);
-
-	hal_verbose_debug(
-			  "rx_msdu_start tlv (2/2) - "
-			  "sw_phy_meta_data: %x ",
-			  msdu_start->sw_phy_meta_data);
+	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_DP,
+		       "rx_msdu_start tlv (1/2) - "
+		       "rxpcu_mpdu_filter_in_category: %x "
+		       "sw_frame_group_id: %x "
+		       "phy_ppdu_id: %x "
+		       "msdu_length: %x "
+		       "ipsec_esp: %x "
+		       "l3_offset: %x "
+		       "ipsec_ah: %x "
+		       "l4_offset: %x "
+		       "msdu_number: %x "
+		       "decap_format: %x "
+		       "ipv4_proto: %x "
+		       "ipv6_proto: %x "
+		       "tcp_proto: %x "
+		       "udp_proto: %x "
+		       "ip_frag: %x "
+		       "tcp_only_ack: %x "
+		       "da_is_bcast_mcast: %x "
+		       "ip4_protocol_ip6_next_header: %x "
+		       "toeplitz_hash_2_or_4: %x "
+		       "flow_id_toeplitz: %x "
+		       "user_rssi: %x "
+		       "pkt_type: %x "
+		       "stbc: %x "
+		       "sgi: %x "
+		       "rate_mcs: %x "
+		       "receive_bandwidth: %x "
+		       "reception_type: %x "
+		       "ppdu_start_timestamp: %u ",
+		       msdu_start->rxpcu_mpdu_filter_in_category,
+		       msdu_start->sw_frame_group_id,
+		       msdu_start->phy_ppdu_id,
+		       msdu_start->msdu_length,
+		       msdu_start->ipsec_esp,
+		       msdu_start->l3_offset,
+		       msdu_start->ipsec_ah,
+		       msdu_start->l4_offset,
+		       msdu_start->msdu_number,
+		       msdu_start->decap_format,
+		       msdu_start->ipv4_proto,
+		       msdu_start->ipv6_proto,
+		       msdu_start->tcp_proto,
+		       msdu_start->udp_proto,
+		       msdu_start->ip_frag,
+		       msdu_start->tcp_only_ack,
+		       msdu_start->da_is_bcast_mcast,
+		       msdu_start->ip4_protocol_ip6_next_header,
+		       msdu_start->toeplitz_hash_2_or_4,
+		       msdu_start->flow_id_toeplitz,
+		       msdu_start->user_rssi,
+		       msdu_start->pkt_type,
+		       msdu_start->stbc,
+		       msdu_start->sgi,
+		       msdu_start->rate_mcs,
+		       msdu_start->receive_bandwidth,
+		       msdu_start->reception_type,
+		       msdu_start->ppdu_start_timestamp);
+
+	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_DP,
+		       "rx_msdu_start tlv (2/2) - "
+		       "sw_phy_meta_data: %x ",
+		       msdu_start->sw_phy_meta_data);
 }
 
 /**