Skip to content

Commit 2e4c02f

Browse files
committed
RDMA/mlx5: Ensure created mkeys always have a populated rb_key
cachable and mmkey.rb_key together are used by mlx5_revoke_mr() to put the MR/mkey back into the cache. In all cases they should be set correctly. alloc_cacheable_mr() was setting cachable but not filling rb_key, resulting in cache_ent_find_and_store() bucketing them all into a 0 length entry. implicit_get_child_mr()/mlx5_ib_alloc_implicit_mr() failed to set cachable or rb_key at all, so the cache was not working at all for implicit ODP. Cc: stable@vger.kernel.org Fixes: 8c1185f ("RDMA/mlx5: Change check for cacheable mkeys") Fixes: dd1b913 ("RDMA/mlx5: Cache all user cacheable mkeys on dereg MR flow") Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Link: https://lore.kernel.org/r/7778c02dfa0999a30d6746c79a23dd7140a9c729.1716900410.git.leon@kernel.org Signed-off-by: Leon Romanovsky <leon@kernel.org>
1 parent f637040 commit 2e4c02f

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
@@ -718,6 +718,8 @@ static struct mlx5_ib_mr *_mlx5_mr_cache_alloc(struct mlx5_ib_dev *dev,
718718
}
719719
mr->mmkey.cache_ent = ent;
720720
mr->mmkey.type = MLX5_MKEY_MR;
721+
mr->mmkey.rb_key = ent->rb_key;
722+
mr->mmkey.cacheable = true;
721723
init_waitqueue_head(&mr->mmkey.wait);
722724
return mr;
723725
}
@@ -1168,7 +1170,6 @@ static struct mlx5_ib_mr *alloc_cacheable_mr(struct ib_pd *pd,
11681170
mr->ibmr.pd = pd;
11691171
mr->umem = umem;
11701172
mr->page_shift = order_base_2(page_size);
1171-
mr->mmkey.cacheable = true;
11721173
set_mr_fields(dev, mr, umem->length, access_flags, iova);
11731174

11741175
return mr;

0 commit comments

Comments
 (0)