RE: [PATCH v4 09/10] net/mlx5: implement per-queue Tx rate limit getter

Slava Ovsiienko
2026-03-23T13:20:17Z

Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>

> -----Original Message-----
> From: Vincent Jardin <vjardin@free.fr>
> Sent: Sunday, March 22, 2026 3:46 PM
> To: dev@dpdk.org
> Cc: Raslan Darawsheh <rasland@nvidia.com>; NBU-Contact-Thomas Monjalon
> (EXTERNAL) <thomas@monjalon.net>; andrew.rybchenko@oktetlabs.ru;
> Dariusz Sosnowski <dsosnowski@nvidia.com>; Slava Ovsiienko
> <viacheslavo@nvidia.com>; Bing Zhao <bingz@nvidia.com>; Ori Kam
> <orika@nvidia.com>; Suanming Mou <suanmingm@nvidia.com>; Matan Azrad
> <matan@nvidia.com>; stephen@networkplumber.org;
> aman.deep.singh@intel.com; Vincent Jardin <vjardin@free.fr>
> Subject: [PATCH v4 09/10] net/mlx5: implement per-queue Tx rate limit getter
>
> Wire the mlx5 PMD to the new rte_eth_get_queue_rate_limit() ethdev callback.
> The implementation reads the per-queue rate_mbps tracking field from the
> txq_ctrl structure.
>
> Signed-off-by: Vincent Jardin <vjardin@free.fr>
> ---
> drivers/net/mlx5/mlx5.c | 2 ++
> drivers/net/mlx5/mlx5_tx.h | 2 ++
> drivers/net/mlx5/mlx5_txq.c | 30 ++++++++++++++++++++++++++++++
> 3 files changed, 34 insertions(+)
>
> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index
> 7d08d7886b..f5784761f9 100644
> --- a/drivers/net/mlx5/mlx5.c
> +++ b/drivers/net/mlx5/mlx5.c
> @@ -2652,6 +2652,7 @@ const struct eth_dev_ops mlx5_dev_ops = {
> .rx_metadata_negotiate = mlx5_flow_rx_metadata_negotiate,
> .get_restore_flags = mlx5_get_restore_flags,
> .set_queue_rate_limit = mlx5_set_queue_rate_limit,
> + .get_queue_rate_limit = mlx5_get_queue_rate_limit,
> };
>
> /* Available operations from secondary process. */ @@ -2746,6 +2747,7 @@
> const struct eth_dev_ops mlx5_dev_ops_isolate = {
> .map_aggr_tx_affinity = mlx5_map_aggr_tx_affinity,
> .get_restore_flags = mlx5_get_restore_flags,
> .set_queue_rate_limit = mlx5_set_queue_rate_limit,
> + .get_queue_rate_limit = mlx5_get_queue_rate_limit,
> };
>
> /**
> diff --git a/drivers/net/mlx5/mlx5_tx.h b/drivers/net/mlx5/mlx5_tx.h index
> 975ff57acd..02feb9e6fd 100644
> --- a/drivers/net/mlx5/mlx5_tx.h
> +++ b/drivers/net/mlx5/mlx5_tx.h
> @@ -224,6 +224,8 @@ int mlx5_txq_releasable(struct rte_eth_dev *dev,
> uint16_t idx); int mlx5_txq_verify(struct rte_eth_dev *dev); int
> mlx5_set_queue_rate_limit(struct rte_eth_dev *dev, uint16_t queue_idx,
> uint32_t tx_rate);
> +int mlx5_get_queue_rate_limit(struct rte_eth_dev *dev, uint16_t queue_idx,
> + uint32_t *tx_rate);
> int mlx5_txq_get_sqn(struct mlx5_txq_ctrl *txq); void
> mlx5_txq_alloc_elts(struct mlx5_txq_ctrl *txq_ctrl); void
> mlx5_txq_free_elts(struct mlx5_txq_ctrl *txq_ctrl); diff --git
> a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c index
> ce08363ca9..867ea4b994 100644
> --- a/drivers/net/mlx5/mlx5_txq.c
> +++ b/drivers/net/mlx5/mlx5_txq.c
> @@ -1481,6 +1481,36 @@ mlx5_set_queue_rate_limit(struct rte_eth_dev
> *dev, uint16_t queue_idx,
> return 0;
> }
>
> +/**
> + * Get per-queue packet pacing rate limit.
> + *
> + * @param dev
> + * Pointer to Ethernet device.
> + * @param queue_idx
> + * TX queue index.
> + * @param[out] tx_rate
> + * Pointer to store the TX rate in Mbps, 0 if rate limiting is disabled.
> + *
> + * @return
> + * 0 on success, a negative errno value otherwise and rte_errno is set.
> + */
> +int
> +mlx5_get_queue_rate_limit(struct rte_eth_dev *dev, uint16_t queue_idx,
> + uint32_t *tx_rate)
> +{
> + struct mlx5_priv *priv = dev->data->dev_private;
> + struct mlx5_txq_ctrl *txq_ctrl;
> +
> + if (priv->txqs == NULL || (*priv->txqs)[queue_idx] == NULL) {
> + rte_errno = EINVAL;
> + return -rte_errno;
> + }
> + txq_ctrl = container_of((*priv->txqs)[queue_idx],
> + struct mlx5_txq_ctrl, txq);
> + *tx_rate = txq_ctrl->rate_limit.rate_mbps;
> + return 0;
> +}
> +
> /**
> * Verify if the queue can be released.
> *
> --
> 2.43.0