igb: update ethtool stats to support multiqueue
Addesses problems seen earlier with igb driver not correctly reporting rx and tx stats. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
		
							parent
							
								
									661086df6c
								
							
						
					
					
						commit
						e21ed3538f
					
				| @ -158,6 +158,7 @@ struct igb_ring { | ||||
| 	union { | ||||
| 		/* TX */ | ||||
| 		struct { | ||||
| 			struct igb_queue_stats tx_stats; | ||||
| 			bool detect_tx_hung; | ||||
| 		}; | ||||
| 		/* RX */ | ||||
|  | ||||
| @ -96,10 +96,8 @@ static const struct igb_stats igb_gstrings_stats[] = { | ||||
| }; | ||||
| 
 | ||||
| #define IGB_QUEUE_STATS_LEN \ | ||||
| 	((((((struct igb_adapter *)netdev->priv)->num_rx_queues > 1) ? \ | ||||
| 	  ((struct igb_adapter *)netdev->priv)->num_rx_queues : 0) + \ | ||||
| 	 (((((struct igb_adapter *)netdev->priv)->num_tx_queues > 1) ? \ | ||||
| 	  ((struct igb_adapter *)netdev->priv)->num_tx_queues : 0))) * \ | ||||
| 	((((struct igb_adapter *)netdev->priv)->num_rx_queues + \ | ||||
| 	 ((struct igb_adapter *)netdev->priv)->num_tx_queues) * \ | ||||
| 	(sizeof(struct igb_queue_stats) / sizeof(u64))) | ||||
| #define IGB_GLOBAL_STATS_LEN	\ | ||||
| 	sizeof(igb_gstrings_stats) / sizeof(struct igb_stats) | ||||
| @ -1842,6 +1840,13 @@ static void igb_get_ethtool_stats(struct net_device *netdev, | ||||
| 		data[i] = (igb_gstrings_stats[i].sizeof_stat == | ||||
| 			sizeof(u64)) ? *(u64 *)p : *(u32 *)p; | ||||
| 	} | ||||
| 	for (j = 0; j < adapter->num_tx_queues; j++) { | ||||
| 		int k; | ||||
| 		queue_stat = (u64 *)&adapter->tx_ring[j].tx_stats; | ||||
| 		for (k = 0; k < stat_count; k++) | ||||
| 			data[i + k] = queue_stat[k]; | ||||
| 		i += k; | ||||
| 	} | ||||
| 	for (j = 0; j < adapter->num_rx_queues; j++) { | ||||
| 		int k; | ||||
| 		queue_stat = (u64 *)&adapter->rx_ring[j].rx_stats; | ||||
|  | ||||
| @ -3431,6 +3431,8 @@ done_cleaning: | ||||
| 	} | ||||
| 	tx_ring->total_bytes += total_bytes; | ||||
| 	tx_ring->total_packets += total_packets; | ||||
| 	tx_ring->tx_stats.bytes += total_bytes; | ||||
| 	tx_ring->tx_stats.packets += total_packets; | ||||
| 	adapter->net_stats.tx_bytes += total_bytes; | ||||
| 	adapter->net_stats.tx_packets += total_packets; | ||||
| 	return retval; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user