Date: Mon, 20 Jul 2026 20:53:33 +0000 From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Ariel Ehrenberg <aehrenberg@nvidia.com> Subject: git: c122d64b5ab2 - stable/15 - mlx5ib: allocate IB queue counters as a shared resource Message-ID: <6a5e8acd.1dce4.eaaad5@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=c122d64b5ab2ff77ab4fc3478885bdb316cdfc54 commit c122d64b5ab2ff77ab4fc3478885bdb316cdfc54 Author: Ariel Ehrenberg <aehrenberg@nvidia.com> AuthorDate: 2026-06-04 15:46:28 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2026-07-20 20:26:07 +0000 mlx5ib: allocate IB queue counters as a shared resource (cherry picked from commit 412aa220aeb920dcbc0f2b3effbbb51ad41c7fc3) --- sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c b/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c index 728ea19756b8..599361549763 100644 --- a/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c +++ b/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c @@ -3251,9 +3251,17 @@ static void mlx5_disable_roce(struct mlx5_ib_dev *dev) static void mlx5_ib_dealloc_q_port_counter(struct mlx5_ib_dev *dev, u8 port_num) { - mlx5_vport_dealloc_q_counter(dev->mdev, - MLX5_INTERFACE_PROTOCOL_IB, - dev->port[port_num].q_cnt_id); + u32 in[MLX5_ST_SZ_DW(dealloc_q_counter_in)] = {}; + u32 out[MLX5_ST_SZ_DW(dealloc_q_counter_out)] = {}; + + if (!dev->port[port_num].q_cnt_id) + return; + + MLX5_SET(dealloc_q_counter_in, in, opcode, + MLX5_CMD_OP_DEALLOC_Q_COUNTER); + MLX5_SET(dealloc_q_counter_in, in, counter_set_id, + dev->port[port_num].q_cnt_id); + mlx5_cmd_exec(dev->mdev, in, sizeof(in), out, sizeof(out)); dev->port[port_num].q_cnt_id = 0; } @@ -3267,19 +3275,31 @@ static void mlx5_ib_dealloc_q_counters(struct mlx5_ib_dev *dev) static int mlx5_ib_alloc_q_counters(struct mlx5_ib_dev *dev) { + u32 in[MLX5_ST_SZ_DW(alloc_q_counter_in)] = {}; + u32 out[MLX5_ST_SZ_DW(alloc_q_counter_out)] = {}; int i; int ret; + MLX5_SET(alloc_q_counter_in, in, opcode, MLX5_CMD_OP_ALLOC_Q_COUNTER); + /* + * On devices that support user contexts, allocate the queue counters + * as a shared resource so QPs owned by a user context (DEVX uid) can + * reference them; otherwise RST2INIT_QP fails with a firmware "bad + * resource state" error. + */ + if (MLX5_CAP_GEN(dev->mdev, log_max_uctx)) + MLX5_SET(alloc_q_counter_in, in, uid, MLX5_SHARED_RESOURCE_UID); + for (i = 0; i < dev->num_ports; i++) { - ret = mlx5_vport_alloc_q_counter(dev->mdev, - MLX5_INTERFACE_PROTOCOL_IB, - &dev->port[i].q_cnt_id); + ret = mlx5_cmd_exec(dev->mdev, in, sizeof(in), out, sizeof(out)); if (ret) { mlx5_ib_warn(dev, "couldn't allocate queue counter for port %d, err %d\n", i + 1, ret); goto dealloc_counters; } + dev->port[i].q_cnt_id = MLX5_GET(alloc_q_counter_out, out, + counter_set_id); } return 0;home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a5e8acd.1dce4.eaaad5>
