linux/drivers/infiniband/hw/hns
Yangyang Li 98a6151907 RDMA/hns: Fix a calltrace when registering MR from userspace
ibmr.device is assigned after MR is successfully registered, but both
write_mtpt() and frmr_write_mtpt() accesses it during the mr registration
process, which may cause the following error when trying to register MR in
userspace and pbl_hop_num is set to 0.

  pc : hns_roce_mtr_find+0xa0/0x200 [hns_roce]
  lr : set_mtpt_pbl+0x54/0x118 [hns_roce_hw_v2]
  sp : ffff00023e73ba20
  x29: ffff00023e73ba20 x28: ffff00023e73bad8
  x27: 0000000000000000 x26: 0000000000000000
  x25: 0000000000000002 x24: 0000000000000000
  x23: ffff00023e73bad0 x22: 0000000000000000
  x21: ffff0000094d9000 x20: 0000000000000000
  x19: ffff8020a6bdb2c0 x18: 0000000000000000
  x17: 0000000000000000 x16: 0000000000000000
  x15: 0000000000000000 x14: 0000000000000000
  x13: 0140000000000000 x12: 0040000000000041
  x11: ffff000240000000 x10: 0000000000001000
  x9 : 0000000000000000 x8 : ffff802fb7558480
  x7 : ffff802fb7558480 x6 : 000000000003483d
  x5 : ffff00023e73bad0 x4 : 0000000000000002
  x3 : ffff00023e73bad8 x2 : 0000000000000000
  x1 : 0000000000000000 x0 : ffff0000094d9708
  Call trace:
   hns_roce_mtr_find+0xa0/0x200 [hns_roce]
   set_mtpt_pbl+0x54/0x118 [hns_roce_hw_v2]
   hns_roce_v2_write_mtpt+0x14c/0x168 [hns_roce_hw_v2]
   hns_roce_mr_enable+0x6c/0x148 [hns_roce]
   hns_roce_reg_user_mr+0xd8/0x130 [hns_roce]
   ib_uverbs_reg_mr+0x14c/0x2e0 [ib_uverbs]
   ib_uverbs_write+0x27c/0x3e8 [ib_uverbs]
   __vfs_write+0x60/0x190
   vfs_write+0xac/0x1c0
   ksys_write+0x6c/0xd8
   __arm64_sys_write+0x24/0x30
   el0_svc_common+0x78/0x130
   el0_svc_handler+0x38/0x78
   el0_svc+0x8/0xc

Solve above issue by adding a pointer of structure hns_roce_dev as a
parameter of write_mtpt() and frmr_write_mtpt(), so that both of these
functions can access it before finishing MR's registration.

Fixes: 9b2cf76c9f ("RDMA/hns: Optimize PBL buffer allocation process")
Link: https://lore.kernel.org/r/1592314629-51715-1-git-send-email-liweihang@huawei.com
Signed-off-by: Yangyang Li <liyangyang20@huawei.com>
Signed-off-by: Weihang Li <liweihang@huawei.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
2020-06-18 10:47:04 -03:00
..
hns_roce_ah.c RDMA: Group create AH arguments in struct 2020-05-02 20:19:53 -03:00
hns_roce_alloc.c RDMA/hns: Change all page_shift to unsigned 2020-05-25 14:02:12 -03:00
hns_roce_cmd.c RDMA/hns: Optimize cmd init and mode selection for hip08 2019-09-16 10:52:20 -03:00
hns_roce_cmd.h RDMA/hns: Rename the functions used inside creating cq 2019-11-25 10:31:48 -04:00
hns_roce_common.h RDMA/hns: Remove unused code about assert 2020-05-25 14:02:12 -03:00
hns_roce_cq.c RDMA/hns: Add CQ flag instead of independent enable flag 2020-05-25 14:02:11 -03:00
hns_roce_db.c IB: Allow calls to ib_umem_get from kernel ULPs 2020-01-16 16:14:28 +02:00
hns_roce_device.h RDMA/hns: Fix a calltrace when registering MR from userspace 2020-06-18 10:47:04 -03:00
hns_roce_hem.c RDMA/hns: Change all page_shift to unsigned 2020-05-25 14:02:12 -03:00
hns_roce_hem.h RDMA/hns: Change all page_shift to unsigned 2020-05-25 14:02:12 -03:00
hns_roce_hw_v1.c RDMA/hns: Fix a calltrace when registering MR from userspace 2020-06-18 10:47:04 -03:00
hns_roce_hw_v1.h RDMA/hns: Remove asynchronic QP destroy 2019-04-24 10:55:31 -03:00
hns_roce_hw_v2_dfx.c RDMA/hns: Dump detailed driver-specific CQ 2019-04-08 13:05:25 -03:00
hns_roce_hw_v2.c RDMA/hns: Fix a calltrace when registering MR from userspace 2020-06-18 10:47:04 -03:00
hns_roce_hw_v2.h RDMA/hns: Remove redundant type cast for general pointers 2020-05-25 14:20:45 -03:00
hns_roce_main.c RDMA/hns: Remove unused code about assert 2020-05-25 14:02:12 -03:00
hns_roce_mr.c RDMA/hns: Fix a calltrace when registering MR from userspace 2020-06-18 10:47:04 -03:00
hns_roce_pd.c RDMA/hns: Unify format of prints 2020-03-26 16:52:26 -03:00
hns_roce_qp.c RDMA/hns: Remove redundant parameters from free_srq/qp_wrid() 2020-05-25 14:20:45 -03:00
hns_roce_restrack.c RDMA/hns: Fix memory leak on 'context' on error return path 2019-10-28 13:41:23 -03:00
hns_roce_srq.c RDMA/hns: Remove redundant parameters from free_srq/qp_wrid() 2020-05-25 14:20:45 -03:00
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
Makefile RDMA/hns: Fix build error again 2019-10-29 16:16:54 -03:00