|
@@ -96,9 +96,10 @@ static const struct igb_stats igb_gstrings_stats[] = {
|
|
|
};
|
|
|
|
|
|
#define IGB_QUEUE_STATS_LEN \
|
|
|
- ((((struct igb_adapter *)netdev_priv(netdev))->num_rx_queues + \
|
|
|
- ((struct igb_adapter *)netdev_priv(netdev))->num_tx_queues) * \
|
|
|
- (sizeof(struct igb_queue_stats) / sizeof(u64)))
|
|
|
+ (((((struct igb_adapter *)netdev_priv(netdev))->num_rx_queues)* \
|
|
|
+ (sizeof(struct igb_rx_queue_stats) / sizeof(u64))) + \
|
|
|
+ ((((struct igb_adapter *)netdev_priv(netdev))->num_tx_queues) * \
|
|
|
+ (sizeof(struct igb_tx_queue_stats) / sizeof(u64))))
|
|
|
#define IGB_GLOBAL_STATS_LEN \
|
|
|
sizeof(igb_gstrings_stats) / sizeof(struct igb_stats)
|
|
|
#define IGB_STATS_LEN (IGB_GLOBAL_STATS_LEN + IGB_QUEUE_STATS_LEN)
|
|
@@ -1960,7 +1961,8 @@ static void igb_get_ethtool_stats(struct net_device *netdev,
|
|
|
{
|
|
|
struct igb_adapter *adapter = netdev_priv(netdev);
|
|
|
u64 *queue_stat;
|
|
|
- int stat_count = sizeof(struct igb_queue_stats) / sizeof(u64);
|
|
|
+ int stat_count_tx = sizeof(struct igb_tx_queue_stats) / sizeof(u64);
|
|
|
+ int stat_count_rx = sizeof(struct igb_rx_queue_stats) / sizeof(u64);
|
|
|
int j;
|
|
|
int i;
|
|
|
|
|
@@ -1973,14 +1975,14 @@ static void igb_get_ethtool_stats(struct net_device *netdev,
|
|
|
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++)
|
|
|
+ for (k = 0; k < stat_count_tx; 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;
|
|
|
- for (k = 0; k < stat_count; k++)
|
|
|
+ for (k = 0; k < stat_count_rx; k++)
|
|
|
data[i + k] = queue_stat[k];
|
|
|
i += k;
|
|
|
}
|
|
@@ -2014,6 +2016,8 @@ static void igb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
|
|
|
p += ETH_GSTRING_LEN;
|
|
|
sprintf(p, "rx_queue_%u_bytes", i);
|
|
|
p += ETH_GSTRING_LEN;
|
|
|
+ sprintf(p, "rx_queue_%u_drops", i);
|
|
|
+ p += ETH_GSTRING_LEN;
|
|
|
}
|
|
|
/* BUG_ON(p - data != IGB_STATS_LEN * ETH_GSTRING_LEN); */
|
|
|
break;
|