]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
RDMA/mlx5: Round max_rd_atomic/max_dest_rd_atomic up instead of down
authorPatrisious Haddad <phaddad@nvidia.com>
Thu, 10 Oct 2024 08:50:23 +0000 (11:50 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Nov 2024 15:25:52 +0000 (16:25 +0100)
[ Upstream commit 78ed28e08e74da6265e49e19206e1bcb8b9a7f0d ]

After the cited commit below max_dest_rd_atomic and max_rd_atomic values
are being rounded down to the next power of 2. As opposed to the old
behavior and mlx4 driver where they used to be rounded up instead.

In order to stay consistent with older code and other drivers, revert to
using fls round function which rounds up to the next power of 2.

Fixes: f18e26af6aba ("RDMA/mlx5: Convert modify QP to use MLX5_SET macros")
Link: https://patch.msgid.link/r/d85515d6ef21a2fa8ef4c8293dce9b58df8a6297.1728550179.git.leon@kernel.org
Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
Reviewed-by: Maher Sanalla <msanalla@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/hw/mlx5/qp.c

index d4b5ce37c2cbdbb88190c8bb3e2ae8f3df65be68..d2b4db783b2540bdbc0a5c1836ddee613c449b2e 100644 (file)
@@ -4182,14 +4182,14 @@ static int __mlx5_ib_modify_qp(struct ib_qp *ibqp,
                MLX5_SET(qpc, qpc, retry_count, attr->retry_cnt);
 
        if (attr_mask & IB_QP_MAX_QP_RD_ATOMIC && attr->max_rd_atomic)
-               MLX5_SET(qpc, qpc, log_sra_max, ilog2(attr->max_rd_atomic));
+               MLX5_SET(qpc, qpc, log_sra_max, fls(attr->max_rd_atomic - 1));
 
        if (attr_mask & IB_QP_SQ_PSN)
                MLX5_SET(qpc, qpc, next_send_psn, attr->sq_psn);
 
        if (attr_mask & IB_QP_MAX_DEST_RD_ATOMIC && attr->max_dest_rd_atomic)
                MLX5_SET(qpc, qpc, log_rra_max,
-                        ilog2(attr->max_dest_rd_atomic));
+                        fls(attr->max_dest_rd_atomic - 1));
 
        if (attr_mask & (IB_QP_ACCESS_FLAGS | IB_QP_MAX_DEST_RD_ATOMIC)) {
                err = set_qpc_atomic_flags(qp, attr, attr_mask, qpc);