RDMA/mlx5: Ensure created mkeys always have a populated rb_key
authorJason Gunthorpe <jgg@nvidia.com>
Tue, 28 May 2024 12:52:54 +0000 (15:52 +0300)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 21 Jun 2024 13:19:36 +0000 (10:19 -0300)
commit2e4c02fdecf2f6f55cefe48cb82d93fa4f8e2204
treea6af03c672bb28074f8b729c453413ec3ae3a2c1
parentf637040c3339a2ed8c12d65ad03f9552386e2fe7
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: 8c1185fef68c ("RDMA/mlx5: Change check for cacheable mkeys")
Fixes: dd1b913fb0d0 ("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>
drivers/infiniband/hw/mlx5/mr.c