From: Tariq Toukan <tariqt@nvidia.com>
To: Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, <netdev@vger.kernel.org>,
Paolo Abeni <pabeni@redhat.com>
Cc: Carolina Jubran <cjubran@nvidia.com>,
Gal Pressman <gal@nvidia.com>,
"open list" <linux-kernel@vger.kernel.org>,
Shahar Shitrit <shshitrit@nvidia.com>,
Tariq Toukan <tariqt@nvidia.com>,
Leon Romanovsky <leon@kernel.org>,
"Mark Bloch" <mbloch@nvidia.com>,
Saeed Mahameed <saeedm@nvidia.com>,
Dragos Tatulea <dtatulea@nvidia.com>
Subject: [PATCH net-next 3/5] net/mlx5: nodnic: Add TX/RX statistics
Date: Wed, 30 Sep 2026 15:57:06 +0300 [thread overview]
Message-ID: <20260930125708.144767-4-tariqt@nvidia.com> (raw)
In-Reply-To: <20260930125708.144767-1-tariqt@nvidia.com>
From: Shahar Shitrit <shshitrit@nvidia.com>
Add TX and RX packet and byte statistics, as well as TX drop
accounting.
Update the counters from the data path and expose them through
ndo_get_stats64.
Signed-off-by: Shahar Shitrit <shshitrit@nvidia.com>
Reviewed-by: Carolina Jubran <cjubran@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
---
.../net/ethernet/mellanox/mlx5/nodnic/en.h | 14 +++++++++++
.../ethernet/mellanox/mlx5/nodnic/en_cfg.c | 25 +++++++++++++++++++
.../net/ethernet/mellanox/mlx5/nodnic/rx.c | 3 +++
.../net/ethernet/mellanox/mlx5/nodnic/tx.c | 4 +++
4 files changed, 46 insertions(+)
diff --git a/drivers/net/ethernet/mellanox/mlx5/nodnic/en.h b/drivers/net/ethernet/mellanox/mlx5/nodnic/en.h
index 19858e9da064..d811bfe242ac 100644
--- a/drivers/net/ethernet/mellanox/mlx5/nodnic/en.h
+++ b/drivers/net/ethernet/mellanox/mlx5/nodnic/en.h
@@ -44,6 +44,17 @@ enum mlx5_nodnic_cqe_opcode {
OPCODE_CQ_INVALID,
};
+struct mlx5_nodnic_sq_stats {
+ u64 packets;
+ u64 bytes;
+ u64 dropped;
+};
+
+struct mlx5_nodnic_rq_stats {
+ u64 packets;
+ u64 bytes;
+};
+
struct mlx5_nodnic_ring {
void *wq;
dma_addr_t dma_handle;
@@ -109,6 +120,9 @@ struct mlx5_nodnic_priv {
struct mutex state_lock; /* protects Interface state */
unsigned long state;
+ struct mlx5_nodnic_sq_stats sq_stats;
+ struct mlx5_nodnic_rq_stats rq_stats;
+
struct mlx5_nodnic_sq sq;
struct mlx5_nodnic_rq rq;
struct mlx5_nodnic_dbr dbr; /* one shared dbr for TX and RX */
diff --git a/drivers/net/ethernet/mellanox/mlx5/nodnic/en_cfg.c b/drivers/net/ethernet/mellanox/mlx5/nodnic/en_cfg.c
index d73e2ec1662b..9f3ec04e7a7b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/nodnic/en_cfg.c
+++ b/drivers/net/ethernet/mellanox/mlx5/nodnic/en_cfg.c
@@ -963,10 +963,35 @@ int mlx5_nodnic_close(struct net_device *netdev)
return err;
}
+static void mlx5_nodnic_update_sq_stats(const struct mlx5_nodnic_sq_stats *sq,
+ struct rtnl_link_stats64 *s)
+{
+ s->tx_packets = sq->packets;
+ s->tx_bytes = sq->bytes;
+ s->tx_dropped = sq->dropped;
+}
+
+static void mlx5_nodnic_update_rq_stats(const struct mlx5_nodnic_rq_stats *rq,
+ struct rtnl_link_stats64 *s)
+{
+ s->rx_packets = rq->packets;
+ s->rx_bytes = rq->bytes;
+}
+
+static void mlx5_nodnic_get_stats64(struct net_device *netdev,
+ struct rtnl_link_stats64 *stats)
+{
+ struct mlx5_nodnic_priv *priv = netdev_priv(netdev);
+
+ mlx5_nodnic_update_sq_stats(&priv->sq_stats, stats);
+ mlx5_nodnic_update_rq_stats(&priv->rq_stats, stats);
+}
+
static const struct net_device_ops mlx5_nodnic_netdev_ops = {
.ndo_open = mlx5_nodnic_open,
.ndo_stop = mlx5_nodnic_close,
.ndo_start_xmit = mlx5_nodnic_xmit,
+ .ndo_get_stats64 = mlx5_nodnic_get_stats64,
.ndo_features_check = mlx5_nodnic_check_features,
};
diff --git a/drivers/net/ethernet/mellanox/mlx5/nodnic/rx.c b/drivers/net/ethernet/mellanox/mlx5/nodnic/rx.c
index 7736a1f24ea5..808740ec3910 100644
--- a/drivers/net/ethernet/mellanox/mlx5/nodnic/rx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/nodnic/rx.c
@@ -152,6 +152,9 @@ void mlx5_nodnic_handle_recv_cqe(struct mlx5_nodnic_cq *cq,
skb->protocol = eth_type_trans(skb, priv->netdev);
nodnic_handle_rx_csum(priv->netdev, cqe, skb);
+ priv->rq_stats.packets++;
+ priv->rq_stats.bytes += byte_count;
+
napi_gro_receive(&cq->napi, skb);
rq->cc++;
diff --git a/drivers/net/ethernet/mellanox/mlx5/nodnic/tx.c b/drivers/net/ethernet/mellanox/mlx5/nodnic/tx.c
index fcde1a9086f7..b6f2368155ce 100644
--- a/drivers/net/ethernet/mellanox/mlx5/nodnic/tx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/nodnic/tx.c
@@ -143,6 +143,7 @@ netdev_tx_t mlx5_nodnic_xmit(struct sk_buff *skb, struct net_device *netdev)
err = mlx5_nodnic_tx_write_wqe(sq, skb, wqe);
if (err) {
+ priv->sq_stats.dropped++;
dev_kfree_skb_any(skb);
return NETDEV_TX_OK;
@@ -176,6 +177,9 @@ void mlx5_nodnic_handle_send_cqe(struct mlx5_nodnic_cq *cq,
wi = &sq->wqe_info[pi];
mlx5_nodnic_complete_send_wqe(sq, wi, napi_budget);
+
+ priv->sq_stats.packets++;
+ priv->sq_stats.bytes += wi->num_bytes;
}
void mlx5_nodnic_complete_send_wqe(struct mlx5_nodnic_sq *sq,
--
2.44.0
next prev parent reply other threads:[~2026-09-30 12:58 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-30 12:57 [PATCH net-next 0/5] net/mlx5: Introduce mlx5_nodnic, a driver for DRAM-less NVIDIA Mellanox NIC functions Tariq Toukan
2026-09-30 12:57 ` [PATCH net-next 1/5] net/mlx5: nodnic: Introduce the mlx5_nodnic driver Tariq Toukan
2026-10-02 17:16 ` Simon Horman
2026-09-30 12:57 ` [PATCH net-next 2/5] net/mlx5: nodnic: Implement data path Tariq Toukan
2026-09-30 12:57 ` Tariq Toukan [this message]
2026-09-30 12:57 ` [PATCH net-next 4/5] net/mlx5: nodnic: Add ethtool driver info Tariq Toukan
2026-09-30 12:57 ` [PATCH net-next 5/5] net/mlx5: nodnic: Add health monitoring Tariq Toukan
2026-10-02 17:17 ` [PATCH net-next 0/5] net/mlx5: Introduce mlx5_nodnic, a driver for DRAM-less NVIDIA Mellanox NIC functions Simon Horman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260930125708.144767-4-tariqt@nvidia.com \
--to=tariqt@nvidia.com \
--cc=andrew+netdev@lunn.ch \
--cc=cjubran@nvidia.com \
--cc=davem@davemloft.net \
--cc=dtatulea@nvidia.com \
--cc=edumazet@google.com \
--cc=gal@nvidia.com \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mbloch@nvidia.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=saeedm@nvidia.com \
--cc=shshitrit@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.