net/mlx5e: IPoIB, Add ndo stats support for IPoIB netdevices
Expose RX and TX counters by implementing ndo_get_stats64 operation for both parent devices. After this change, all the relevant statistics can be retrieved using ifconfig. Signed-off-by: Feras Daoud <ferasda@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6dae6f06f0
commit
c57d2358ff
@ -45,6 +45,7 @@ static int mlx5i_change_mtu(struct net_device *netdev, int new_mtu);
|
||||
static const struct net_device_ops mlx5i_netdev_ops = {
|
||||
.ndo_open = mlx5i_open,
|
||||
.ndo_stop = mlx5i_close,
|
||||
.ndo_get_stats64 = mlx5i_get_stats,
|
||||
.ndo_init = mlx5i_dev_init,
|
||||
.ndo_uninit = mlx5i_dev_cleanup,
|
||||
.ndo_change_mtu = mlx5i_change_mtu,
|
||||
@ -115,6 +116,47 @@ static void mlx5i_cleanup(struct mlx5e_priv *priv)
|
||||
/* Do nothing .. */
|
||||
}
|
||||
|
||||
void mlx5i_grp_sw_update_stats(struct mlx5e_priv *priv)
|
||||
{
|
||||
struct mlx5e_sw_stats s = { 0 };
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < priv->profile->max_nch(priv->mdev); i++) {
|
||||
struct mlx5e_channel_stats *channel_stats;
|
||||
struct mlx5e_rq_stats *rq_stats;
|
||||
|
||||
channel_stats = &priv->channel_stats[i];
|
||||
rq_stats = &channel_stats->rq;
|
||||
|
||||
s.rx_packets += rq_stats->packets;
|
||||
s.rx_bytes += rq_stats->bytes;
|
||||
|
||||
for (j = 0; j < priv->max_opened_tc; j++) {
|
||||
struct mlx5e_sq_stats *sq_stats = &channel_stats->sq[j];
|
||||
|
||||
s.tx_packets += sq_stats->packets;
|
||||
s.tx_bytes += sq_stats->bytes;
|
||||
s.tx_queue_dropped += sq_stats->dropped;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(&priv->stats.sw, &s, sizeof(s));
|
||||
}
|
||||
|
||||
void mlx5i_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)
|
||||
{
|
||||
struct mlx5e_priv *priv = mlx5i_epriv(dev);
|
||||
struct mlx5e_sw_stats *sstats = &priv->stats.sw;
|
||||
|
||||
mlx5i_grp_sw_update_stats(priv);
|
||||
|
||||
stats->rx_packets = sstats->rx_packets;
|
||||
stats->rx_bytes = sstats->rx_bytes;
|
||||
stats->tx_packets = sstats->tx_packets;
|
||||
stats->tx_bytes = sstats->tx_bytes;
|
||||
stats->tx_dropped = sstats->tx_queue_dropped;
|
||||
}
|
||||
|
||||
int mlx5i_init_underlay_qp(struct mlx5e_priv *priv)
|
||||
{
|
||||
struct mlx5_core_dev *mdev = priv->mdev;
|
||||
|
@ -121,6 +121,7 @@ static inline void mlx5i_sq_fetch_wqe(struct mlx5e_txqsq *sq,
|
||||
netdev_tx_t mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
||||
struct mlx5_av *av, u32 dqpn, u32 dqkey);
|
||||
void mlx5i_handle_rx_cqe(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe);
|
||||
void mlx5i_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats);
|
||||
|
||||
#endif /* CONFIG_MLX5_CORE_IPOIB */
|
||||
#endif /* __MLX5E_IPOB_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user