mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
IB/mlx5: Add support for big MRs
Make use of extended UMR translation offset. Signed-off-by: Artemy Kovalyov <artemyko@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3161625589
commit
c438fde1c2
@ -634,6 +634,7 @@ struct mlx5_ib_dev {
|
||||
int fill_delay;
|
||||
#ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
|
||||
struct ib_odp_caps odp_caps;
|
||||
u64 odp_max_size;
|
||||
/*
|
||||
* Sleepable RCU that prevents destruction of MRs while they are still
|
||||
* being used by a page fault handler.
|
||||
|
@ -1121,8 +1121,9 @@ static struct mlx5_ib_mr *reg_create(struct ib_mr *ibmr, struct ib_pd *pd,
|
||||
goto err_1;
|
||||
}
|
||||
pas = (__be64 *)MLX5_ADDR_OF(create_mkey_in, in, klm_pas_mtt);
|
||||
mlx5_ib_populate_pas(dev, umem, page_shift, pas,
|
||||
pg_cap ? MLX5_IB_MTT_PRESENT : 0);
|
||||
if (!(access_flags & IB_ACCESS_ON_DEMAND))
|
||||
mlx5_ib_populate_pas(dev, umem, page_shift, pas,
|
||||
pg_cap ? MLX5_IB_MTT_PRESENT : 0);
|
||||
|
||||
/* The pg_access bit allows setting the access flags
|
||||
* in the page list submitted with the command. */
|
||||
@ -1210,7 +1211,8 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
|
||||
mlx5_ib_dbg(dev, "cache empty for order %d", order);
|
||||
mr = NULL;
|
||||
}
|
||||
} else if (access_flags & IB_ACCESS_ON_DEMAND) {
|
||||
} else if (access_flags & IB_ACCESS_ON_DEMAND &&
|
||||
!MLX5_CAP_GEN(dev->mdev, umr_extended_translation_offset)) {
|
||||
err = -EINVAL;
|
||||
pr_err("Got MR registration for ODP MR > 512MB, not supported for Connect-IB");
|
||||
goto error;
|
||||
|
@ -121,6 +121,11 @@ void mlx5_ib_internal_fill_odp_caps(struct mlx5_ib_dev *dev)
|
||||
|
||||
caps->general_caps = IB_ODP_SUPPORT;
|
||||
|
||||
if (MLX5_CAP_GEN(dev->mdev, umr_extended_translation_offset))
|
||||
dev->odp_max_size = U64_MAX;
|
||||
else
|
||||
dev->odp_max_size = BIT_ULL(MLX5_MAX_UMR_SHIFT + PAGE_SHIFT);
|
||||
|
||||
if (MLX5_CAP_ODP(dev->mdev, ud_odp_caps.send))
|
||||
caps->per_transport_caps.ud_odp_caps |= IB_ODP_SUPPORT_SEND;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user