diff options
author | Eli Cohen <eli@dev.mellanox.co.il> | 2012-02-09 20:10:06 +0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2012-02-26 13:43:37 +0400 |
commit | a5bbe892da9441835cb6fece26d9bbd95fc820be (patch) | |
tree | 2642ee58996918ae4a09be9d82d97a6516eb215b /drivers/net/ethernet/mellanox/mlx4/mr.c | |
parent | 4ba6b8eaa9d67d03fb653cb8a13afca3236d4d70 (diff) | |
download | linux-a5bbe892da9441835cb6fece26d9bbd95fc820be.tar.xz |
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
mlx4_ib driver reports the limit correctly in max_map_per_fmr in
.query_device(), but mlx4_core doesn't check it when actually
allocating FMRs.
Add a max_fmr_maps field to struct mlx4_caps and enforce this maximum
value on FMR allocations.
Signed-off-by: Eli Cohen <eli@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/mr.c')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/mr.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/mr.c b/drivers/net/ethernet/mellanox/mlx4/mr.c index 25a80d71fb2a..5b7c06e0cd05 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mr.c +++ b/drivers/net/ethernet/mellanox/mlx4/mr.c @@ -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; |