Sfoglia il codice sorgente

qcacmn: Add counters for IP, TCP/UDP checksum errors

Add counters for IP, TCP/UDP checksum errors reported by
hardware.

Change-Id: Iaeb9280bc1ad4a287eee409d92ad0c95dc9f2c77
Tallapragada Kalyan 7 anni fa
parent
commit
51198fc4ee
3 ha cambiato i file con 18 aggiunte e 5 eliminazioni
  1. 4 0
      dp/inc/cdp_txrx_stats_struct.h
  2. 4 0
      dp/wifi3.0/dp_main.c
  3. 10 5
      dp/wifi3.0/dp_rx.c

+ 4 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -770,6 +770,10 @@ struct cdp_pdev_stats {
 	struct {
 		/* desc alloc failed errors */
 		uint32_t desc_alloc_fail;
+		/* ip csum errors */
+		uint32_t ip_csum_err;
+		/* tcp/udp csum errors */
+		uint32_t tcp_udp_csum_err;
 	} err;
 
 	/* buffers added back in freelist */

+ 4 - 0
dp/wifi3.0/dp_main.c

@@ -5190,6 +5190,10 @@ dp_print_pdev_rx_stats(struct dp_pdev *pdev)
 			pdev->stats.replenish.rxdma_err);
 	DP_PRINT_STATS("	Desc Alloc Failed: = %d",
 			pdev->stats.err.desc_alloc_fail);
+	DP_PRINT_STATS("IP checksum error = %d",
+		       pdev->stats.err.ip_csum_err);
+	DP_PRINT_STATS("TCP/UDP checksum error = %d",
+		       pdev->stats.err.tcp_udp_csum_err);
 
 	/* Get bar_recv_cnt */
 	dp_aggregate_pdev_ctrl_frames_stats(pdev);

+ 10 - 5
dp/wifi3.0/dp_rx.c

@@ -1061,15 +1061,20 @@ static inline void dp_rx_deliver_to_stack(struct dp_vdev *vdev,
  *
  * Return: void
  */
-static inline void dp_rx_cksum_offload(qdf_nbuf_t nbuf, uint8_t *rx_tlv_hdr)
+static inline void dp_rx_cksum_offload(struct dp_pdev *pdev,
+				       qdf_nbuf_t nbuf,
+				       uint8_t *rx_tlv_hdr)
 {
 	qdf_nbuf_rx_cksum_t cksum = {0};
+	bool ip_csum_err = hal_rx_attn_ip_cksum_fail_get(rx_tlv_hdr);
+	bool tcp_udp_csum_er = hal_rx_attn_tcp_udp_cksum_fail_get(rx_tlv_hdr);
 
-	if (qdf_likely(!hal_rx_attn_tcp_udp_cksum_fail_get(rx_tlv_hdr) &&
-		       !hal_rx_attn_ip_cksum_fail_get(rx_tlv_hdr))) {
+	if (qdf_likely(!ip_csum_err && !tcp_udp_csum_er)) {
 		cksum.l4_result = QDF_NBUF_RX_CKSUM_TCP_UDP_UNNECESSARY;
-
 		qdf_nbuf_set_rx_cksum(nbuf, &cksum);
+	} else {
+		DP_STATS_INCC(pdev, err.ip_csum_err, 1, ip_csum_err);
+		DP_STATS_INCC(pdev, err.tcp_udp_csum_err, 1, tcp_udp_csum_er);
 	}
 }
 
@@ -1561,7 +1566,7 @@ done:
 			continue;
 		}
 
-		dp_rx_cksum_offload(nbuf, rx_tlv_hdr);
+		dp_rx_cksum_offload(vdev->pdev, nbuf, rx_tlv_hdr);
 
 		dp_set_rx_queue(nbuf, ring_id);