mlx4: enforce device max fmr maps in fmr alloc
PATCH 1/1 mlx4: enforce device max fmr maps in fmr alloc
ConnectX devices have a limit on the number of mappings that can be done on an FMR before having to call sync_tpt. The current implementation does not handle sync_tpt automatically, therefore we need to limit this when allocating an FMR. This patch adds max_fmr_maps field to mlx4_caps and enforces this maximum value on allocations.
Signed-off-by Eli Cohen <eli-VPRAkNaXOzVWk0Htik3J/[email protected]>
--- drivers/infiniband/hw/mlx4/main.c | 2 +- drivers/net/ethernet/mellanox/mlx4/main.c | 2 ++ drivers/net/ethernet/mellanox/mlx4/mr.c | 3 +++ include/linux/mlx4/device.h | 1 + 4 files changed, 7 insertions(+), 1 deletions(-)
drivers/infiniband/hw/mlx4/main.c +1 -1
@@ -163,7 +163,7 @@ static int mlx4_ib_query_device(struct ib_device *ibdev, props->max_mcast_qp_attach = dev->dev->caps.num_qp_per_mgm; props->max_total_mcast_qp_attach = props->max_mcast_qp_attach * props->max_mcast_grp; - props->max_map_per_fmr = (1 << (32 -ilog2 (dev->dev->caps.num_mpts))) -1 ; + props->max_map_per_fmr = dev->dev->caps.max_fmr_maps; out:kfree (in_mad);
drivers/net/ethernet/mellanox/mlx4/main.c +2 -0
@@ -1131,6 +1131,8 @@ static int mlx4_init_hca(struct mlx4_dev *dev) goto err_stop_fw; } + dev->caps.max_fmr_maps = (1 << (32 -ilog2 (dev->caps.num_mpts))) -1 ; + init_hca.log_uar_sz =ilog2 (dev->caps.num_uars); init_hca.uar_page_sz =PAGE_SHIFT -12 ;
drivers/net/ethernet/mellanox/mlx4/mr.c +3 -0
@@ -816,6 +816,9 @@ int mlx4_fmr_alloc(struct mlx4_dev *dev, u32 pd, u32 access, int max_pages,u64 mtt_offset;int err = -ENOMEM ; +if (max_maps > dev->caps.max_fmr_maps) +return -EINVAL ; +if (page_shift < (ffs (dev->caps.page_size_cap) -1 ) || page_shift >=32 )return -EINVAL ;
include/linux/mlx4/device.h +1 -0
@@ -273,6 +273,7 @@ struct mlx4_caps {int num_comp_vectors;int comp_pool;int num_mpts; +int max_fmr_maps;int num_mtts;int fmr_reserved_mtts;int reserved_mtts;
Signature · 6 lines
1.7.9 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html