|
@@ -195,6 +195,10 @@ static const char main_strings[][ETH_GSTRING_LEN] = {
|
|
|
"tx_prio_7_packets", "tx_prio_7_bytes",
|
|
|
"tx_novlan_packets", "tx_novlan_bytes",
|
|
|
|
|
|
+ /* xdp statistics */
|
|
|
+ "rx_xdp_drop",
|
|
|
+ "rx_xdp_tx",
|
|
|
+ "rx_xdp_tx_full",
|
|
|
};
|
|
|
|
|
|
static const char mlx4_en_test_names[][ETH_GSTRING_LEN]= {
|
|
@@ -340,7 +344,7 @@ static int mlx4_en_get_sset_count(struct net_device *dev, int sset)
|
|
|
case ETH_SS_STATS:
|
|
|
return bitmap_iterator_count(&it) +
|
|
|
(priv->tx_ring_num[TX] * 2) +
|
|
|
- (priv->rx_ring_num * 3);
|
|
|
+ (priv->rx_ring_num * (3 + NUM_XDP_STATS));
|
|
|
case ETH_SS_TEST:
|
|
|
return MLX4_EN_NUM_SELF_TEST - !(priv->mdev->dev->caps.flags
|
|
|
& MLX4_DEV_CAP_FLAG_UC_LOOPBACK) * 2;
|
|
@@ -400,6 +404,10 @@ static void mlx4_en_get_ethtool_stats(struct net_device *dev,
|
|
|
if (bitmap_iterator_test(&it))
|
|
|
data[index++] = ((unsigned long *)&priv->pkstats)[i];
|
|
|
|
|
|
+ for (i = 0; i < NUM_XDP_STATS; i++, bitmap_iterator_inc(&it))
|
|
|
+ if (bitmap_iterator_test(&it))
|
|
|
+ data[index++] = ((unsigned long *)&priv->xdp_stats)[i];
|
|
|
+
|
|
|
for (i = 0; i < priv->tx_ring_num[TX]; i++) {
|
|
|
data[index++] = priv->tx_ring[TX][i]->packets;
|
|
|
data[index++] = priv->tx_ring[TX][i]->bytes;
|
|
@@ -408,6 +416,9 @@ static void mlx4_en_get_ethtool_stats(struct net_device *dev,
|
|
|
data[index++] = priv->rx_ring[i]->packets;
|
|
|
data[index++] = priv->rx_ring[i]->bytes;
|
|
|
data[index++] = priv->rx_ring[i]->dropped;
|
|
|
+ data[index++] = priv->rx_ring[i]->xdp_drop;
|
|
|
+ data[index++] = priv->rx_ring[i]->xdp_tx;
|
|
|
+ data[index++] = priv->rx_ring[i]->xdp_tx_full;
|
|
|
}
|
|
|
spin_unlock_bh(&priv->stats_lock);
|
|
|
|
|
@@ -470,6 +481,12 @@ static void mlx4_en_get_strings(struct net_device *dev,
|
|
|
strcpy(data + (index++) * ETH_GSTRING_LEN,
|
|
|
main_strings[strings]);
|
|
|
|
|
|
+ for (i = 0; i < NUM_XDP_STATS; i++, strings++,
|
|
|
+ bitmap_iterator_inc(&it))
|
|
|
+ if (bitmap_iterator_test(&it))
|
|
|
+ strcpy(data + (index++) * ETH_GSTRING_LEN,
|
|
|
+ main_strings[strings]);
|
|
|
+
|
|
|
for (i = 0; i < priv->tx_ring_num[TX]; i++) {
|
|
|
sprintf(data + (index++) * ETH_GSTRING_LEN,
|
|
|
"tx%d_packets", i);
|
|
@@ -483,6 +500,12 @@ static void mlx4_en_get_strings(struct net_device *dev,
|
|
|
"rx%d_bytes", i);
|
|
|
sprintf(data + (index++) * ETH_GSTRING_LEN,
|
|
|
"rx%d_dropped", i);
|
|
|
+ sprintf(data + (index++) * ETH_GSTRING_LEN,
|
|
|
+ "rx%d_xdp_drop", i);
|
|
|
+ sprintf(data + (index++) * ETH_GSTRING_LEN,
|
|
|
+ "rx%d_xdp_tx", i);
|
|
|
+ sprintf(data + (index++) * ETH_GSTRING_LEN,
|
|
|
+ "rx%d_xdp_tx_full", i);
|
|
|
}
|
|
|
break;
|
|
|
case ETH_SS_PRIV_FLAGS:
|