linux/drivers/infiniband/hw
Jason Gunthorpe 2a4b19c30a RDMA/mlx5: Fix handling of IOVA != user_va in ODP paths
commit 8ffc324851 upstream.

Till recently it was not possible for userspace to specify a different
IOVA, but with the new ibv_reg_mr_iova() library call this can be done.

To compute the user_va we must compute:
  user_va = (iova - iova_start) + user_va_start

while being cautious of overflow and other math problems.

The iova is not reliably stored in the mmkey when the MR is created. Only
the cached creation path (the common one) set it, so it must also be set
when creating uncached MRs.

Fix the weird use of iova when computing the starting page index in the
MR. In the normal case, when iova == umem.address:
  iova & (~(BIT(page_shift) - 1)) ==
  ALIGN_DOWN(umem.address, odp->page_size) ==
  ib_umem_start(odp)

And when iova is different using it in math with a user_va is wrong.

Finally, do not allow an implicit ODP to be created with a non-zero IOVA
as we have no support for that.

Fixes: 7bdf65d411 ("IB/mlx5: Handle page faults")
Signed-off-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2020-02-14 16:52:56 -05:00
..
bnxt_re RDMA/bnxt_re: Fix Send Work Entry state check while polling completions 2020-01-03 15:27:22 -04:00
cxgb4 RDMA subsystem updates for 5.5 2019-11-27 10:17:28 -08:00
efa treewide: Use sizeof_field() macro 2019-12-09 10:36:44 -08:00
hfi1 IB/hfi1: Adjust flow PSN with the correct resync_psn 2020-01-03 16:48:01 -04:00
hns RDMA subsystem updates for 5.5 2019-11-27 10:17:28 -08:00
i40iw RDMA/i40iw: fix a potential NULL pointer dereference 2020-02-14 16:52:56 -05:00
mlx4 IB/mlx4: Fix leak in id_map_find_del 2020-02-14 16:52:56 -05:00
mlx5 RDMA/mlx5: Fix handling of IOVA != user_va in ODP paths 2020-02-14 16:52:56 -05:00
mthca IB/umem: remove the dmasync argument to ib_umem_get 2019-11-17 10:37:00 -04:00
ocrdma IB/umem: remove the dmasync argument to ib_umem_get 2019-11-17 10:37:00 -04:00
qedr RDMA subsystem updates for 5.5 2019-11-27 10:17:28 -08:00
qib RDMA/qib: Validate ->show()/store() callbacks before calling them 2019-11-14 11:49:15 -04:00
usnic mm/gup: add make_dirty arg to put_user_pages_dirty_lock() 2019-09-24 15:54:08 -07:00
vmw_pvrdma IB/umem: remove the dmasync argument to ib_umem_get 2019-11-17 10:37:00 -04:00
Makefile RDMA/iw_cxgb3: Remove the iw_cxgb3 module from kernel 2019-10-04 15:08:59 -03:00