| From 9fcc15bb17eb3749c37a78a46451c42e31e458ce Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 1 Oct 2019 12:38:16 -0300 |
| Subject: RDMA/mlx5: Do not allow rereg of a ODP MR |
| |
| From: Jason Gunthorpe <jgg@mellanox.com> |
| |
| [ Upstream commit 880505cfef1d086d18b59d2920eb2160429ffa1f ] |
| |
| This code is completely broken, the umem of a ODP MR simply cannot be |
| discarded without a lot more locking, nor can an ODP mkey be blithely |
| destroyed via destroy_mkey(). |
| |
| Fixes: 6aec21f6a832 ("IB/mlx5: Page faults handling infrastructure") |
| Link: https://lore.kernel.org/r/20191001153821.23621-2-jgg@ziepe.ca |
| Reviewed-by: Artemy Kovalyov <artemyko@mellanox.com> |
| Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/infiniband/hw/mlx5/mr.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c |
| index 3401f5f6792e6..c4ba8838d2c46 100644 |
| --- a/drivers/infiniband/hw/mlx5/mr.c |
| +++ b/drivers/infiniband/hw/mlx5/mr.c |
| @@ -1423,6 +1423,9 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start, |
| if (!mr->umem) |
| return -EINVAL; |
| |
| + if (is_odp_mr(mr)) |
| + return -EOPNOTSUPP; |
| + |
| if (flags & IB_MR_REREG_TRANS) { |
| addr = virt_addr; |
| len = length; |
| @@ -1468,8 +1471,6 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start, |
| } |
| |
| mr->allocated_from_cache = 0; |
| - if (IS_ENABLED(CONFIG_INFINIBAND_ON_DEMAND_PAGING)) |
| - mr->live = 1; |
| } else { |
| /* |
| * Send a UMR WQE |
| @@ -1498,7 +1499,6 @@ int mlx5_ib_rereg_user_mr(struct ib_mr *ib_mr, int flags, u64 start, |
| |
| set_mr_fields(dev, mr, npages, len, access_flags); |
| |
| - update_odp_mr(mr); |
| return 0; |
| |
| err: |
| -- |
| 2.20.1 |
| |