linux/drivers/infiniband/hw/mlx5
Jason Gunthorpe ef3642c4f5 RDMA/mlx5: Fix error unwinds for rereg_mr
This is all a giant train wreck of error handling, in many cases the MR is
left in some corrupted state where continuing on is going to lead to
chaos, or various unwinds/order is missed.

rereg had three possible completely different actions, depending on flags
and various details about the MR. Split the three actions into three
functions, and call the right action from the start.

For each action carefully design the error handling to fit the action:

- UMR access/PD update is a simple UMR, if it fails the MR isn't changed,
  so do nothing

- PAS update over UMR is multiple UMR operations. To keep everything sane
  revoke access to the MKey while it is being changed and restore it once
  the MR is correct.

- Recreating the mkey should completely build a parallel MR with a fully
  loaded PAS then swap and destroy the old one. If it fails the original
  should be left untouched. This is handled in the core code. Directly
  call the normal MR creation functions, possibly re-using the existing
  umem.

Add support for working with ODP MRs. The READ/WRITE access flags can be
changed by UMR and we can trivially convert to/from ODP MRs using the
logic to build a completely new MR.

This new logic also fixes various problems with MRs continuing to work
while their PAS lists are no longer valid, eg during a page size change.

Link: https://lore.kernel.org/r/20201130075839.278575-6-leon@kernel.org
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2020-12-07 14:06:23 -04:00
..
ah.c RDMA: Restore ability to fail on AH destroy 2020-09-09 13:57:22 -03:00
cmd.c RDMA: Convert RWQ table logic to ib_core allocation scheme 2020-09-17 14:04:33 -03:00
cmd.h RDMA: Convert RWQ table logic to ib_core allocation scheme 2020-09-17 14:04:33 -03:00
cong.c RDMA/mlx5: Update mlx5_ib to use new cmd interface 2020-05-06 17:42:45 -03:00
counters.c RDMA/mlx5: Fix type warning of sizeof in __mlx5_ib_alloc_counters() 2020-09-25 09:17:42 -03:00
counters.h RDMA/mlx5: Separate counters from main.c 2020-07-07 14:05:51 -03:00
cq.c RDMA/mlx5: mlx5_umem_find_best_quantized_pgoff() for CQ 2020-11-16 16:53:30 -04:00
devx.c RDMA/uverbs: Check ODP in ib_check_mr_access() as well 2020-12-07 14:06:23 -04:00
devx.h RDMA/mlx5: Cleanup DEVX initialization flow 2020-07-07 14:05:51 -03:00
doorbell.c
fs.c RDMA/core: Postpone uobject cleanup on failure till FD close 2020-11-12 12:32:17 -04:00
fs.h RDMA/mlx5: Separate flow steering logic from main.c 2020-07-07 14:05:51 -03:00
gsi.c RDMA/mlx5: Delete not needed GSI QP signal QP type 2020-09-29 13:09:49 -03:00
ib_rep.c
ib_rep.h RDMA/mlx5: Assign profile before calling stages 2020-05-06 17:52:01 -03:00
ib_virt.c net/mlx5: Update vport.c to new cmd interface 2020-04-23 21:42:02 +03:00
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
mad.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
main.c Merge branch 'for-rc' into rdma.git 2020-11-17 15:20:26 -04:00
Makefile RDMA/mlx5: Separate flow steering logic from main.c 2020-07-07 14:05:51 -03:00
mem.c RDMA/mlx5: Silence the overflow warning while building offset mask 2020-11-26 15:49:05 -04:00
mlx5_ib.h RDMA/mlx5: Reorganize mlx5_ib_reg_user_mr() 2020-12-07 14:06:23 -04:00
mr.c RDMA/mlx5: Fix error unwinds for rereg_mr 2020-12-07 14:06:23 -04:00
odp.c RDMA/mlx5: Reorganize mlx5_ib_reg_user_mr() 2020-12-07 14:06:23 -04:00
qos.c RDMA/core: Allow the ioctl layer to abort a fully created uobject 2020-05-21 20:10:46 -03:00
qp.c RDMA/core: Allow drivers to disable restrack DB 2020-11-27 11:38:46 -04:00
qp.h RDMA: Restore ability to return error for destroy WQ 2020-09-09 14:14:29 -03:00
qpc.c RDMA: Restore ability to return error for destroy WQ 2020-09-09 14:14:29 -03:00
restrack.c RDMA/mlx5: Separate restrack callbacks initialization from main.c 2020-07-07 14:05:51 -03:00
restrack.h RDMA/mlx5: Separate restrack callbacks initialization from main.c 2020-07-07 14:05:51 -03:00
srq_cmd.c RDMA/mlx5: Lower setting the umem's PAS for SRQ 2020-11-16 16:53:30 -04:00
srq.c RDMA/mlx5: Lower setting the umem's PAS for SRQ 2020-11-16 16:53:30 -04:00
srq.h RDMA/mlx5: Lower setting the umem's PAS for SRQ 2020-11-16 16:53:30 -04:00
std_types.c RDMA/mlx5: Introduce UAPI to query PD attributes 2020-07-06 19:50:34 -03:00
wr.c RDMA/mlx5: Clarify what the UMR is for when creating MRs 2020-09-18 13:02:43 -03:00
wr.h RDMA/mlx5: Move all WR logic from qp.c to separate file 2020-05-06 17:42:45 -03:00