RDMA/mlx5: Prevent UMR usage with RO only when we have RO caps
authorMichael Guralnik <michaelgur@mellanox.com>
Thu, 27 Feb 2020 11:38:34 +0000 (13:38 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 2 Mar 2020 15:10:38 +0000 (11:10 -0400)
Relaxed ordering is not supported in UMR so we are disabling UMR usage
when user passes relaxed ordering access flag.

Enable using UMR when user requested relaxed ordering but there are no
relaxed ordering capabilities.

This will prevent user from unnecessarily registering a new mkey.

Fixes: d6de0bb1850f ("RDMA/mlx5: Set relaxed ordering when requested")
Link: https://lore.kernel.org/r/20200227113834.94233-1-leon@kernel.org
Signed-off-by: Michael Guralnik <michaelgur@mellanox.com>
Reviewed-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/mlx5/mlx5_ib.h

index d9bffcc935875b00c5e1bebf51bac72a16a16845..f21d446249b8a0e0f1b7865415872d709b756f2e 100644 (file)
@@ -1532,7 +1532,9 @@ static inline bool mlx5_ib_can_use_umr(struct mlx5_ib_dev *dev,
            MLX5_CAP_GEN(dev->mdev, umr_modify_atomic_disabled))
                return false;
 
-       if (access_flags & IB_ACCESS_RELAXED_ORDERING)
+       if (access_flags & IB_ACCESS_RELAXED_ORDERING &&
+           (MLX5_CAP_GEN(dev->mdev, relaxed_ordering_write) ||
+            MLX5_CAP_GEN(dev->mdev, relaxed_ordering_read)))
                return false;
 
        return true;