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

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

Change-Id: Iaeb9280bc1ad4a287eee409d92ad0c95dc9f2c77
This commit is contained in:
Tallapragada Kalyan
2018-04-18 14:30:44 +05:30
committed by nshrivas
parent e2137870de
commit 51198fc4ee
3 changed files with 18 additions and 5 deletions

View File

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

View File

@@ -5190,6 +5190,10 @@ dp_print_pdev_rx_stats(struct dp_pdev *pdev)
pdev->stats.replenish.rxdma_err); pdev->stats.replenish.rxdma_err);
DP_PRINT_STATS(" Desc Alloc Failed: = %d", DP_PRINT_STATS(" Desc Alloc Failed: = %d",
pdev->stats.err.desc_alloc_fail); 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 */ /* Get bar_recv_cnt */
dp_aggregate_pdev_ctrl_frames_stats(pdev); dp_aggregate_pdev_ctrl_frames_stats(pdev);

View File

@@ -1061,15 +1061,20 @@ static inline void dp_rx_deliver_to_stack(struct dp_vdev *vdev,
* *
* Return: void * 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}; 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) && if (qdf_likely(!ip_csum_err && !tcp_udp_csum_er)) {
!hal_rx_attn_ip_cksum_fail_get(rx_tlv_hdr))) {
cksum.l4_result = QDF_NBUF_RX_CKSUM_TCP_UDP_UNNECESSARY; cksum.l4_result = QDF_NBUF_RX_CKSUM_TCP_UDP_UNNECESSARY;
qdf_nbuf_set_rx_cksum(nbuf, &cksum); 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; 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); dp_set_rx_queue(nbuf, ring_id);