Skip to content

Commit 4f14c6c

Browse files
mikijoyrleon
authored andcommitted
RDMA/mlx5: Fix assigning access flags to cache mkeys
After the change to use dynamic cache structure, new cache entries can be added and the mkey allocation can no longer assume that all mkeys created for the cache have access_flags equal to zero. Example of a flow that exposes the issue: A user registers MR with RO on a HCA that cannot UMR RO and the mkey is created outside of the cache. When the user deregisters the MR, a new cache entry is created to store mkeys with RO. Later, the user registers 2 MRs with RO. The first MR is reused from the new cache entry. When we try to get the second mkey from the cache we see the entry is empty so we go to the MR cache mkey allocation flow which would have allocated a mkey with no access flags, resulting the user getting a MR without RO. Fixes: dd1b913 ("RDMA/mlx5: Cache all user cacheable mkeys on dereg MR flow") Reviewed-by: Edward Srouji <[email protected]> Signed-off-by: Michael Guralnik <[email protected]> Link: https://lore.kernel.org/r/8a802700b82def3ace3f77cd7a9ad9d734af87e7.1695203958.git.leonro@nvidia.com Signed-off-by: Leon Romanovsky <[email protected]>
1 parent d7f3934 commit 4f14c6c

File tree

1 file changed

+2
-1
lines changed
  • drivers/infiniband/hw/mlx5

1 file changed

+2
-1
lines changed

drivers/infiniband/hw/mlx5/mr.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,8 @@ static int get_mkc_octo_size(unsigned int access_mode, unsigned int ndescs)
301301

302302
static void set_cache_mkc(struct mlx5_cache_ent *ent, void *mkc)
303303
{
304-
set_mkc_access_pd_addr_fields(mkc, 0, 0, ent->dev->umrc.pd);
304+
set_mkc_access_pd_addr_fields(mkc, ent->rb_key.access_flags, 0,
305+
ent->dev->umrc.pd);
305306
MLX5_SET(mkc, mkc, free, 1);
306307
MLX5_SET(mkc, mkc, umr_en, 1);
307308
MLX5_SET(mkc, mkc, access_mode_1_0, ent->rb_key.access_mode & 0x3);

0 commit comments

Comments
 (0)