IB/mlx5: Prevent concurrent MR updates during invalidation
authorMoni Shoua <monis@mellanox.com>
Tue, 23 Jul 2019 06:57:30 +0000 (09:57 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 25 Jul 2019 14:39:38 +0000 (11:39 -0300)
commit296e3a2aad09d328f22e54655c3d736033fe1ae8
tree3b42e41aa6489737190b527d9a76e54a602c4772
parentb9332dad987018745a0c0bb718d12dacfa760489
IB/mlx5: Prevent concurrent MR updates during invalidation

The device requires that memory registration work requests that update the
address translation table of a MR will be fenced if posted together.  This
scenario can happen when address ranges are invalidated by the mmu in
separate concurrent calls to the invalidation callback.

We prefer to block concurrent address updates for a single MR over fencing
since making the decision if a WQE needs fencing will be more expensive
and fencing all WQEs is a too radical choice.

Further, it isn't clear that this code can even run safely concurrently,
so a lock is a safer choice.

Fixes: b4cfe447d47b ("IB/mlx5: Implement on demand paging by adding support for MMU notifiers")
Link: https://lore.kernel.org/r/20190723065733.4899-8-leon@kernel.org
Signed-off-by: Moni Shoua <monis@mellanox.com>
Reviewed-by: Artemy Kovalyov <artemyko@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Reviewed-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/mlx5/odp.c