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