mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	mlx4_en: Checksum counters per ring
Not updating common counters from data path. The checksum counters are per ring, summarizing them when collecting statistics. Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									f3a9d1f25d
								
							
						
					
					
						commit
						ad04378cec
					
				
					 4 changed files with 13 additions and 4 deletions
				
			
		|  | @ -214,15 +214,21 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset) | |||
| 
 | ||||
| 	stats->rx_packets = 0; | ||||
| 	stats->rx_bytes = 0; | ||||
| 	priv->port_stats.rx_chksum_good = 0; | ||||
| 	priv->port_stats.rx_chksum_none = 0; | ||||
| 	for (i = 0; i < priv->rx_ring_num; i++) { | ||||
| 		stats->rx_packets += priv->rx_ring[i].packets; | ||||
| 		stats->rx_bytes += priv->rx_ring[i].bytes; | ||||
| 		priv->port_stats.rx_chksum_good += priv->rx_ring[i].csum_ok; | ||||
| 		priv->port_stats.rx_chksum_none += priv->rx_ring[i].csum_none; | ||||
| 	} | ||||
| 	stats->tx_packets = 0; | ||||
| 	stats->tx_bytes = 0; | ||||
| 	priv->port_stats.tx_chksum_offload = 0; | ||||
| 	for (i = 0; i < priv->tx_ring_num; i++) { | ||||
| 		stats->tx_packets += priv->tx_ring[i].packets; | ||||
| 		stats->tx_bytes += priv->tx_ring[i].bytes; | ||||
| 		priv->port_stats.tx_chksum_offload += priv->tx_ring[i].tx_csum; | ||||
| 	} | ||||
| 
 | ||||
| 	stats->rx_errors = be64_to_cpu(mlx4_en_stats->PCS) + | ||||
|  |  | |||
|  | @ -587,7 +587,7 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud | |||
| 		if (likely(dev->features & NETIF_F_RXCSUM)) { | ||||
| 			if ((cqe->status & cpu_to_be16(MLX4_CQE_STATUS_IPOK)) && | ||||
| 			    (cqe->checksum == cpu_to_be16(0xffff))) { | ||||
| 				priv->port_stats.rx_chksum_good++; | ||||
| 				ring->csum_ok++; | ||||
| 				/* This packet is eligible for LRO if it is:
 | ||||
| 				 * - DIX Ethernet (type interpretation) | ||||
| 				 * - TCP/IP (v4) | ||||
|  | @ -627,11 +627,11 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud | |||
| 				ip_summed = CHECKSUM_UNNECESSARY; | ||||
| 			} else { | ||||
| 				ip_summed = CHECKSUM_NONE; | ||||
| 				priv->port_stats.rx_chksum_none++; | ||||
| 				ring->csum_none++; | ||||
| 			} | ||||
| 		} else { | ||||
| 			ip_summed = CHECKSUM_NONE; | ||||
| 			priv->port_stats.rx_chksum_none++; | ||||
| 			ring->csum_none++; | ||||
| 		} | ||||
| 
 | ||||
| 		skb = mlx4_en_rx_skb(priv, rx_desc, skb_frags, | ||||
|  |  | |||
|  | @ -695,7 +695,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 	if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) { | ||||
| 		tx_desc->ctrl.srcrb_flags |= cpu_to_be32(MLX4_WQE_CTRL_IP_CSUM | | ||||
| 							 MLX4_WQE_CTRL_TCP_UDP_CSUM); | ||||
| 		priv->port_stats.tx_chksum_offload++; | ||||
| 		ring->tx_csum++; | ||||
| 	} | ||||
| 
 | ||||
| 	if (unlikely(priv->validate_loopback)) { | ||||
|  |  | |||
|  | @ -249,6 +249,7 @@ struct mlx4_en_tx_ring { | |||
| 	struct mlx4_srq dummy; | ||||
| 	unsigned long bytes; | ||||
| 	unsigned long packets; | ||||
| 	unsigned long tx_csum; | ||||
| 	spinlock_t comp_lock; | ||||
| 	struct mlx4_bf bf; | ||||
| 	bool bf_enabled; | ||||
|  | @ -275,6 +276,8 @@ struct mlx4_en_rx_ring { | |||
| 	void *rx_info; | ||||
| 	unsigned long bytes; | ||||
| 	unsigned long packets; | ||||
| 	unsigned long csum_ok; | ||||
| 	unsigned long csum_none; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Yevgeny Petrilin
						Yevgeny Petrilin