History

Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma

Pull rdma updates from Jason Gunthorpe: "Another small cycle. Mostly cleanups and bug fixes, quite a bit assisted from bots. There are a few new syzkaller splats that haven't been solved yet but they should get into the rcs in a few weeks, I think. Summary: - Update drivers to use common helpers for GUIDs, pkeys, bitmaps, memset_startat, and others - General code cleanups from bots - Simplify some of the rxe pool code in preparation for a larger rework - Clean out old stuff from hns, including all support for hip06 devices - Fix a bug where GID table entries could be missed if the table had holes in it - Rename paths and sessions in rtrs for better understandability - Consolidate the roce source port selection code - NDR speed support in mlx5" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (83 commits) RDMA/irdma: Remove the redundant return RDMA/rxe: Use the standard method to produce udp source port RDMA/irdma: Make the source udp port vary RDMA/hns: Replace get_udp_sport with rdma_get_udp_sport RDMA/core: Calculate UDP source port based on flow label or lqpn/rqpn IB/qib: Fix typos RDMA/rtrs-clt: Rename rtrs_clt to rtrs_clt_sess RDMA/rtrs-srv: Rename rtrs_srv to rtrs_srv_sess RDMA/rtrs-clt: Rename rtrs_clt_sess to rtrs_clt_path RDMA/rtrs-srv: Rename rtrs_srv_sess to rtrs_srv_path RDMA/rtrs: Rename rtrs_sess to rtrs_path RDMA/hns: Modify the hop num of HIP09 EQ to 1 IB/iser: Align coding style across driver IB/iser: Remove un-needed casting to/from void pointer IB/iser: Don't suppress send completions IB/iser: Rename ib_ret local variable IB/iser: Fix RNR errors IB/iser: Remove deprecated pi_guard module param IB/mlx5: Expose NDR speed through MAD RDMA/cxgb4: Set queue pair state when being queried ...

Linus Torvalds committed 4 years ago

Commit 747c19e2 parents feb7a43 c0fe82b105 files · +2232 −8797Browse files

Unified · Split

105 files
  1. drivers/block/rnbd/rnbd-clt.c +2 −2
  2. drivers/block/rnbd/rnbd-clt.h +1 −1
  3. drivers/block/rnbd/rnbd-srv.c +8 −8
  4. drivers/block/rnbd/rnbd-srv.h +1 −1
  5. drivers/infiniband/core/cache.c +9 −3
  6. drivers/infiniband/core/cma.c +11 −7
  7. drivers/infiniband/core/device.c +2 −1
  8. drivers/infiniband/core/sysfs.c +2 −1
  9. drivers/infiniband/core/umem_odp.c +1 −2
  10. drivers/infiniband/core/uverbs_cmd.c +0 −1
  11. drivers/infiniband/hw/bnxt_re/ib_verbs.c +4 −5
  12. drivers/infiniband/hw/bnxt_re/main.c +1 −2
  13. drivers/infiniband/hw/bnxt_re/qplib_fp.c +5 −6
  14. drivers/infiniband/hw/bnxt_re/qplib_rcfw.c +4 −8
  15. drivers/infiniband/hw/bnxt_re/qplib_rcfw.h +0 −1
  16. drivers/infiniband/hw/bnxt_re/qplib_res.c +0 −50
  17. drivers/infiniband/hw/bnxt_re/qplib_res.h +0 −7
  18. drivers/infiniband/hw/bnxt_re/qplib_sp.c +1 −98
  19. drivers/infiniband/hw/bnxt_re/qplib_sp.h +0 −9
  20. drivers/infiniband/hw/cxgb4/cm.c +3 −2
  21. drivers/infiniband/hw/cxgb4/id_table.c +6 −11
  22. drivers/infiniband/hw/cxgb4/provider.c +5 −3
  23. drivers/infiniband/hw/cxgb4/qp.c +1 −0
  24. drivers/infiniband/hw/hfi1/user_sdma.c +3 −5
  25. drivers/infiniband/hw/hns/Kconfig +2 −15
  26. drivers/infiniband/hw/hns/Makefile +0 −5
  27. drivers/infiniband/hw/hns/hns_roce_ah.c +2 −3
  28. drivers/infiniband/hw/hns/hns_roce_alloc.c +1 −2
  29. drivers/infiniband/hw/hns/hns_roce_cmd.c +5 −6
  30. drivers/infiniband/hw/hns/hns_roce_common.h +0 −202
  31. drivers/infiniband/hw/hns/hns_roce_cq.c +0 −13
  32. drivers/infiniband/hw/hns/hns_roce_db.c +0 −1
  33. drivers/infiniband/hw/hns/hns_roce_device.h +24 −84
  34. drivers/infiniband/hw/hns/hns_roce_hem.c +0 −1
  35. drivers/infiniband/hw/hns/hns_roce_hw_v1.c +0 −4675
  36. drivers/infiniband/hw/hns/hns_roce_hw_v1.h +0 −1147
  37. drivers/infiniband/hw/hns/hns_roce_hw_v2.c +23 −26
  38. drivers/infiniband/hw/hns/hns_roce_hw_v2.h +4 −18
  39. drivers/infiniband/hw/hns/hns_roce_main.c +30 −55
  40. drivers/infiniband/hw/hns/hns_roce_mr.c +10 −22
  41. drivers/infiniband/hw/hns/hns_roce_pd.c +3 −14
  42. drivers/infiniband/hw/hns/hns_roce_qp.c +61 −32
  43. drivers/infiniband/hw/irdma/i40iw_if.c +1 −1
  44. drivers/infiniband/hw/irdma/pble.h +1 −1
  45. drivers/infiniband/hw/irdma/verbs.c +10 −21
  46. drivers/infiniband/hw/mlx4/main.c +12 −22
  47. drivers/infiniband/hw/mlx5/cq.c +4 −1
  48. drivers/infiniband/hw/mlx5/mad.c +14 −9
  49. drivers/infiniband/hw/mlx5/mlx5_ib.h +2 −10
  50. drivers/infiniband/hw/mthca/mthca_allocator.c +5 −10
  51. drivers/infiniband/hw/mthca/mthca_mr.c +11 −14
  52. drivers/infiniband/hw/mthca/mthca_provider.c +6 −14
  53. drivers/infiniband/hw/ocrdma/ocrdma_hw.c +6 −10
  54. drivers/infiniband/hw/ocrdma/ocrdma_main.c +2 −15
  55. drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +8 −10
  56. drivers/infiniband/hw/ocrdma/ocrdma_verbs.h +0 −1
  57. drivers/infiniband/hw/qedr/verbs.c +2 −0
  58. drivers/infiniband/hw/qib/qib_iba6120.c +1 −1
  59. drivers/infiniband/hw/qib/qib_iba7220.c +1 −1
  60. drivers/infiniband/hw/qib/qib_iba7322.c +1 −1
  61. drivers/infiniband/hw/usnic/usnic_ib_sysfs.c +2 −1
  62. drivers/infiniband/hw/usnic/usnic_ib_verbs.c +3 −5
  63. drivers/infiniband/hw/vmw_pvrdma/pvrdma_doorbell.c +5 −5
  64. drivers/infiniband/sw/rxe/Makefile +0 −1
  65. drivers/infiniband/sw/rxe/rxe.c +0 −4
  66. drivers/infiniband/sw/rxe/rxe.h +0 −2
  67. drivers/infiniband/sw/rxe/rxe_comp.c +3 −5
  68. drivers/infiniband/sw/rxe/rxe_cq.c +10 −14
  69. drivers/infiniband/sw/rxe/rxe_loc.h +5 −5
  70. drivers/infiniband/sw/rxe/rxe_mcast.c +5 −6
  71. drivers/infiniband/sw/rxe/rxe_mr.c +3 −3
  72. drivers/infiniband/sw/rxe/rxe_mw.c +9 −12
  73. drivers/infiniband/sw/rxe/rxe_net.c +2 −7
  74. drivers/infiniband/sw/rxe/rxe_opcode.c +370 −369
  75. drivers/infiniband/sw/rxe/rxe_pool.c +84 −93
  76. drivers/infiniband/sw/rxe/rxe_pool.h +26 −28
  77. drivers/infiniband/sw/rxe/rxe_qp.c +3 −3
  78. drivers/infiniband/sw/rxe/rxe_queue.c +4 −5
  79. drivers/infiniband/sw/rxe/rxe_req.c +5 −11
  80. drivers/infiniband/sw/rxe/rxe_srq.c +1 −1
  81. drivers/infiniband/sw/rxe/rxe_sysfs.c +0 −119
  82. drivers/infiniband/sw/rxe/rxe_task.c +8 −10
  83. drivers/infiniband/sw/rxe/rxe_verbs.c +17 −17
  84. drivers/infiniband/sw/rxe/rxe_verbs.h +11 −13
  85. drivers/infiniband/sw/siw/siw_verbs.c +4 −2
  86. drivers/infiniband/ulp/iser/iscsi_iser.c +28 −48
  87. drivers/infiniband/ulp/iser/iscsi_iser.h +3 −20
  88. drivers/infiniband/ulp/iser/iser_initiator.c +41 −65
  89. drivers/infiniband/ulp/iser/iser_memory.c +24 −34
  90. drivers/infiniband/ulp/iser/iser_verbs.c +57 −81
  91. drivers/infiniband/ulp/rtrs/rtrs-clt-stats.c +4 −4
  92. drivers/infiniband/ulp/rtrs/rtrs-clt-sysfs.c +74 −71
  93. drivers/infiniband/ulp/rtrs/rtrs-clt.c +554 −535
  94. drivers/infiniband/ulp/rtrs/rtrs-clt.h +21 −20
  95. drivers/infiniband/ulp/rtrs/rtrs-pri.h +9 −9
  96. drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c +61 −60
  97. drivers/infiniband/ulp/rtrs/rtrs-srv.c +347 −337
  98. drivers/infiniband/ulp/rtrs/rtrs-srv.h +8 −8
  99. drivers/infiniband/ulp/rtrs/rtrs.c +49 −49
  100. drivers/infiniband/ulp/rtrs/rtrs.h +18 −16
  101. drivers/net/ethernet/chelsio/cxgb4/t4_msg.h +1 −1
  102. include/rdma/ib_mad.h +1 −0
  103. include/rdma/ib_smi.h +11 −1
  104. include/rdma/ib_verbs.h +17 −0
  105. include/uapi/rdma/hns-abi.h +2 −0
drivers/block/rnbd/rnbd-clt.c+2−2
@@ -433,7 +433,7 @@ static void msg_conf(void *priv, int errno) · 432 unmodified lines
433433 schedule_work(&iu->work);
434434 }
435435
436−static int send_usr_msg(struct rtrs_clt *rtrs, int dir,
436+static int send_usr_msg(struct rtrs_clt_sess *rtrs, int dir,
437437 struct rnbd_iu *iu, struct kvec *vec,
438438 size_t len, struct scatterlist *sg, unsigned int sg_len,
439439 void (*conf)(struct work_struct *work),
@@ -1010,7 +1010,7 @@ static int rnbd_client_xfer_request(struct rnbd_clt_dev *dev, · 570 unmodified lines
10101010 struct request *rq,
10111011 struct rnbd_iu *iu)
10121012 {
1013− struct rtrs_clt *rtrs = dev->sess->rtrs;
1013+ struct rtrs_clt_sess *rtrs = dev->sess->rtrs;
10141014 struct rtrs_permit *permit = iu->permit;
10151015 struct rnbd_msg_io msg;
10161016 struct rtrs_clt_req_ops req_ops;
drivers/block/rnbd/rnbd-clt.h+1−1
@@ -75,7 +75,7 @@ struct rnbd_cpu_qlist { · 74 unmodified lines
7575
7676 struct rnbd_clt_session {
7777 struct list_head list;
78− struct rtrs_clt *rtrs;
78+ struct rtrs_clt_sess *rtrs;
7979 wait_queue_head_t rtrs_waitq;
8080 bool rtrs_ready;
8181 struct rnbd_cpu_qlist __percpu
drivers/block/rnbd/rnbd-srv.c+8−8
@@ -263,15 +263,15 @@ out: · 262 unmodified lines
263263 kfree(srv_sess);
264264 }
265265
266−static int create_sess(struct rtrs_srv *rtrs)
266+static int create_sess(struct rtrs_srv_sess *rtrs)
267267 {
268268 struct rnbd_srv_session *srv_sess;
269− char sessname[NAME_MAX];
269+ char pathname[NAME_MAX];
270270 int err;
271271
272− err = rtrs_srv_get_sess_name(rtrs, sessname, sizeof(sessname));
272+ err = rtrs_srv_get_path_name(rtrs, pathname, sizeof(pathname));
273273 if (err) {
274− pr_err("rtrs_srv_get_sess_name(%s): %d\n", sessname, err);
274+ pr_err("rtrs_srv_get_path_name(%s): %d\n", pathname, err);
275275
276276 return err;
277277 }
@@ -284,8 +284,8 @@ static int create_sess(struct rtrs_srv *rtrs) · 6 unmodified lines
284284 offsetof(struct rnbd_dev_blk_io, bio),
285285 BIOSET_NEED_BVECS);
286286 if (err) {
287− pr_err("Allocating srv_session for session %s failed\n",
288− sessname);
287+ pr_err("Allocating srv_session for path %s failed\n",
288+ pathname);
289289 kfree(srv_sess);
290290 return err;
291291 }
@@ -298,14 +298,14 @@ static int create_sess(struct rtrs_srv *rtrs) · 6 unmodified lines
298298 mutex_unlock(&sess_lock);
299299
300300 srv_sess->rtrs = rtrs;
301− strscpy(srv_sess->sessname, sessname, sizeof(srv_sess->sessname));
301+ strscpy(srv_sess->sessname, pathname, sizeof(srv_sess->sessname));
302302
303303 rtrs_srv_set_sess_priv(rtrs, srv_sess);
304304
305305 return 0;
306306 }
307307
308−static int rnbd_srv_link_ev(struct rtrs_srv *rtrs,
308+static int rnbd_srv_link_ev(struct rtrs_srv_sess *rtrs,
309309 enum rtrs_srv_link_ev ev, void *priv)
310310 {
311311 struct rnbd_srv_session *srv_sess = priv;
drivers/block/rnbd/rnbd-srv.h+1−1
@@ -20,7 +20,7 @@ · 19 unmodified lines
2020 struct rnbd_srv_session {
2121 /* Entry inside global sess_list */
2222 struct list_head list;
23− struct rtrs_srv *rtrs;
23+ struct rtrs_srv_sess *rtrs;
2424 char sessname[NAME_MAX];
2525 int queue_depth;
2626 struct bio_set sess_bio_set;
drivers/infiniband/core/cache.c+9−3
@@ -956,7 +956,7 @@ int rdma_query_gid(struct ib_device *device, u32 port_num, · 955 unmodified lines
956956 {
957957 struct ib_gid_table *table;
958958 unsigned long flags;
959− int res = -EINVAL;
959+ int res;
960960
961961 if (!rdma_is_port_valid(device, port_num))
962962 return -EINVAL;
@@ -964,9 +964,15 @@ int rdma_query_gid(struct ib_device *device, u32 port_num, · 1 unmodified line
964964 table = rdma_gid_table(device, port_num);
965965 read_lock_irqsave(&table->rwlock, flags);
966966
967− if (index < 0 || index >= table->sz ||
968− !is_gid_entry_valid(table->data_vec[index]))
967+ if (index < 0 || index >= table->sz) {
968+ res = -EINVAL;
969969 goto done;
970+ }
971+
972+ if (!is_gid_entry_valid(table->data_vec[index])) {
973+ res = -ENOENT;
974+ goto done;
975+ }
970976
971977 memcpy(gid, &table->data_vec[index]->attr.gid, sizeof(*gid));
972978 res = 0;
drivers/infiniband/core/cma.c+11−7
@@ -766,6 +766,7 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv) · 765 unmodified lines
766766 unsigned int p;
767767 u16 pkey, index;
768768 enum ib_port_state port_state;
769+ int ret;
769770 int i;
770771
771772 cma_dev = NULL;
@@ -784,9 +785,14 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv) · 12 unmodified lines
784785
785786 if (ib_get_cached_port_state(cur_dev->device, p, &port_state))
786787 continue;
787− for (i = 0; !rdma_query_gid(cur_dev->device,
788− p, i, &gid);
789− i++) {
788+
789+ for (i = 0; i < cur_dev->device->port_data[p].immutable.gid_tbl_len;
790+ ++i) {
791+ ret = rdma_query_gid(cur_dev->device, p, i,
792+ &gid);
793+ if (ret)
794+ continue;
795+
790796 if (!memcmp(&gid, dgid, sizeof(gid))) {
791797 cma_dev = cur_dev;
792798 sgid = gid;
@@ -4033,8 +4039,7 @@ static int cma_resolve_ib_udp(struct rdma_id_private *id_priv, · 3240 unmodified lines
40334039
40344040 memset(&req, 0, sizeof req);
40354041 offset = cma_user_data_offset(id_priv);
4036− req.private_data_len = offset + conn_param->private_data_len;
4037− if (req.private_data_len < conn_param->private_data_len)
4042+ if (check_add_overflow(offset, conn_param->private_data_len, &req.private_data_len))
40384043 return -EINVAL;
40394044
40404045 if (req.private_data_len) {
@@ -4093,8 +4098,7 @@ static int cma_connect_ib(struct rdma_id_private *id_priv, · 52 unmodified lines
40934098
40944099 memset(&req, 0, sizeof req);
40954100 offset = cma_user_data_offset(id_priv);
4096− req.private_data_len = offset + conn_param->private_data_len;
4097− if (req.private_data_len < conn_param->private_data_len)
4101+ if (check_add_overflow(offset, conn_param->private_data_len, &req.private_data_len))
40984102 return -EINVAL;
40994103
41004104 if (req.private_data_len) {
drivers/infiniband/core/device.c+2−1
@@ -2461,7 +2461,8 @@ int ib_find_gid(struct ib_device *device, union ib_gid *gid, · 2460 unmodified lines
24612461 ++i) {
24622462 ret = rdma_query_gid(device, port, i, &tmp_gid);
24632463 if (ret)
2464− return ret;
2464+ continue;
2465+
24652466 if (!memcmp(&tmp_gid, gid, sizeof *gid)) {
24662467 *port_num = port;
24672468 if (index)
drivers/infiniband/core/sysfs.c+2−1
@@ -433,6 +433,7 @@ static struct attribute *port_default_attrs[] = { · 432 unmodified lines
433433 &ib_port_attr_link_layer.attr,
434434 NULL
435435 };
436+ATTRIBUTE_GROUPS(port_default);
436437
437438 static ssize_t print_ndev(const struct ib_gid_attr *gid_attr, char *buf)
438439 {
@@ -774,7 +775,7 @@ static void ib_port_gid_attr_release(struct kobject *kobj) · 335 unmodified lines
774775 static struct kobj_type port_type = {
775776 .release = ib_port_release,
776777 .sysfs_ops = &port_sysfs_ops,
777− .default_attrs = port_default_attrs
778+ .default_groups = port_default_groups,
778779 };
779780
780781 static struct kobj_type gid_attr_type = {
drivers/infiniband/core/umem_odp.c+1−2
@@ -227,7 +227,6 @@ struct ib_umem_odp *ib_umem_odp_get(struct ib_device *device, · 226 unmodified lines
227227 const struct mmu_interval_notifier_ops *ops)
228228 {
229229 struct ib_umem_odp *umem_odp;
230− struct mm_struct *mm;
231230 int ret;
232231
233232 if (WARN_ON_ONCE(!(access & IB_ACCESS_ON_DEMAND)))
@@ -241,7 +240,7 @@ struct ib_umem_odp *ib_umem_odp_get(struct ib_device *device, · 7 unmodified lines
241240 umem_odp->umem.length = size;
242241 umem_odp->umem.address = addr;
243242 umem_odp->umem.writable = ib_access_writable(access);
244− umem_odp->umem.owning_mm = mm = current->mm;
243+ umem_odp->umem.owning_mm = current->mm;
245244 umem_odp->notifier.ops = ops;
246245
247246 umem_odp->page_shift = PAGE_SHIFT;
drivers/infiniband/core/uverbs_cmd.c+0−1
@@ -1399,7 +1399,6 @@ static int create_qp(struct uverbs_attr_bundle *attrs, · 1398 unmodified lines
13991399 attr.sq_sig_type = cmd->sq_sig_all ? IB_SIGNAL_ALL_WR :
14001400 IB_SIGNAL_REQ_WR;
14011401 attr.qp_type = cmd->qp_type;
1402− attr.create_flags = 0;
14031402
14041403 attr.cap.max_send_wr = cmd->max_send_wr;
14051404 attr.cap.max_recv_wr = cmd->max_recv_wr;
drivers/infiniband/hw/bnxt_re/ib_verbs.c+4−5
@@ -262,13 +262,12 @@ void bnxt_re_query_fw_str(struct ib_device *ibdev, char *str) · 261 unmodified lines
262262 int bnxt_re_query_pkey(struct ib_device *ibdev, u32 port_num,
263263 u16 index, u16 *pkey)
264264 {
265− struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev);
265+ if (index > 0)
266+ return -EINVAL;
266267
267− /* Ignore port_num */
268+ *pkey = IB_DEFAULT_PKEY_FULL;
268269
269− memset(pkey, 0, sizeof(*pkey));
270− return bnxt_qplib_get_pkey(&rdev->qplib_res,
271− &rdev->qplib_res.pkey_tbl, index, pkey);
270+ return 0;
272271 }
273272
274273 int bnxt_re_query_gid(struct ib_device *ibdev, u32 port_num,
drivers/infiniband/hw/bnxt_re/main.c+1−2
@@ -893,7 +893,6 @@ static int bnxt_re_srqn_handler(struct bnxt_qplib_nq *nq, · 892 unmodified lines
893893 struct bnxt_re_srq *srq = container_of(handle, struct bnxt_re_srq,
894894 qplib_srq);
895895 struct ib_event ib_event;
896− int rc = 0;
897896
898897 ib_event.device = &srq->rdev->ibdev;
899898 ib_event.element.srq = &srq->ib_srq;
@@ -907,7 +906,7 @@ static int bnxt_re_srqn_handler(struct bnxt_qplib_nq *nq, · 7 unmodified lines
907906 (*srq->ib_srq.event_handler)(&ib_event,
908907 srq->ib_srq.srq_context);
909908 }
910− return rc;
909+ return 0;
911910 }
912911
913912 static int bnxt_re_cqn_handler(struct bnxt_qplib_nq *nq,
drivers/infiniband/hw/bnxt_re/qplib_fp.c+5−6
@@ -46,6 +46,7 @@ · 45 unmodified lines
4646 #include <linux/delay.h>
4747 #include <linux/prefetch.h>
4848 #include <linux/if_ether.h>
49+#include <rdma/ib_mad.h>
4950
5051 #include "roce_hsi.h"
5152
@@ -1232,7 +1233,7 @@ int bnxt_qplib_modify_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp) · 1180 unmodified lines
12321233 struct bnxt_qplib_rcfw *rcfw = res->rcfw;
12331234 struct cmdq_modify_qp req;
12341235 struct creq_modify_qp_resp resp;
1235− u16 cmd_flags = 0, pkey;
1236+ u16 cmd_flags = 0;
12361237 u32 temp32[4];
12371238 u32 bmask;
12381239 int rc;
@@ -1255,11 +1256,9 @@ int bnxt_qplib_modify_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp) · 16 unmodified lines
12551256 if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_ACCESS)
12561257 req.access = qp->access;
12571258
1258− if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_PKEY) {
1259− if (!bnxt_qplib_get_pkey(res, &res->pkey_tbl,
1260− qp->pkey_index, &pkey))
1261− req.pkey = cpu_to_le16(pkey);
1262− }
1259+ if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_PKEY)
1260+ req.pkey = cpu_to_le16(IB_DEFAULT_PKEY_FULL);
1261+
12631262 if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_QKEY)
12641263 req.qkey = cpu_to_le32(qp->qkey);
12651264
drivers/infiniband/hw/bnxt_re/qplib_rcfw.c+4−8
@@ -555,7 +555,7 @@ skip_ctx_setup: · 554 unmodified lines
555555
556556 void bnxt_qplib_free_rcfw_channel(struct bnxt_qplib_rcfw *rcfw)
557557 {
558− kfree(rcfw->cmdq.cmdq_bitmap);
558+ bitmap_free(rcfw->cmdq.cmdq_bitmap);
559559 kfree(rcfw->qp_tbl);
560560 kfree(rcfw->crsqe_tbl);
561561 bnxt_qplib_free_hwq(rcfw->res, &rcfw->cmdq.hwq);
@@ -572,7 +572,6 @@ int bnxt_qplib_alloc_rcfw_channel(struct bnxt_qplib_res *res, · 10 unmodified lines
572572 struct bnxt_qplib_sg_info sginfo = {};
573573 struct bnxt_qplib_cmdq_ctx *cmdq;
574574 struct bnxt_qplib_creq_ctx *creq;
575− u32 bmap_size = 0;
576575
577576 rcfw->pdev = res->pdev;
578577 cmdq = &rcfw->cmdq;
@@ -613,13 +612,10 @@ int bnxt_qplib_alloc_rcfw_channel(struct bnxt_qplib_res *res, · 34 unmodified lines
613612 if (!rcfw->crsqe_tbl)
614613 goto fail;
615614
616− bmap_size = BITS_TO_LONGS(rcfw->cmdq_depth) * sizeof(unsigned long);
617− cmdq->cmdq_bitmap = kzalloc(bmap_size, GFP_KERNEL);
615+ cmdq->cmdq_bitmap = bitmap_zalloc(rcfw->cmdq_depth, GFP_KERNEL);
618616 if (!cmdq->cmdq_bitmap)
619617 goto fail;
620618
621− cmdq->bmap_size = bmap_size;
622−
623619 /* Allocate one extra to hold the QP1 entries */
624620 rcfw->qp_tbl_size = qp_tbl_sz + 1;
625621 rcfw->qp_tbl = kcalloc(rcfw->qp_tbl_size, sizeof(struct bnxt_qplib_qp_node),
@@ -667,8 +663,8 @@ void bnxt_qplib_disable_rcfw_channel(struct bnxt_qplib_rcfw *rcfw) · 41 unmodified lines
667663 iounmap(cmdq->cmdq_mbox.reg.bar_reg);
668664 iounmap(creq->creq_db.reg.bar_reg);
669665
670− indx = find_first_bit(cmdq->cmdq_bitmap, cmdq->bmap_size);
671− if (indx != cmdq->bmap_size)
666+ indx = find_first_bit(cmdq->cmdq_bitmap, rcfw->cmdq_depth);
667+ if (indx != rcfw->cmdq_depth)
672668 dev_err(&rcfw->pdev->dev,
673669 "disabling RCFW with pending cmd-bit %lx\n", indx);
674670
drivers/infiniband/hw/bnxt_re/qplib_rcfw.h+0−1
@@ -152,7 +152,6 @@ struct bnxt_qplib_cmdq_ctx { · 151 unmodified lines
152152 wait_queue_head_t waitq;
153153 unsigned long flags;
154154 unsigned long *cmdq_bitmap;
155− u32 bmap_size;
156155 u32 seq_num;
157156 };
158157
drivers/infiniband/hw/bnxt_re/qplib_res.c+0−50
@@ -649,31 +649,6 @@ static void bnxt_qplib_init_sgid_tbl(struct bnxt_qplib_sgid_tbl *sgid_tbl, · 648 unmodified lines
649649 memset(sgid_tbl->hw_id, -1, sizeof(u16) * sgid_tbl->max);
650650 }
651651
652−static void bnxt_qplib_free_pkey_tbl(struct bnxt_qplib_res *res,
653− struct bnxt_qplib_pkey_tbl *pkey_tbl)
654−{
655− if (!pkey_tbl->tbl)
656− dev_dbg(&res->pdev->dev, "PKEY tbl not present\n");
657− else
658− kfree(pkey_tbl->tbl);
659−
660− pkey_tbl->tbl = NULL;
661− pkey_tbl->max = 0;
662− pkey_tbl->active = 0;
663−}
664−
665−static int bnxt_qplib_alloc_pkey_tbl(struct bnxt_qplib_res *res,
666− struct bnxt_qplib_pkey_tbl *pkey_tbl,
667− u16 max)
668−{
669− pkey_tbl->tbl = kcalloc(max, sizeof(u16), GFP_KERNEL);
670− if (!pkey_tbl->tbl)
671− return -ENOMEM;
672−
673− pkey_tbl->max = max;
674− return 0;
675−};
676−
677652 /* PDs */
678653 int bnxt_qplib_alloc_pd(struct bnxt_qplib_pd_tbl *pdt, struct bnxt_qplib_pd *pd)
679654 {
@@ -843,24 +818,6 @@ unmap_io: · 163 unmodified lines
843818 return -ENOMEM;
844819 }
845820
846−/* PKEYs */
847−static void bnxt_qplib_cleanup_pkey_tbl(struct bnxt_qplib_pkey_tbl *pkey_tbl)
848−{
849− memset(pkey_tbl->tbl, 0, sizeof(u16) * pkey_tbl->max);
850− pkey_tbl->active = 0;
851−}
852−
853−static void bnxt_qplib_init_pkey_tbl(struct bnxt_qplib_res *res,
854− struct bnxt_qplib_pkey_tbl *pkey_tbl)
855−{
856− u16 pkey = 0xFFFF;
857−
858− memset(pkey_tbl->tbl, 0, sizeof(u16) * pkey_tbl->max);
859−
860− /* pkey default = 0xFFFF */
861− bnxt_qplib_add_pkey(res, pkey_tbl, &pkey, false);
862−}
863−
864821 /* Stats */
865822 static void bnxt_qplib_free_stats_ctx(struct pci_dev *pdev,
866823 struct bnxt_qplib_stats *stats)
@@ -891,21 +848,18 @@ static int bnxt_qplib_alloc_stats_ctx(struct pci_dev *pdev, · 24 unmodified lines
891848
892849 void bnxt_qplib_cleanup_res(struct bnxt_qplib_res *res)
893850 {
894− bnxt_qplib_cleanup_pkey_tbl(&res->pkey_tbl);
895851 bnxt_qplib_cleanup_sgid_tbl(res, &res->sgid_tbl);
896852 }
897853
898854 int bnxt_qplib_init_res(struct bnxt_qplib_res *res)
899855 {
900856 bnxt_qplib_init_sgid_tbl(&res->sgid_tbl, res->netdev);
901− bnxt_qplib_init_pkey_tbl(res, &res->pkey_tbl);
902857
903858 return 0;
904859 }
905860
906861 void bnxt_qplib_free_res(struct bnxt_qplib_res *res)
907862 {
908− bnxt_qplib_free_pkey_tbl(res, &res->pkey_tbl);
909863 bnxt_qplib_free_sgid_tbl(res, &res->sgid_tbl);
910864 bnxt_qplib_free_pd_tbl(&res->pd_tbl);
911865 bnxt_qplib_free_dpi_tbl(res, &res->dpi_tbl);
@@ -924,10 +878,6 @@ int bnxt_qplib_alloc_res(struct bnxt_qplib_res *res, struct pci_dev *pdev, · 12 unmodified lines
924878 if (rc)
925879 goto fail;
926880
927− rc = bnxt_qplib_alloc_pkey_tbl(res, &res->pkey_tbl, dev_attr->max_pkey);
928− if (rc)
929− goto fail;
930−
931881 rc = bnxt_qplib_alloc_pd_tbl(res, &res->pd_tbl, dev_attr->max_pd);
932882 if (rc)
933883 goto fail;
drivers/infiniband/hw/bnxt_re/qplib_res.h+0−7
@@ -185,12 +185,6 @@ struct bnxt_qplib_sgid_tbl { · 184 unmodified lines
185185 u8 *vlan;
186186 };
187187
188−struct bnxt_qplib_pkey_tbl {
189− u16 *tbl;
190− u16 max;
191− u16 active;
192−};
193−
194188 struct bnxt_qplib_dpi {
195189 u32 dpi;
196190 void __iomem *dbr;
@@ -258,7 +252,6 @@ struct bnxt_qplib_res { · 61 unmodified lines
258252 struct bnxt_qplib_rcfw *rcfw;
259253 struct bnxt_qplib_pd_tbl pd_tbl;
260254 struct bnxt_qplib_sgid_tbl sgid_tbl;
261− struct bnxt_qplib_pkey_tbl pkey_tbl;
262255 struct bnxt_qplib_dpi_tbl dpi_tbl;
263256 bool prio;
264257 bool is_vf;
drivers/infiniband/hw/bnxt_re/qplib_sp.c+1−98
@@ -146,17 +146,7 @@ int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw, · 145 unmodified lines
146146 attr->max_srq = le16_to_cpu(sb->max_srq);
147147 attr->max_srq_wqes = le32_to_cpu(sb->max_srq_wr) - 1;
148148 attr->max_srq_sges = sb->max_srq_sge;
149− attr->max_pkey = le32_to_cpu(sb->max_pkeys);
150− /*
151− * Some versions of FW reports more than 0xFFFF.
152− * Restrict it for now to 0xFFFF to avoid
153− * reporting trucated value
154− */
155− if (attr->max_pkey > 0xFFFF) {
156− /* ib_port_attr::pkey_tbl_len is u16 */
157− attr->max_pkey = 0xFFFF;
158− }
159−
149+ attr->max_pkey = 1;
160150 attr->max_inline_data = le32_to_cpu(sb->max_inline_data);
161151 attr->l2_db_size = (sb->l2_db_space_size + 1) *
162152 (0x01 << RCFW_DBR_BASE_PAGE_SHIFT);
@@ -414,93 +404,6 @@ int bnxt_qplib_update_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl, · 251 unmodified lines
414404 return rc;
415405 }
416406
417−/* pkeys */
418−int bnxt_qplib_get_pkey(struct bnxt_qplib_res *res,
419− struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 index,
420− u16 *pkey)
421−{
422− if (index == 0xFFFF) {
423− *pkey = 0xFFFF;
424− return 0;
425− }
426− if (index >= pkey_tbl->max) {
427− dev_err(&res->pdev->dev,
428− "Index %d exceeded PKEY table max (%d)\n",
429− index, pkey_tbl->max);
430− return -EINVAL;
431− }
432− memcpy(pkey, &pkey_tbl->tbl[index], sizeof(*pkey));
433− return 0;
434−}
435−
436−int bnxt_qplib_del_pkey(struct bnxt_qplib_res *res,
437− struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
438− bool update)
439−{
440− int i, rc = 0;
441−
442− if (!pkey_tbl) {
443− dev_err(&res->pdev->dev, "PKEY table not allocated\n");
444− return -EINVAL;
445− }
446−
447− /* Do we need a pkey_lock here? */
448− if (!pkey_tbl->active) {
449− dev_err(&res->pdev->dev, "PKEY table has no active entries\n");
450− return -ENOMEM;
451− }
452− for (i = 0; i < pkey_tbl->max; i++) {
453− if (!memcmp(&pkey_tbl->tbl[i], pkey, sizeof(*pkey)))
454− break;
455− }
456− if (i == pkey_tbl->max) {
457− dev_err(&res->pdev->dev,
458− "PKEY 0x%04x not found in the pkey table\n", *pkey);
459− return -ENOMEM;
460− }
461− memset(&pkey_tbl->tbl[i], 0, sizeof(*pkey));
462− pkey_tbl->active--;
463−
464− /* unlock */
465− return rc;
466−}
467−
468−int bnxt_qplib_add_pkey(struct bnxt_qplib_res *res,
469− struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
470− bool update)
471−{
472− int i, free_idx, rc = 0;
473−
474− if (!pkey_tbl) {
475− dev_err(&res->pdev->dev, "PKEY table not allocated\n");
476− return -EINVAL;
477− }
478−
479− /* Do we need a pkey_lock here? */
480− if (pkey_tbl->active == pkey_tbl->max) {
481− dev_err(&res->pdev->dev, "PKEY table is full\n");
482− return -ENOMEM;
483− }
484− free_idx = pkey_tbl->max;
485− for (i = 0; i < pkey_tbl->max; i++) {
486− if (!memcmp(&pkey_tbl->tbl[i], pkey, sizeof(*pkey)))
487− return -EALREADY;
488− else if (!pkey_tbl->tbl[i] && free_idx == pkey_tbl->max)
489− free_idx = i;
490− }
491− if (free_idx == pkey_tbl->max) {
492− dev_err(&res->pdev->dev,
493− "PKEY table is FULL but count is not MAX??\n");
494− return -ENOMEM;
495− }
496− /* Add PKEY to the pkey_tbl */
497− memcpy(&pkey_tbl->tbl[free_idx], pkey, sizeof(*pkey));
498− pkey_tbl->active++;
499−
500− /* unlock */
501− return rc;
502−}
503−
504407 /* AH */
505408 int bnxt_qplib_create_ah(struct bnxt_qplib_res *res, struct bnxt_qplib_ah *ah,
506409 bool block)
drivers/infiniband/hw/bnxt_re/qplib_sp.h+0−9
@@ -255,15 +255,6 @@ int bnxt_qplib_add_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl, · 254 unmodified lines
255255 int bnxt_qplib_update_sgid(struct bnxt_qplib_sgid_tbl *sgid_tbl,
256256 struct bnxt_qplib_gid *gid, u16 gid_idx,
257257 const u8 *smac);
258−int bnxt_qplib_get_pkey(struct bnxt_qplib_res *res,
259− struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 index,
260− u16 *pkey);
261−int bnxt_qplib_del_pkey(struct bnxt_qplib_res *res,
262− struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
263− bool update);
264−int bnxt_qplib_add_pkey(struct bnxt_qplib_res *res,
265− struct bnxt_qplib_pkey_tbl *pkey_tbl, u16 *pkey,
266− bool update);
267258 int bnxt_qplib_get_dev_attr(struct bnxt_qplib_rcfw *rcfw,
268259 struct bnxt_qplib_dev_attr *attr, bool vf);
269260 int bnxt_qplib_set_func_resources(struct bnxt_qplib_res *res,
drivers/infiniband/hw/cxgb4/cm.c+3−2
@@ -2471,7 +2471,8 @@ static int accept_cr(struct c4iw_ep *ep, struct sk_buff *skb, · 2470 unmodified lines
24712471 skb_get(skb);
24722472 rpl = cplhdr(skb);
24732473 if (!is_t4(adapter_type)) {
2474− skb_trim(skb, roundup(sizeof(*rpl5), 16));
2474+ BUILD_BUG_ON(sizeof(*rpl5) != roundup(sizeof(*rpl5), 16));
2475+ skb_trim(skb, sizeof(*rpl5));
24752476 rpl5 = (void *)rpl;
24762477 INIT_TP_WR(rpl5, ep->hwtid);
24772478 } else {
@@ -2487,7 +2488,7 @@ static int accept_cr(struct c4iw_ep *ep, struct sk_buff *skb, · 9 unmodified lines
24872488 opt2 |= CONG_CNTRL_V(CONG_ALG_TAHOE);
24882489 opt2 |= T5_ISS_F;
24892490 rpl5 = (void *)rpl;
2490− memset(&rpl5->iss, 0, roundup(sizeof(*rpl5)-sizeof(*rpl), 16));
2491+ memset_after(rpl5, 0, iss);
24912492 if (peer2peer)
24922493 isn += 4;
24932494 rpl5->iss = cpu_to_be32(isn);
drivers/infiniband/hw/cxgb4/id_table.c+6−11
@@ -59,7 +59,7 @@ u32 c4iw_id_alloc(struct c4iw_id_table *alloc) · 58 unmodified lines
5959 alloc->last = obj + 1;
6060 if (alloc->last >= alloc->max)
6161 alloc->last = 0;
62− set_bit(obj, alloc->table);
62+ __set_bit(obj, alloc->table);
6363 obj += alloc->start;
6464 } else
6565 obj = -1;
@@ -75,37 +75,32 @@ void c4iw_id_free(struct c4iw_id_table *alloc, u32 obj) · 9 unmodified lines
7575 obj -= alloc->start;
7676
7777 spin_lock_irqsave(&alloc->lock, flags);
78− clear_bit(obj, alloc->table);
78+ __clear_bit(obj, alloc->table);
7979 spin_unlock_irqrestore(&alloc->lock, flags);
8080 }
8181
8282 int c4iw_id_table_alloc(struct c4iw_id_table *alloc, u32 start, u32 num,
8383 u32 reserved, u32 flags)
8484 {
85− int i;
86−
8785 alloc->start = start;
8886 alloc->flags = flags;
8987 if (flags & C4IW_ID_TABLE_F_RANDOM)
9088 alloc->last = prandom_u32() % RANDOM_SKIP;
9189 else
9290 alloc->last = 0;
93− alloc->max = num;
91+ alloc->max = num;
9492 spin_lock_init(&alloc->lock);
95− alloc->table = kmalloc_array(BITS_TO_LONGS(num), sizeof(long),
96− GFP_KERNEL);
93+ alloc->table = bitmap_zalloc(num, GFP_KERNEL);
9794 if (!alloc->table)
9895 return -ENOMEM;
9996
100− bitmap_zero(alloc->table, num);
10197 if (!(alloc->flags & C4IW_ID_TABLE_F_EMPTY))
102− for (i = 0; i < reserved; ++i)
103− set_bit(i, alloc->table);
98+ bitmap_set(alloc->table, 0, reserved);
10499
105100 return 0;
106101 }
107102
108103 void c4iw_id_table_free(struct c4iw_id_table *alloc)
109104 {
110− kfree(alloc->table);
105+ bitmap_free(alloc->table);
111106 }
drivers/infiniband/hw/cxgb4/provider.c+5−3
@@ -41,6 +41,7 @@ · 40 unmodified lines
4141 #include <linux/ethtool.h>
4242 #include <linux/rtnetlink.h>
4343 #include <linux/inetdevice.h>
44+#include <net/addrconf.h>
4445 #include <linux/io.h>
4546
4647 #include <asm/irq.h>
@@ -264,7 +265,8 @@ static int c4iw_query_device(struct ib_device *ibdev, struct ib_device_attr *pro · 217 unmodified lines
264265 return -EINVAL;
265266
266267 dev = to_c4iw_dev(ibdev);
267− memcpy(&props->sys_image_guid, dev->rdev.lldi.ports[0]->dev_addr, 6);
268+ addrconf_addr_eui48((u8 *)&props->sys_image_guid,
269+ dev->rdev.lldi.ports[0]->dev_addr);
268270 props->hw_ver = CHELSIO_CHIP_RELEASE(dev->rdev.lldi.adapter_type);
269271 props->fw_ver = dev->rdev.lldi.fw_vers;
270272 props->device_cap_flags = dev->device_cap_flags;
@@ -525,8 +527,8 @@ void c4iw_register_device(struct work_struct *work) · 254 unmodified lines
525527 struct c4iw_dev *dev = ctx->dev;
526528
527529 pr_debug("c4iw_dev %p\n", dev);
528− memset(&dev->ibdev.node_guid, 0, sizeof(dev->ibdev.node_guid));
529− memcpy(&dev->ibdev.node_guid, dev->rdev.lldi.ports[0]->dev_addr, 6);
530+ addrconf_addr_eui48((u8 *)&dev->ibdev.node_guid,
531+ dev->rdev.lldi.ports[0]->dev_addr);
530532 dev->device_cap_flags = IB_DEVICE_LOCAL_DMA_LKEY | IB_DEVICE_MEM_WINDOW;
531533 if (fastreg_support)
532534 dev->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
drivers/infiniband/hw/cxgb4/qp.c+1−0
@@ -2460,6 +2460,7 @@ int c4iw_ib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, · 2459 unmodified lines
24602460 memset(attr, 0, sizeof(*attr));
24612461 memset(init_attr, 0, sizeof(*init_attr));
24622462 attr->qp_state = to_ib_qp_state(qhp->attr.state);
2463+ attr->cur_qp_state = to_ib_qp_state(qhp->attr.state);
24632464 init_attr->cap.max_send_wr = qhp->attr.sq_num_entries;
24642465 init_attr->cap.max_recv_wr = qhp->attr.rq_num_entries;
24652466 init_attr->cap.max_send_sge = qhp->attr.sq_max_sges;
drivers/infiniband/hw/hfi1/user_sdma.c+3−5
@@ -161,9 +161,7 @@ int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt, · 160 unmodified lines
161161 if (!pq->reqs)
162162 goto pq_reqs_nomem;
163163
164− pq->req_in_use = kcalloc(BITS_TO_LONGS(hfi1_sdma_comp_ring_size),
165− sizeof(*pq->req_in_use),
166− GFP_KERNEL);
164+ pq->req_in_use = bitmap_zalloc(hfi1_sdma_comp_ring_size, GFP_KERNEL);
167165 if (!pq->req_in_use)
168166 goto pq_reqs_no_in_use;
169167
@@ -210,7 +208,7 @@ cq_comps_nomem: · 40 unmodified lines
210208 cq_nomem:
211209 kmem_cache_destroy(pq->txreq_cache);
212210 pq_txreq_nomem:
213− kfree(pq->req_in_use);
211+ bitmap_free(pq->req_in_use);
214212 pq_reqs_no_in_use:
215213 kfree(pq->reqs);
216214 pq_reqs_nomem:
@@ -257,7 +255,7 @@ int hfi1_user_sdma_free_queues(struct hfi1_filedata *fd, · 40 unmodified lines
257255 pq->wait,
258256 !atomic_read(&pq->n_reqs));
259257 kfree(pq->reqs);
260− kfree(pq->req_in_use);
258+ bitmap_free(pq->req_in_use);
261259 kmem_cache_destroy(pq->txreq_cache);
262260 flush_pq_iowait(pq);
263261 kfree(pq);
drivers/infiniband/hw/hns/Kconfig+2−15
@@ -5,22 +5,9 @@ config INFINIBAND_HNS · 4 unmodified lines
55 depends on ARM64 || (COMPILE_TEST && 64BIT)
66 depends on (HNS_DSAF && HNS_ENET) || HNS3
77 help
8− This is a RoCE/RDMA driver for the Hisilicon RoCE engine. The engine
9− is used in Hisilicon Hip06 and more further ICT SoC based on
10− platform device.
8+ This is a RoCE/RDMA driver for the Hisilicon RoCE engine.
119
12− To compile HIP06 or HIP08 driver as module, choose M here.
13−
14−config INFINIBAND_HNS_HIP06
15− bool "Hisilicon Hip06 Family RoCE support"
16− depends on INFINIBAND_HNS && HNS && HNS_DSAF && HNS_ENET
17− depends on INFINIBAND_HNS=m || (HNS_DSAF=y && HNS_ENET=y)
18− help
19− RoCE driver support for Hisilicon RoCE engine in Hisilicon Hip06 and
20− Hip07 SoC. These RoCE engines are platform devices.
21−
22− To compile this driver, choose Y here: if INFINIBAND_HNS is m, this
23− module will be called hns-roce-hw-v1
10+ To compile HIP08 driver as module, choose M here.
2411
2512 config INFINIBAND_HNS_HIP08
2613 bool "Hisilicon Hip08 Family RoCE support"
drivers/infiniband/hw/hns/Makefile+0−5
@@ -9,11 +9,6 @@ hns-roce-objs := hns_roce_main.o hns_roce_cmd.o hns_roce_pd.o \ · 8 unmodified lines
99 hns_roce_ah.o hns_roce_hem.o hns_roce_mr.o hns_roce_qp.o \
1010 hns_roce_cq.o hns_roce_alloc.o hns_roce_db.o hns_roce_srq.o hns_roce_restrack.o
1111
12−ifdef CONFIG_INFINIBAND_HNS_HIP06
13−hns-roce-hw-v1-objs := hns_roce_hw_v1.o $(hns-roce-objs)
14−obj-$(CONFIG_INFINIBAND_HNS) += hns-roce-hw-v1.o
15−endif
16−
1712 ifdef CONFIG_INFINIBAND_HNS_HIP08
1813 hns-roce-hw-v2-objs := hns_roce_hw_v2.o hns_roce_hw_v2_dfx.o $(hns-roce-objs)
1914 obj-$(CONFIG_INFINIBAND_HNS) += hns-roce-hw-v2.o
drivers/infiniband/hw/hns/hns_roce_ah.c+2−3
@@ -30,7 +30,6 @@ · 29 unmodified lines
3030 * SOFTWARE.
3131 */
3232
33−#include <linux/platform_device.h>
3433 #include <linux/pci.h>
3534 #include <rdma/ib_addr.h>
3635 #include <rdma/ib_cache.h>
@@ -61,7 +60,7 @@ int hns_roce_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr, · 24 unmodified lines
6160 struct hns_roce_ah *ah = to_hr_ah(ibah);
6261 int ret = 0;
6362
64− if (hr_dev->pci_dev->revision <= PCI_REVISION_ID_HIP08 && udata)
63+ if (hr_dev->pci_dev->revision == PCI_REVISION_ID_HIP08 && udata)
6564 return -EOPNOTSUPP;
6665
6766 ah->av.port = rdma_ah_get_port_num(ah_attr);
@@ -80,7 +79,7 @@ int hns_roce_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr, · 12 unmodified lines
8079 memcpy(ah->av.mac, ah_attr->roce.dmac, ETH_ALEN);
8180
8281 /* HIP08 needs to record vlan info in Address Vector */
83− if (hr_dev->pci_dev->revision <= PCI_REVISION_ID_HIP08) {
82+ if (hr_dev->pci_dev->revision == PCI_REVISION_ID_HIP08) {
8483 ret = rdma_read_gid_l2_fields(ah_attr->grh.sgid_attr,
8584 &ah->av.vlan_id, NULL);
8685 if (ret)
drivers/infiniband/hw/hns/hns_roce_alloc.c+1−2
@@ -31,10 +31,9 @@ · 30 unmodified lines
3131 * SOFTWARE.
3232 */
3333
34−#include <linux/platform_device.h>
3534 #include <linux/vmalloc.h>
36−#include "hns_roce_device.h"
3735 #include <rdma/ib_umem.h>
36+#include "hns_roce_device.h"
3837
3938 void hns_roce_buf_free(struct hns_roce_dev *hr_dev, struct hns_roce_buf *buf)
4039 {
drivers/infiniband/hw/hns/hns_roce_cmd.c+5−6
@@ -31,7 +31,6 @@ · 30 unmodified lines
3131 */
3232
3333 #include <linux/dmapool.h>
34−#include <linux/platform_device.h>
3534 #include "hns_roce_common.h"
3635 #include "hns_roce_device.h"
3736 #include "hns_roce_cmd.h"
@@ -61,7 +60,7 @@ static int __hns_roce_cmd_mbox_poll(struct hns_roce_dev *hr_dev, u64 in_param, · 23 unmodified lines
6160 CMD_POLL_TOKEN, 0);
6261 if (ret) {
6362 dev_err_ratelimited(hr_dev->dev,
64− "failed to post mailbox %x in poll mode, ret = %d.\n",
63+ "failed to post mailbox 0x%x in poll mode, ret = %d.\n",
6564 op, ret);
6665 return ret;
6766 }
@@ -91,7 +90,7 @@ void hns_roce_cmd_event(struct hns_roce_dev *hr_dev, u16 token, u8 status, · 23 unmodified lines
9190
9291 if (unlikely(token != context->token)) {
9392 dev_err_ratelimited(hr_dev->dev,
94− "[cmd] invalid ae token %x,context token is %x!\n",
93+ "[cmd] invalid ae token 0x%x, context token is 0x%x.\n",
9594 token, context->token);
9695 return;
9796 }
@@ -130,14 +129,14 @@ static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param, · 32 unmodified lines
130129 context->token, 1);
131130 if (ret) {
132131 dev_err_ratelimited(dev,
133− "failed to post mailbox %x in event mode, ret = %d.\n",
132+ "failed to post mailbox 0x%x in event mode, ret = %d.\n",
134133 op, ret);
135134 goto out;
136135 }
137136
138137 if (!wait_for_completion_timeout(&context->done,
139138 msecs_to_jiffies(timeout))) {
140− dev_err_ratelimited(dev, "[cmd] token %x mailbox %x timeout.\n",
139+ dev_err_ratelimited(dev, "[cmd] token 0x%x mailbox 0x%x timeout.\n",
141140 context->token, op);
142141 ret = -EBUSY;
143142 goto out;
@@ -145,7 +144,7 @@ static int __hns_roce_cmd_mbox_wait(struct hns_roce_dev *hr_dev, u64 in_param, · 1 unmodified line
145144
146145 ret = context->result;
147146 if (ret)
148− dev_err_ratelimited(dev, "[cmd] token %x mailbox %x error %d\n",
147+ dev_err_ratelimited(dev, "[cmd] token 0x%x mailbox 0x%x error %d.\n",
149148 context->token, op, ret);
150149
151150 out:
drivers/infiniband/hw/hns/hns_roce_common.h+0−202
@@ -104,208 +104,6 @@ · 103 unmodified lines
104104
105105 #define hr_reg_read(ptr, field) _hr_reg_read(ptr, field)
106106
107−#define ROCEE_GLB_CFG_ROCEE_DB_SQ_MODE_S 3
108−#define ROCEE_GLB_CFG_ROCEE_DB_OTH_MODE_S 4
109−
110−#define ROCEE_GLB_CFG_SQ_EXT_DB_MODE_S 5
111−
112−#define ROCEE_GLB_CFG_OTH_EXT_DB_MODE_S 6
113−
114−#define ROCEE_GLB_CFG_ROCEE_PORT_ST_S 10
115−#define ROCEE_GLB_CFG_ROCEE_PORT_ST_M \
116− (((1UL << 6) - 1) << ROCEE_GLB_CFG_ROCEE_PORT_ST_S)
117−
118−#define ROCEE_GLB_CFG_TRP_RAQ_DROP_EN_S 16
119−
120−#define ROCEE_DMAE_USER_CFG1_ROCEE_STREAM_ID_TB_CFG_S 0
121−#define ROCEE_DMAE_USER_CFG1_ROCEE_STREAM_ID_TB_CFG_M \
122− (((1UL << 24) - 1) << ROCEE_DMAE_USER_CFG1_ROCEE_STREAM_ID_TB_CFG_S)
123−
124−#define ROCEE_DMAE_USER_CFG1_ROCEE_CACHE_TB_CFG_S 24
125−#define ROCEE_DMAE_USER_CFG1_ROCEE_CACHE_TB_CFG_M \
126− (((1UL << 4) - 1) << ROCEE_DMAE_USER_CFG1_ROCEE_CACHE_TB_CFG_S)
127−
128−#define ROCEE_DMAE_USER_CFG2_ROCEE_STREAM_ID_PKT_CFG_S 0
129−#define ROCEE_DMAE_USER_CFG2_ROCEE_STREAM_ID_PKT_CFG_M \
130− (((1UL << 24) - 1) << ROCEE_DMAE_USER_CFG2_ROCEE_STREAM_ID_PKT_CFG_S)
131−
132−#define ROCEE_DMAE_USER_CFG2_ROCEE_CACHE_PKT_CFG_S 24
133−#define ROCEE_DMAE_USER_CFG2_ROCEE_CACHE_PKT_CFG_M \
134− (((1UL << 4) - 1) << ROCEE_DMAE_USER_CFG2_ROCEE_CACHE_PKT_CFG_S)
135−
136−#define ROCEE_DB_SQ_WL_ROCEE_DB_SQ_WL_S 0
137−#define ROCEE_DB_SQ_WL_ROCEE_DB_SQ_WL_M \
138− (((1UL << 16) - 1) << ROCEE_DB_SQ_WL_ROCEE_DB_SQ_WL_S)
139−
140−#define ROCEE_DB_SQ_WL_ROCEE_DB_SQ_WL_EMPTY_S 16
141−#define ROCEE_DB_SQ_WL_ROCEE_DB_SQ_WL_EMPTY_M \
142− (((1UL << 16) - 1) << ROCEE_DB_SQ_WL_ROCEE_DB_SQ_WL_EMPTY_S)
143−
144−#define ROCEE_DB_OTHERS_WL_ROCEE_DB_OTH_WL_S 0
145−#define ROCEE_DB_OTHERS_WL_ROCEE_DB_OTH_WL_M \
146− (((1UL << 16) - 1) << ROCEE_DB_OTHERS_WL_ROCEE_DB_OTH_WL_S)
147−
148−#define ROCEE_DB_OTHERS_WL_ROCEE_DB_OTH_WL_EMPTY_S 16
149−#define ROCEE_DB_OTHERS_WL_ROCEE_DB_OTH_WL_EMPTY_M \
150− (((1UL << 16) - 1) << ROCEE_DB_OTHERS_WL_ROCEE_DB_OTH_WL_EMPTY_S)
151−
152−#define ROCEE_RAQ_WL_ROCEE_RAQ_WL_S 0
153−#define ROCEE_RAQ_WL_ROCEE_RAQ_WL_M \
154− (((1UL << 8) - 1) << ROCEE_RAQ_WL_ROCEE_RAQ_WL_S)
155−
156−#define ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_POL_TIME_INTERVAL_S 0
157−#define ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_POL_TIME_INTERVAL_M \
158− (((1UL << 15) - 1) << \
159− ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_POL_TIME_INTERVAL_S)
160−
161−#define ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_RAQ_TIMEOUT_CHK_CFG_S 16
162−#define ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_RAQ_TIMEOUT_CHK_CFG_M \
163− (((1UL << 4) - 1) << \
164− ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_RAQ_TIMEOUT_CHK_CFG_S)
165−
166−#define ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_RAQ_TIMEOUT_CHK_EN_S 20
167−
168−#define ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_EXT_RAQ_MODE 21
169−
170−#define ROCEE_EXT_DB_SQ_H_EXT_DB_SQ_SHIFT_S 0
171−#define ROCEE_EXT_DB_SQ_H_EXT_DB_SQ_SHIFT_M \
172− (((1UL << 5) - 1) << ROCEE_EXT_DB_SQ_H_EXT_DB_SQ_SHIFT_S)
173−
174−#define ROCEE_EXT_DB_SQ_H_EXT_DB_SQ_BA_H_S 5
175−#define ROCEE_EXT_DB_SQ_H_EXT_DB_SQ_BA_H_M \
176− (((1UL << 5) - 1) << ROCEE_EXT_DB_SQ_H_EXT_DB_SQ_BA_H_S)
177−
178−#define ROCEE_EXT_DB_OTH_H_EXT_DB_OTH_SHIFT_S 0
179−#define ROCEE_EXT_DB_OTH_H_EXT_DB_OTH_SHIFT_M \
180− (((1UL << 5) - 1) << ROCEE_EXT_DB_OTH_H_EXT_DB_OTH_SHIFT_S)
181−
182−#define ROCEE_EXT_DB_SQ_H_EXT_DB_OTH_BA_H_S 5
183−#define ROCEE_EXT_DB_SQ_H_EXT_DB_OTH_BA_H_M \
184− (((1UL << 5) - 1) << ROCEE_EXT_DB_SQ_H_EXT_DB_OTH_BA_H_S)
185−
186−#define ROCEE_EXT_RAQ_H_EXT_RAQ_SHIFT_S 0
187−#define ROCEE_EXT_RAQ_H_EXT_RAQ_SHIFT_M \
188− (((1UL << 5) - 1) << ROCEE_EXT_RAQ_H_EXT_RAQ_SHIFT_S)
189−
190−#define ROCEE_EXT_RAQ_H_EXT_RAQ_BA_H_S 8
191−#define ROCEE_EXT_RAQ_H_EXT_RAQ_BA_H_M \
192− (((1UL << 5) - 1) << ROCEE_EXT_RAQ_H_EXT_RAQ_BA_H_S)
193−
194−#define ROCEE_BT_CMD_H_ROCEE_BT_CMD_IN_MDF_S 0
195−#define ROCEE_BT_CMD_H_ROCEE_BT_CMD_IN_MDF_M \
196− (((1UL << 19) - 1) << ROCEE_BT_CMD_H_ROCEE_BT_CMD_IN_MDF_S)
197−
198−#define ROCEE_BT_CMD_H_ROCEE_BT_CMD_S 19
199−
200−#define ROCEE_BT_CMD_H_ROCEE_BT_CMD_MDF_S 20
201−#define ROCEE_BT_CMD_H_ROCEE_BT_CMD_MDF_M \
202− (((1UL << 2) - 1) << ROCEE_BT_CMD_H_ROCEE_BT_CMD_MDF_S)
203−
204−#define ROCEE_BT_CMD_H_ROCEE_BT_CMD_BA_H_S 22
205−#define ROCEE_BT_CMD_H_ROCEE_BT_CMD_BA_H_M \
206− (((1UL << 5) - 1) << ROCEE_BT_CMD_H_ROCEE_BT_CMD_BA_H_S)
207−
208−#define ROCEE_BT_CMD_H_ROCEE_BT_CMD_HW_SYNS_S 31
209−
210−#define ROCEE_QP1C_CFG0_0_ROCEE_QP1C_QP_ST_S 0
211−#define ROCEE_QP1C_CFG0_0_ROCEE_QP1C_QP_ST_M \
212− (((1UL << 3) - 1) << ROCEE_QP1C_CFG0_0_ROCEE_QP1C_QP_ST_S)
213−
214−#define ROCEE_QP1C_CFG3_0_ROCEE_QP1C_RQ_HEAD_S 0
215−#define ROCEE_QP1C_CFG3_0_ROCEE_QP1C_RQ_HEAD_M \
216− (((1UL << 15) - 1) << ROCEE_QP1C_CFG3_0_ROCEE_QP1C_RQ_HEAD_S)
217−
218−#define ROCEE_MB6_ROCEE_MB_CMD_S 0
219−#define ROCEE_MB6_ROCEE_MB_CMD_M \
220− (((1UL << 8) - 1) << ROCEE_MB6_ROCEE_MB_CMD_S)
221−
222−#define ROCEE_MB6_ROCEE_MB_CMD_MDF_S 8
223−#define ROCEE_MB6_ROCEE_MB_CMD_MDF_M \
224− (((1UL << 4) - 1) << ROCEE_MB6_ROCEE_MB_CMD_MDF_S)
225−
226−#define ROCEE_MB6_ROCEE_MB_EVENT_S 14
227−
228−#define ROCEE_MB6_ROCEE_MB_HW_RUN_S 15
229−
230−#define ROCEE_MB6_ROCEE_MB_TOKEN_S 16
231−#define ROCEE_MB6_ROCEE_MB_TOKEN_M \
232− (((1UL << 16) - 1) << ROCEE_MB6_ROCEE_MB_TOKEN_S)
233−
234−#define ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_INP_H_S 0
235−#define ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_INP_H_M \
236− (((1UL << 24) - 1) << ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_INP_H_S)
237−
238−#define ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_MDF_S 24
239−#define ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_MDF_M \
240− (((1UL << 4) - 1) << ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_MDF_S)
241−
242−#define ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_S 28
243−#define ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_M \
244− (((1UL << 3) - 1) << ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_S)
245−
246−#define ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_HW_SYNS_S 31
247−
248−#define ROCEE_SMAC_H_ROCEE_SMAC_H_S 0
249−#define ROCEE_SMAC_H_ROCEE_SMAC_H_M \
250− (((1UL << 16) - 1) << ROCEE_SMAC_H_ROCEE_SMAC_H_S)
251−
252−#define ROCEE_SMAC_H_ROCEE_PORT_MTU_S 16
253−#define ROCEE_SMAC_H_ROCEE_PORT_MTU_M \
254− (((1UL << 4) - 1) << ROCEE_SMAC_H_ROCEE_PORT_MTU_S)
255−
256−#define ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_STATE_S 0
257−#define ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_STATE_M \
258− (((1UL << 2) - 1) << ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_STATE_S)
259−
260−#define ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_AEQE_SHIFT_S 8
261−#define ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_AEQE_SHIFT_M \
262− (((1UL << 4) - 1) << ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_AEQE_SHIFT_S)
263−
264−#define ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQ_ALM_OVF_INT_ST_S 17
265−
266−#define ROCEE_CAEP_AEQE_CUR_IDX_CAEP_AEQ_BT_H_S 0
267−#define ROCEE_CAEP_AEQE_CUR_IDX_CAEP_AEQ_BT_H_M \
268− (((1UL << 5) - 1) << ROCEE_CAEP_AEQE_CUR_IDX_CAEP_AEQ_BT_H_S)
269−
270−#define ROCEE_CAEP_AEQE_CUR_IDX_CAEP_AEQE_CUR_IDX_S 16
271−#define ROCEE_CAEP_AEQE_CUR_IDX_CAEP_AEQE_CUR_IDX_M \
272− (((1UL << 16) - 1) << ROCEE_CAEP_AEQE_CUR_IDX_CAEP_AEQE_CUR_IDX_S)
273−
274−#define ROCEE_CAEP_AEQE_CONS_IDX_CAEP_AEQE_CONS_IDX_S 0
275−#define ROCEE_CAEP_AEQE_CONS_IDX_CAEP_AEQE_CONS_IDX_M \
276− (((1UL << 16) - 1) << ROCEE_CAEP_AEQE_CONS_IDX_CAEP_AEQE_CONS_IDX_S)
277−
278−#define ROCEE_CAEP_CEQC_SHIFT_CAEP_CEQ_ALM_OVF_INT_ST_S 16
279−#define ROCEE_CAEP_CE_IRQ_MASK_CAEP_CEQ_ALM_OVF_MASK_S 1
280−#define ROCEE_CAEP_CEQ_ALM_OVF_CAEP_CEQ_ALM_OVF_S 0
281−
282−#define ROCEE_CAEP_AE_MASK_CAEP_AEQ_ALM_OVF_MASK_S 0
283−#define ROCEE_CAEP_AE_MASK_CAEP_AE_IRQ_MASK_S 1
284−
285−#define ROCEE_CAEP_AE_ST_CAEP_AEQ_ALM_OVF_S 0
286−
287−#define ROCEE_SDB_ISSUE_PTR_SDB_ISSUE_PTR_S 0
288−#define ROCEE_SDB_ISSUE_PTR_SDB_ISSUE_PTR_M \
289− (((1UL << 28) - 1) << ROCEE_SDB_ISSUE_PTR_SDB_ISSUE_PTR_S)
290−
291−#define ROCEE_SDB_SEND_PTR_SDB_SEND_PTR_S 0
292−#define ROCEE_SDB_SEND_PTR_SDB_SEND_PTR_M \
293− (((1UL << 28) - 1) << ROCEE_SDB_SEND_PTR_SDB_SEND_PTR_S)
294−
295−#define ROCEE_SDB_INV_CNT_SDB_INV_CNT_S 0
296−#define ROCEE_SDB_INV_CNT_SDB_INV_CNT_M \
297− (((1UL << 16) - 1) << ROCEE_SDB_INV_CNT_SDB_INV_CNT_S)
298−
299−#define ROCEE_SDB_RETRY_CNT_SDB_RETRY_CT_S 0
300−#define ROCEE_SDB_RETRY_CNT_SDB_RETRY_CT_M \
301− (((1UL << 16) - 1) << ROCEE_SDB_RETRY_CNT_SDB_RETRY_CT_S)
302−
303−#define ROCEE_SDB_CNT_CMP_BITS 16
304−
305−#define ROCEE_TSP_BP_ST_QH_FIFO_ENTRY_S 20
306−
307−#define ROCEE_CNT_CLR_CE_CNT_CLR_CE_S 0
308−
309107 /*************ROCEE_REG DEFINITION****************/
310108 #define ROCEE_VENDOR_ID_REG 0x0
311109 #define ROCEE_VENDOR_PART_ID_REG 0x4
drivers/infiniband/hw/hns/hns_roce_cq.c+0−13
@@ -30,7 +30,6 @@ · 29 unmodified lines
3030 * SOFTWARE.
3131 */
3232
33−#include <linux/platform_device.h>
3433 #include <rdma/ib_umem.h>
3534 #include <rdma/uverbs_ioctl.h>
3635 #include "hns_roce_device.h"
@@ -406,15 +405,6 @@ int hns_roce_create_cq(struct ib_cq *ib_cq, const struct ib_cq_init_attr *attr, · 369 unmodified lines
406405 goto err_cqn;
407406 }
408407
409− /*
410− * For the QP created by kernel space, tptr value should be initialized
411− * to zero; For the QP created by user space, it will cause synchronous
412− * problems if tptr is set to zero here, so we initialize it in user
413− * space.
414− */
415− if (!udata && hr_cq->tptr_addr)
416− *hr_cq->tptr_addr = 0;
417−
418408 if (udata) {
419409 resp.cqn = hr_cq->cqn;
420410 ret = ib_copy_to_udata(udata, &resp,
@@ -441,9 +431,6 @@ int hns_roce_destroy_cq(struct ib_cq *ib_cq, struct ib_udata *udata) · 20 unmodified lines
441431 struct hns_roce_dev *hr_dev = to_hr_dev(ib_cq->device);
442432 struct hns_roce_cq *hr_cq = to_hr_cq(ib_cq);
443433
444− if (hr_dev->hw->destroy_cq)
445− hr_dev->hw->destroy_cq(ib_cq, udata);
446−
447434 free_cqc(hr_dev, hr_cq);
448435 free_cqn(hr_dev, hr_cq->cqn);
449436 free_cq_db(hr_dev, hr_cq, udata);
drivers/infiniband/hw/hns/hns_roce_db.c+0−1
@@ -4,7 +4,6 @@ · 3 unmodified lines
44 * Copyright (c) 2007, 2008 Mellanox Technologies. All rights reserved.
55 */
66
7−#include <linux/platform_device.h>
87 #include <rdma/ib_umem.h>
98 #include "hns_roce_device.h"
109
drivers/infiniband/hw/hns/hns_roce_device.h+24−84
@@ -36,36 +36,18 @@ · 35 unmodified lines
3636 #include <rdma/ib_verbs.h>
3737 #include <rdma/hns-abi.h>
3838
39−#define DRV_NAME "hns_roce"
40−
4139 #define PCI_REVISION_ID_HIP08 0x21
4240 #define PCI_REVISION_ID_HIP09 0x30
4341
44−#define HNS_ROCE_HW_VER1 ('h' << 24 | 'i' << 16 | '0' << 8 | '6')
45−
4642 #define HNS_ROCE_MAX_MSG_LEN 0x80000000
4743
4844 #define HNS_ROCE_IB_MIN_SQ_STRIDE 6
4945
5046 #define BA_BYTE_LEN 8
5147
52−/* Hardware specification only for v1 engine */
5348 #define HNS_ROCE_MIN_CQE_NUM 0x40
54−#define HNS_ROCE_MIN_WQE_NUM 0x20
5549 #define HNS_ROCE_MIN_SRQ_WQE_NUM 1
5650
57−/* Hardware specification only for v1 engine */
58−#define HNS_ROCE_MAX_INNER_MTPT_NUM 0x7
59−#define HNS_ROCE_MAX_MTPT_PBL_NUM 0x100000
60−
61−#define HNS_ROCE_EACH_FREE_CQ_WAIT_MSECS 20
62−#define HNS_ROCE_MAX_FREE_CQ_WAIT_CNT \
63− (5000 / HNS_ROCE_EACH_FREE_CQ_WAIT_MSECS)
64−#define HNS_ROCE_CQE_WCMD_EMPTY_BIT 0x2
65−#define HNS_ROCE_MIN_CQE_CNT 16
66−
67−#define HNS_ROCE_RESERVED_SGE 1
68−
6951 #define HNS_ROCE_MAX_IRQ_NUM 128
7052
7153 #define HNS_ROCE_SGE_IN_WQE 2
@@ -102,18 +84,12 @@ · 30 unmodified lines
10284 #define HNS_ROCE_FRMR_MAX_PA 512
10385
10486 #define PKEY_ID 0xffff
105−#define GUID_LEN 8
10687 #define NODE_DESC_SIZE 64
10788 #define DB_REG_OFFSET 0x1000
10889
10990 /* Configure to HW for PAGE_SIZE larger than 4KB */
11091 #define PG_SHIFT_OFFSET (PAGE_SHIFT - 12)
11192
112−#define PAGES_SHIFT_8 8
113−#define PAGES_SHIFT_16 16
114−#define PAGES_SHIFT_24 24
115−#define PAGES_SHIFT_32 32
116−
11793 #define HNS_ROCE_IDX_QUE_ENTRY_SZ 4
11894 #define SRQ_DB_REG 0x230
11995
@@ -122,11 +98,6 @@ · 2 unmodified lines
12298
12399 #define CQ_BANKID_SHIFT 2
124100
125−/* The chip implementation of the consumer index is calculated
126− * according to twice the actual EQ depth
127− */
128−#define EQ_DEPTH_COEFF 2
129−
130101 enum {
131102 SERV_TYPE_RC,
132103 SERV_TYPE_UC,
@@ -182,6 +153,7 @@ enum { · 49 unmodified lines
182153 HNS_ROCE_CAP_FLAG_FRMR = BIT(8),
183154 HNS_ROCE_CAP_FLAG_QP_FLOW_CTRL = BIT(9),
184155 HNS_ROCE_CAP_FLAG_ATOMIC = BIT(10),
156+ HNS_ROCE_CAP_FLAG_DIRECT_WQE = BIT(12),
185157 HNS_ROCE_CAP_FLAG_SDI_MODE = BIT(14),
186158 HNS_ROCE_CAP_FLAG_STASH = BIT(17),
187159 };
@@ -227,7 +199,7 @@ struct hns_roce_uar { · 39 unmodified lines
227199
228200 enum hns_roce_mmap_type {
229201 HNS_ROCE_MMAP_TYPE_DB = 1,
230− HNS_ROCE_MMAP_TYPE_TPTR,
202+ HNS_ROCE_MMAP_TYPE_DWQE,
231203 };
232204
233205 struct hns_user_mmap_entry {
@@ -242,7 +214,6 @@ struct hns_roce_ucontext { · 8 unmodified lines
242214 struct list_head page_list;
243215 struct mutex page_mutex;
244216 struct hns_user_mmap_entry *db_mmap_entry;
245− struct hns_user_mmap_entry *tptr_mmap_entry;
246217 };
247218
248219 struct hns_roce_pd {
@@ -345,19 +316,16 @@ struct hns_roce_mw { · 96 unmodified lines
345316 u32 pbl_buf_pg_sz;
346317 };
347318
348−/* Only support 4K page size for mr register */
349−#define MR_SIZE_4K 0
350−
351319 struct hns_roce_mr {
352320 struct ib_mr ibmr;
353321 u64 iova; /* MR's virtual original addr */
354322 u64 size; /* Address range of MR */
355323 u32 key; /* Key of MR */
356324 u32 pd; /* PD num of MR */
357− u32 access; /* Access permission of MR */
325+ u32 access; /* Access permission of MR */
358326 int enabled; /* MR's active status */
359− int type; /* MR's register type */
360− u32 pbl_hop_num; /* multi-hop number */
327+ int type; /* MR's register type */
328+ u32 pbl_hop_num; /* multi-hop number */
361329 struct hns_roce_mtr pbl_mtr;
362330 u32 npages;
363331 dma_addr_t *page_list;
@@ -374,17 +342,17 @@ struct hns_roce_wq { · 10 unmodified lines
374342 u32 wqe_cnt; /* WQE num */
375343 u32 max_gs;
376344 u32 rsv_sge;
377− int offset;
378− int wqe_shift; /* WQE size */
345+ u32 offset;
346+ u32 wqe_shift; /* WQE size */
379347 u32 head;
380348 u32 tail;
381349 void __iomem *db_reg;
382350 };
383351
384352 struct hns_roce_sge {
385− unsigned int sge_cnt; /* SGE num */
386− int offset;
387− int sge_shift; /* SGE size */
353+ unsigned int sge_cnt; /* SGE num */
354+ u32 offset;
355+ u32 sge_shift; /* SGE size */
388356 };
389357
390358 struct hns_roce_buf_list {
@@ -453,7 +421,6 @@ struct hns_roce_cq { · 62 unmodified lines
453421 u32 cons_index;
454422 u32 *set_ci_db;
455423 void __iomem *db_reg;
456− u16 *tptr_addr;
457424 int arm_sn;
458425 int cqe_size;
459426 unsigned long cqn;
@@ -468,7 +435,7 @@ struct hns_roce_cq { · 8 unmodified lines
468435
469436 struct hns_roce_idx_que {
470437 struct hns_roce_mtr mtr;
471− int entry_shift;
438+ u32 entry_shift;
472439 unsigned long *bitmap;
473440 u32 head;
474441 u32 tail;
@@ -480,7 +447,7 @@ struct hns_roce_srq { · 5 unmodified lines
480447 u32 wqe_cnt;
481448 int max_gs;
482449 u32 rsv_sge;
483− int wqe_shift;
450+ u32 wqe_shift;
484451 u32 cqn;
485452 u32 xrcdn;
486453 void __iomem *db_reg;
@@ -539,10 +506,6 @@ struct hns_roce_srq_table { · 52 unmodified lines
539506 struct hns_roce_hem_table table;
540507 };
541508
542−struct hns_roce_raq_table {
543− struct hns_roce_buf_list *e_raq_buf;
544−};
545−
546509 struct hns_roce_av {
547510 u8 port;
548511 u8 gid_index;
@@ -627,10 +590,6 @@ struct hns_roce_work { · 78 unmodified lines
627590 u32 queue_num;
628591 };
629592
630−enum {
631− HNS_ROCE_QP_CAP_DIRECT_WQE = BIT(5),
632−};
633−
634593 struct hns_roce_qp {
635594 struct ib_qp ibqp;
636595 struct hns_roce_wq rq;
@@ -650,9 +609,7 @@ struct hns_roce_qp { · 13 unmodified lines
650609 u8 sl;
651610 u8 resp_depth;
652611 u8 state;
653− u32 access_flags;
654612 u32 atomic_rd_en;
655− u32 pkey_index;
656613 u32 qkey;
657614 void (*event)(struct hns_roce_qp *qp,
658615 enum hns_roce_event event_type);
@@ -672,9 +629,10 @@ struct hns_roce_qp { · 13 unmodified lines
672629 unsigned long flush_flag;
673630 struct hns_roce_work flush_work;
674631 struct hns_roce_rinl_buf rq_inl_buf;
675− struct list_head node; /* all qps are on a list */
676− struct list_head rq_node; /* all recv qps are on a list */
677− struct list_head sq_node; /* all send qps are on a list */
632+ struct list_head node; /* all qps are on a list */
633+ struct list_head rq_node; /* all recv qps are on a list */
634+ struct list_head sq_node; /* all send qps are on a list */
635+ struct hns_user_mmap_entry *dwqe_mmap_entry;
678636 };
679637
680638 struct hns_roce_ib_iboe {
@@ -684,11 +642,6 @@ struct hns_roce_ib_iboe { · 3 unmodified lines
684642 u8 phy_port[HNS_ROCE_MAX_PORTS];
685643 };
686644
687−enum {
688− HNS_ROCE_EQ_STAT_INVALID = 0,
689− HNS_ROCE_EQ_STAT_VALID = 2,
690−};
691−
692645 struct hns_roce_ceqe {
693646 __le32 comp;
694647 __le32 rsv[15];
@@ -720,12 +673,9 @@ struct hns_roce_eq { · 25 unmodified lines
720673 int type_flag; /* Aeq:1 ceq:0 */
721674 int eqn;
722675 u32 entries;
723− u32 log_entries;
724676 int eqe_size;
725677 int irq;
726− int log_page_size;
727678 u32 cons_index;
728− struct hns_roce_buf_list *buf_list;
729679 int over_ignore;
730680 int coalesce;
731681 int arm_st;
@@ -740,7 +690,6 @@ struct hns_roce_eq { · 8 unmodified lines
740690
741691 struct hns_roce_eq_table {
742692 struct hns_roce_eq *eq;
743− void __iomem **eqc_base; /* only for hw v1 */
744693 };
745694
746695 enum cong_type {
@@ -767,7 +716,7 @@ struct hns_roce_caps { · 20 unmodified lines
767716 u32 reserved_qps;
768717 int num_qpc_timer;
769718 int num_cqc_timer;
770− int num_srqs;
719+ u32 num_srqs;
771720 u32 max_wqes;
772721 u32 max_srq_wrs;
773722 u32 max_srq_sges;
@@ -781,7 +730,7 @@ struct hns_roce_caps { · 7 unmodified lines
781730 u32 min_cqes;
782731 u32 min_wqes;
783732 u32 reserved_cqs;
784− int reserved_srqs;
733+ u32 reserved_srqs;
785734 int num_aeq_vectors;
786735 int num_comp_vectors;
787736 int num_other_vectors;
@@ -855,7 +804,7 @@ struct hns_roce_caps { · 67 unmodified lines
855804 u32 cqc_timer_ba_pg_sz;
856805 u32 cqc_timer_buf_pg_sz;
857806 u32 cqc_timer_hop_num;
858− u32 cqe_ba_pg_sz; /* page_size = 4K*(2^cqe_ba_pg_sz) */
807+ u32 cqe_ba_pg_sz; /* page_size = 4K*(2^cqe_ba_pg_sz) */
859808 u32 cqe_buf_pg_sz;
860809 u32 cqe_hop_num;
861810 u32 srqwqe_ba_pg_sz;
@@ -874,7 +823,7 @@ struct hns_roce_caps { · 12 unmodified lines
874823 u32 gmv_hop_num;
875824 u32 sl_num;
876825 u32 llm_buf_pg_sz;
877− u32 chunk_sz; /* chunk size in non multihop mode */
826+ u32 chunk_sz; /* chunk size in non multihop mode */
878827 u64 flags;
879828 u16 default_ceq_max_cnt;
880829 u16 default_ceq_period;
@@ -897,7 +846,6 @@ enum hns_roce_device_state { · 16 unmodified lines
897846 };
898847
899848 struct hns_roce_hw {
900− int (*reset)(struct hns_roce_dev *hr_dev, bool enable);
901849 int (*cmq_init)(struct hns_roce_dev *hr_dev);
902850 void (*cmq_exit)(struct hns_roce_dev *hr_dev);
903851 int (*hw_profile)(struct hns_roce_dev *hr_dev);
@@ -909,14 +857,12 @@ struct hns_roce_hw { · 5 unmodified lines
909857 int (*poll_mbox_done)(struct hns_roce_dev *hr_dev,
910858 unsigned int timeout);
911859 bool (*chk_mbox_avail)(struct hns_roce_dev *hr_dev, bool *is_busy);
912− int (*set_gid)(struct hns_roce_dev *hr_dev, u32 port, int gid_index,
860+ int (*set_gid)(struct hns_roce_dev *hr_dev, int gid_index,
913861 const union ib_gid *gid, const struct ib_gid_attr *attr);
914862 int (*set_mac)(struct hns_roce_dev *hr_dev, u8 phy_port,
915863 const u8 *addr);
916− void (*set_mtu)(struct hns_roce_dev *hr_dev, u8 phy_port,
917− enum ib_mtu mtu);
918864 int (*write_mtpt)(struct hns_roce_dev *hr_dev, void *mb_buf,
919− struct hns_roce_mr *mr, unsigned long mtpt_idx);
865+ struct hns_roce_mr *mr);
920866 int (*rereg_write_mtpt)(struct hns_roce_dev *hr_dev,
921867 struct hns_roce_mr *mr, int flags,
922868 void *mb_buf);
@@ -936,9 +882,6 @@ struct hns_roce_hw { · 13 unmodified lines
936882 enum ib_qp_state new_state);
937883 int (*qp_flow_control_init)(struct hns_roce_dev *hr_dev,
938884 struct hns_roce_qp *hr_qp);
939− int (*dereg_mr)(struct hns_roce_dev *hr_dev, struct hns_roce_mr *mr,
940− struct ib_udata *udata);
941− int (*destroy_cq)(struct ib_cq *ibcq, struct ib_udata *udata);
942885 int (*init_eq)(struct hns_roce_dev *hr_dev);
943886 void (*cleanup_eq)(struct hns_roce_dev *hr_dev);
944887 int (*write_srqc)(struct hns_roce_srq *srq, void *mb_buf);
@@ -948,13 +891,11 @@ struct hns_roce_hw { · 3 unmodified lines
948891
949892 struct hns_roce_dev {
950893 struct ib_device ib_dev;
951− struct platform_device *pdev;
952894 struct pci_dev *pci_dev;
953895 struct device *dev;
954896 struct hns_roce_uar priv_uar;
955897 const char *irq_names[HNS_ROCE_MAX_IRQ_NUM];
956898 spinlock_t sm_lock;
957− spinlock_t bt_cmd_lock;
958899 bool active;
959900 bool is_reset;
960901 bool dis_db;
@@ -1001,8 +942,6 @@ struct hns_roce_dev { · 40 unmodified lines
1001942 int loop_idc;
1002943 u32 sdb_offset;
1003944 u32 odb_offset;
1004− dma_addr_t tptr_dma_addr; /* only for hw v1 */
1005− u32 tptr_size; /* only for hw v1 */
1006945 const struct hns_roce_hw *hw;
1007946 void *priv;
1008947 struct workqueue_struct *irq_workq;
@@ -1010,6 +949,7 @@ struct hns_roce_dev { · 1 unmodified line
1010949 u32 func_num;
1011950 u32 is_vf;
1012951 u32 cong_algo_tmpl_id;
952+ u64 dwqe_page;
1013953 };
1014954
1015955 static inline struct hns_roce_dev *to_hr_dev(struct ib_device *ib_dev)
@@ -1158,7 +1098,7 @@ void hns_roce_cmd_use_polling(struct hns_roce_dev *hr_dev); · 142 unmodified lines
11581098 /* hns roce hw need current block and next block addr from mtt */
11591099 #define MTT_MIN_COUNT 2
11601100 int hns_roce_mtr_find(struct hns_roce_dev *hr_dev, struct hns_roce_mtr *mtr,
1161− int offset, u64 *mtt_buf, int mtt_max, u64 *base_addr);
1101+ u32 offset, u64 *mtt_buf, int mtt_max, u64 *base_addr);
11621102 int hns_roce_mtr_create(struct hns_roce_dev *hr_dev, struct hns_roce_mtr *mtr,
11631103 struct hns_roce_buf_attr *buf_attr,
11641104 unsigned int page_shift, struct ib_udata *udata,
drivers/infiniband/hw/hns/hns_roce_hem.c+0−1
@@ -31,7 +31,6 @@ · 30 unmodified lines
3131 * SOFTWARE.
3232 */
3333
34−#include <linux/platform_device.h>
3534 #include "hns_roce_device.h"
3635 #include "hns_roce_hem.h"
3736 #include "hns_roce_common.h"
drivers/infiniband/hw/hns/hns_roce_hw_v1.c+0−4675
@@ -1,4675 +0,0 @@
1−/*
2− * Copyright (c) 2016 Hisilicon Limited.
3− *
4− * This software is available to you under a choice of one of two
5− * licenses. You may choose to be licensed under the terms of the GNU
6− * General Public License (GPL) Version 2, available from the file
7− * COPYING in the main directory of this source tree, or the
8− * OpenIB.org BSD license below:
9− *
10− * Redistribution and use in source and binary forms, with or
11− * without modification, are permitted provided that the following
12− * conditions are met:
13− *
14− * - Redistributions of source code must retain the above
15− * copyright notice, this list of conditions and the following
16− * disclaimer.
17− *
18− * - Redistributions in binary form must reproduce the above
19− * copyright notice, this list of conditions and the following
20− * disclaimer in the documentation and/or other materials
21− * provided with the distribution.
22− *
23− * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24− * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25− * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26− * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27− * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28− * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29− * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30− * SOFTWARE.
31− */
32−
33−#include <linux/platform_device.h>
34−#include <linux/acpi.h>
35−#include <linux/etherdevice.h>
36−#include <linux/interrupt.h>
37−#include <linux/of.h>
38−#include <linux/of_platform.h>
39−#include <rdma/ib_umem.h>
40−#include "hns_roce_common.h"
41−#include "hns_roce_device.h"
42−#include "hns_roce_cmd.h"
43−#include "hns_roce_hem.h"
44−#include "hns_roce_hw_v1.h"
45−
46−/**
47− * hns_get_gid_index - Get gid index.
48− * @hr_dev: pointer to structure hns_roce_dev.
49− * @port: port, value range: 0 ~ MAX
50− * @gid_index: gid_index, value range: 0 ~ MAX
51− * Description:
52− * N ports shared gids, allocation method as follow:
53− * GID[0][0], GID[1][0],.....GID[N - 1][0],
54− * GID[0][0], GID[1][0],.....GID[N - 1][0],
55− * And so on
56− */
57−u8 hns_get_gid_index(struct hns_roce_dev *hr_dev, u32 port, int gid_index)
58−{
59− return gid_index * hr_dev->caps.num_ports + port;
60−}
61−
62−static void set_data_seg(struct hns_roce_wqe_data_seg *dseg, struct ib_sge *sg)
63−{
64− dseg->lkey = cpu_to_le32(sg->lkey);
65− dseg->addr = cpu_to_le64(sg->addr);
66− dseg->len = cpu_to_le32(sg->length);
67−}
68−
69−static void set_raddr_seg(struct hns_roce_wqe_raddr_seg *rseg, u64 remote_addr,
70− u32 rkey)
71−{
72− rseg->raddr = cpu_to_le64(remote_addr);
73− rseg->rkey = cpu_to_le32(rkey);
74− rseg->len = 0;
75−}
76−
77−static int hns_roce_v1_post_send(struct ib_qp *ibqp,
78− const struct ib_send_wr *wr,
79− const struct ib_send_wr **bad_wr)
80−{
81− struct hns_roce_dev *hr_dev = to_hr_dev(ibqp->device);
82− struct hns_roce_ah *ah = to_hr_ah(ud_wr(wr)->ah);
83− struct hns_roce_ud_send_wqe *ud_sq_wqe = NULL;
84− struct hns_roce_wqe_ctrl_seg *ctrl = NULL;
85− struct hns_roce_wqe_data_seg *dseg = NULL;
86− struct hns_roce_qp *qp = to_hr_qp(ibqp);
87− struct device *dev = &hr_dev->pdev->dev;
88− struct hns_roce_sq_db sq_db = {};
89− int ps_opcode, i;
90− unsigned long flags = 0;
91− void *wqe = NULL;
92− __le32 doorbell[2];
93− const u8 *smac;
94− int ret = 0;
95− int loopback;
96− u32 wqe_idx;
97− int nreq;
98−
99− if (unlikely(ibqp->qp_type != IB_QPT_GSI &&
100− ibqp->qp_type != IB_QPT_RC)) {
101− dev_err(dev, "un-supported QP type\n");
102− *bad_wr = NULL;
103− return -EOPNOTSUPP;
104− }
105−
106− spin_lock_irqsave(&qp->sq.lock, flags);
107−
108− for (nreq = 0; wr; ++nreq, wr = wr->next) {
109− if (hns_roce_wq_overflow(&qp->sq, nreq, qp->ibqp.send_cq)) {
110− ret = -ENOMEM;
111− *bad_wr = wr;
112− goto out;
113− }
114−
115− wqe_idx = (qp->sq.head + nreq) & (qp->sq.wqe_cnt - 1);
116−
117− if (unlikely(wr->num_sge > qp->sq.max_gs)) {
118− dev_err(dev, "num_sge=%d > qp->sq.max_gs=%d\n",
119− wr->num_sge, qp->sq.max_gs);
120− ret = -EINVAL;
121− *bad_wr = wr;
122− goto out;
123− }
124−
125− wqe = hns_roce_get_send_wqe(qp, wqe_idx);
126− qp->sq.wrid[wqe_idx] = wr->wr_id;
127−
128− /* Corresponding to the RC and RD type wqe process separately */
129− if (ibqp->qp_type == IB_QPT_GSI) {
130− ud_sq_wqe = wqe;
131− roce_set_field(ud_sq_wqe->dmac_h,
132− UD_SEND_WQE_U32_4_DMAC_0_M,
133− UD_SEND_WQE_U32_4_DMAC_0_S,
134− ah->av.mac[0]);
135− roce_set_field(ud_sq_wqe->dmac_h,
136− UD_SEND_WQE_U32_4_DMAC_1_M,
137− UD_SEND_WQE_U32_4_DMAC_1_S,
138− ah->av.mac[1]);
139− roce_set_field(ud_sq_wqe->dmac_h,
140− UD_SEND_WQE_U32_4_DMAC_2_M,
141− UD_SEND_WQE_U32_4_DMAC_2_S,
142− ah->av.mac[2]);
143− roce_set_field(ud_sq_wqe->dmac_h,
144− UD_SEND_WQE_U32_4_DMAC_3_M,
145− UD_SEND_WQE_U32_4_DMAC_3_S,
146− ah->av.mac[3]);
147−
148− roce_set_field(ud_sq_wqe->u32_8,
149− UD_SEND_WQE_U32_8_DMAC_4_M,
150− UD_SEND_WQE_U32_8_DMAC_4_S,
151− ah->av.mac[4]);
152− roce_set_field(ud_sq_wqe->u32_8,
153− UD_SEND_WQE_U32_8_DMAC_5_M,
154− UD_SEND_WQE_U32_8_DMAC_5_S,
155− ah->av.mac[5]);
156−
157− smac = (const u8 *)hr_dev->dev_addr[qp->port];
158− loopback = ether_addr_equal_unaligned(ah->av.mac,
159− smac) ? 1 : 0;
160− roce_set_bit(ud_sq_wqe->u32_8,
161− UD_SEND_WQE_U32_8_LOOPBACK_INDICATOR_S,
162− loopback);
163−
164− roce_set_field(ud_sq_wqe->u32_8,
165− UD_SEND_WQE_U32_8_OPERATION_TYPE_M,
166− UD_SEND_WQE_U32_8_OPERATION_TYPE_S,
167− HNS_ROCE_WQE_OPCODE_SEND);
168− roce_set_field(ud_sq_wqe->u32_8,
169− UD_SEND_WQE_U32_8_NUMBER_OF_DATA_SEG_M,
170− UD_SEND_WQE_U32_8_NUMBER_OF_DATA_SEG_S,
171− 2);
172− roce_set_bit(ud_sq_wqe->u32_8,
173− UD_SEND_WQE_U32_8_SEND_GL_ROUTING_HDR_FLAG_S,
174− 1);
175−
176− ud_sq_wqe->u32_8 |= (wr->send_flags & IB_SEND_SIGNALED ?
177− cpu_to_le32(HNS_ROCE_WQE_CQ_NOTIFY) : 0) |
178− (wr->send_flags & IB_SEND_SOLICITED ?
179− cpu_to_le32(HNS_ROCE_WQE_SE) : 0) |
180− ((wr->opcode == IB_WR_SEND_WITH_IMM) ?
181− cpu_to_le32(HNS_ROCE_WQE_IMM) : 0);
182−
183− roce_set_field(ud_sq_wqe->u32_16,
184− UD_SEND_WQE_U32_16_DEST_QP_M,
185− UD_SEND_WQE_U32_16_DEST_QP_S,
186− ud_wr(wr)->remote_qpn);
187− roce_set_field(ud_sq_wqe->u32_16,
188− UD_SEND_WQE_U32_16_MAX_STATIC_RATE_M,
189− UD_SEND_WQE_U32_16_MAX_STATIC_RATE_S,
190− ah->av.stat_rate);
191−
192− roce_set_field(ud_sq_wqe->u32_36,
193− UD_SEND_WQE_U32_36_FLOW_LABEL_M,
194− UD_SEND_WQE_U32_36_FLOW_LABEL_S,
195− ah->av.flowlabel);
196− roce_set_field(ud_sq_wqe->u32_36,
197− UD_SEND_WQE_U32_36_PRIORITY_M,
198− UD_SEND_WQE_U32_36_PRIORITY_S,
199− ah->av.sl);
200− roce_set_field(ud_sq_wqe->u32_36,
201− UD_SEND_WQE_U32_36_SGID_INDEX_M,
202− UD_SEND_WQE_U32_36_SGID_INDEX_S,
203− hns_get_gid_index(hr_dev, qp->phy_port,
204− ah->av.gid_index));
205−
206− roce_set_field(ud_sq_wqe->u32_40,
207− UD_SEND_WQE_U32_40_HOP_LIMIT_M,
208− UD_SEND_WQE_U32_40_HOP_LIMIT_S,
209− ah->av.hop_limit);
210− roce_set_field(ud_sq_wqe->u32_40,
211− UD_SEND_WQE_U32_40_TRAFFIC_CLASS_M,
212− UD_SEND_WQE_U32_40_TRAFFIC_CLASS_S,
213− ah->av.tclass);
214−
215− memcpy(&ud_sq_wqe->dgid[0], &ah->av.dgid[0], GID_LEN);
216−
217− ud_sq_wqe->va0_l =
218− cpu_to_le32((u32)wr->sg_list[0].addr);
219− ud_sq_wqe->va0_h =
220− cpu_to_le32((wr->sg_list[0].addr) >> 32);
221− ud_sq_wqe->l_key0 =
222− cpu_to_le32(wr->sg_list[0].lkey);
223−
224− ud_sq_wqe->va1_l =
225− cpu_to_le32((u32)wr->sg_list[1].addr);
226− ud_sq_wqe->va1_h =
227− cpu_to_le32((wr->sg_list[1].addr) >> 32);
228− ud_sq_wqe->l_key1 =
229− cpu_to_le32(wr->sg_list[1].lkey);
230− } else if (ibqp->qp_type == IB_QPT_RC) {
231− u32 tmp_len = 0;
232−
233− ctrl = wqe;
234− memset(ctrl, 0, sizeof(struct hns_roce_wqe_ctrl_seg));
235− for (i = 0; i < wr->num_sge; i++)
236− tmp_len += wr->sg_list[i].length;
237−
238− ctrl->msg_length =
239− cpu_to_le32(le32_to_cpu(ctrl->msg_length) + tmp_len);
240−
241− ctrl->sgl_pa_h = 0;
242− ctrl->flag = 0;
243−
244− switch (wr->opcode) {
245− case IB_WR_SEND_WITH_IMM:
246− case IB_WR_RDMA_WRITE_WITH_IMM:
247− ctrl->imm_data = wr->ex.imm_data;
248− break;
249− case IB_WR_SEND_WITH_INV:
250− ctrl->inv_key =
251− cpu_to_le32(wr->ex.invalidate_rkey);
252− break;
253− default:
254− ctrl->imm_data = 0;
255− break;
256− }
257−
258− /* Ctrl field, ctrl set type: sig, solic, imm, fence */
259− /* SO wait for conforming application scenarios */
260− ctrl->flag |= (wr->send_flags & IB_SEND_SIGNALED ?
261− cpu_to_le32(HNS_ROCE_WQE_CQ_NOTIFY) : 0) |
262− (wr->send_flags & IB_SEND_SOLICITED ?
263− cpu_to_le32(HNS_ROCE_WQE_SE) : 0) |
264− ((wr->opcode == IB_WR_SEND_WITH_IMM ||
265− wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) ?
266− cpu_to_le32(HNS_ROCE_WQE_IMM) : 0) |
267− (wr->send_flags & IB_SEND_FENCE ?
268− (cpu_to_le32(HNS_ROCE_WQE_FENCE)) : 0);
269−
270− wqe += sizeof(struct hns_roce_wqe_ctrl_seg);
271−
272− switch (wr->opcode) {
273− case IB_WR_RDMA_READ:
274− ps_opcode = HNS_ROCE_WQE_OPCODE_RDMA_READ;
275− set_raddr_seg(wqe, rdma_wr(wr)->remote_addr,
276− rdma_wr(wr)->rkey);
277− break;
278− case IB_WR_RDMA_WRITE:
279− case IB_WR_RDMA_WRITE_WITH_IMM:
280− ps_opcode = HNS_ROCE_WQE_OPCODE_RDMA_WRITE;
281− set_raddr_seg(wqe, rdma_wr(wr)->remote_addr,
282− rdma_wr(wr)->rkey);
283− break;
284− case IB_WR_SEND:
285− case IB_WR_SEND_WITH_INV:
286− case IB_WR_SEND_WITH_IMM:
287− ps_opcode = HNS_ROCE_WQE_OPCODE_SEND;
288− break;
289− case IB_WR_LOCAL_INV:
290− case IB_WR_ATOMIC_CMP_AND_SWP:
291− case IB_WR_ATOMIC_FETCH_AND_ADD:
292− case IB_WR_LSO:
293− default:
294− ps_opcode = HNS_ROCE_WQE_OPCODE_MASK;
295− break;
296− }
297− ctrl->flag |= cpu_to_le32(ps_opcode);
298− wqe += sizeof(struct hns_roce_wqe_raddr_seg);
299−
300− dseg = wqe;
301− if (wr->send_flags & IB_SEND_INLINE && wr->num_sge) {
302− if (le32_to_cpu(ctrl->msg_length) >
303− hr_dev->caps.max_sq_inline) {
304− ret = -EINVAL;
305− *bad_wr = wr;
306− dev_err(dev, "inline len(1-%d)=%d, illegal",
307− le32_to_cpu(ctrl->msg_length),
308− hr_dev->caps.max_sq_inline);
309− goto out;
310− }
311− for (i = 0; i < wr->num_sge; i++) {
312− memcpy(wqe, ((void *) (uintptr_t)
313− wr->sg_list[i].addr),
314− wr->sg_list[i].length);
315− wqe += wr->sg_list[i].length;
316− }
317− ctrl->flag |= cpu_to_le32(HNS_ROCE_WQE_INLINE);
318− } else {
319− /* sqe num is two */
320− for (i = 0; i < wr->num_sge; i++)
321− set_data_seg(dseg + i, wr->sg_list + i);
322−
323− ctrl->flag |= cpu_to_le32(wr->num_sge <<
324− HNS_ROCE_WQE_SGE_NUM_BIT);
325− }
326− }
327− }
328−
329−out:
330− /* Set DB return */
331− if (likely(nreq)) {
332− qp->sq.head += nreq;
333−
334− roce_set_field(sq_db.u32_4, SQ_DOORBELL_U32_4_SQ_HEAD_M,
335− SQ_DOORBELL_U32_4_SQ_HEAD_S,
336− (qp->sq.head & ((qp->sq.wqe_cnt << 1) - 1)));
337− roce_set_field(sq_db.u32_4, SQ_DOORBELL_U32_4_SL_M,
338− SQ_DOORBELL_U32_4_SL_S, qp->sl);
339− roce_set_field(sq_db.u32_4, SQ_DOORBELL_U32_4_PORT_M,
340− SQ_DOORBELL_U32_4_PORT_S, qp->phy_port);
341− roce_set_field(sq_db.u32_8, SQ_DOORBELL_U32_8_QPN_M,
342− SQ_DOORBELL_U32_8_QPN_S, qp->doorbell_qpn);
343− roce_set_bit(sq_db.u32_8, SQ_DOORBELL_HW_SYNC_S, 1);
344−
345− doorbell[0] = sq_db.u32_4;
346− doorbell[1] = sq_db.u32_8;
347−
348− hns_roce_write64_k(doorbell, qp->sq.db_reg);
349− }
350−
351− spin_unlock_irqrestore(&qp->sq.lock, flags);
352−
353− return ret;
354−}
355−
356−static int hns_roce_v1_post_recv(struct ib_qp *ibqp,
357− const struct ib_recv_wr *wr,
358− const struct ib_recv_wr **bad_wr)
359−{
360− struct hns_roce_rq_wqe_ctrl *ctrl = NULL;
361− struct hns_roce_wqe_data_seg *scat = NULL;
362− struct hns_roce_qp *hr_qp = to_hr_qp(ibqp);
363− struct hns_roce_dev *hr_dev = to_hr_dev(ibqp->device);
364− struct device *dev = &hr_dev->pdev->dev;
365− struct hns_roce_rq_db rq_db = {};
366− __le32 doorbell[2] = {0};
367− unsigned long flags = 0;
368− unsigned int wqe_idx;
369− int ret = 0;
370− int nreq;
371− int i;
372− u32 reg_val;
373−
374− spin_lock_irqsave(&hr_qp->rq.lock, flags);
375−
376− for (nreq = 0; wr; ++nreq, wr = wr->next) {
377− if (hns_roce_wq_overflow(&hr_qp->rq, nreq,
378− hr_qp->ibqp.recv_cq)) {
379− ret = -ENOMEM;
380− *bad_wr = wr;
381− goto out;
382− }
383−
384− wqe_idx = (hr_qp->rq.head + nreq) & (hr_qp->rq.wqe_cnt - 1);
385−
386− if (unlikely(wr->num_sge > hr_qp->rq.max_gs)) {
387− dev_err(dev, "rq:num_sge=%d > qp->sq.max_gs=%d\n",
388− wr->num_sge, hr_qp->rq.max_gs);
389− ret = -EINVAL;
390− *bad_wr = wr;
391− goto out;
392− }
393−
394− ctrl = hns_roce_get_recv_wqe(hr_qp, wqe_idx);
395−
396− roce_set_field(ctrl->rwqe_byte_12,
397− RQ_WQE_CTRL_RWQE_BYTE_12_RWQE_SGE_NUM_M,
398− RQ_WQE_CTRL_RWQE_BYTE_12_RWQE_SGE_NUM_S,
399− wr->num_sge);
400−
401− scat = (struct hns_roce_wqe_data_seg *)(ctrl + 1);
402−
403− for (i = 0; i < wr->num_sge; i++)
404− set_data_seg(scat + i, wr->sg_list + i);
405−
406− hr_qp->rq.wrid[wqe_idx] = wr->wr_id;
407− }
408−
409−out:
410− if (likely(nreq)) {
411− hr_qp->rq.head += nreq;
412−
413− if (ibqp->qp_type == IB_QPT_GSI) {
414− __le32 tmp;
415−
416− /* SW update GSI rq header */
417− reg_val = roce_read(to_hr_dev(ibqp->device),
418− ROCEE_QP1C_CFG3_0_REG +
419− QP1C_CFGN_OFFSET * hr_qp->phy_port);
420− tmp = cpu_to_le32(reg_val);
421− roce_set_field(tmp,
422− ROCEE_QP1C_CFG3_0_ROCEE_QP1C_RQ_HEAD_M,
423− ROCEE_QP1C_CFG3_0_ROCEE_QP1C_RQ_HEAD_S,
424− hr_qp->rq.head);
425− reg_val = le32_to_cpu(tmp);
426− roce_write(to_hr_dev(ibqp->device),
427− ROCEE_QP1C_CFG3_0_REG +
428− QP1C_CFGN_OFFSET * hr_qp->phy_port, reg_val);
429− } else {
430− roce_set_field(rq_db.u32_4, RQ_DOORBELL_U32_4_RQ_HEAD_M,
431− RQ_DOORBELL_U32_4_RQ_HEAD_S,
432− hr_qp->rq.head);
433− roce_set_field(rq_db.u32_8, RQ_DOORBELL_U32_8_QPN_M,
434− RQ_DOORBELL_U32_8_QPN_S, hr_qp->qpn);
435− roce_set_field(rq_db.u32_8, RQ_DOORBELL_U32_8_CMD_M,
436− RQ_DOORBELL_U32_8_CMD_S, 1);
437− roce_set_bit(rq_db.u32_8, RQ_DOORBELL_U32_8_HW_SYNC_S,
438− 1);
439−
440− doorbell[0] = rq_db.u32_4;
441− doorbell[1] = rq_db.u32_8;
442−
443− hns_roce_write64_k(doorbell, hr_qp->rq.db_reg);
444− }
445− }
446− spin_unlock_irqrestore(&hr_qp->rq.lock, flags);
447−
448− return ret;
449−}
450−
451−static void hns_roce_set_db_event_mode(struct hns_roce_dev *hr_dev,
452− int sdb_mode, int odb_mode)
453−{
454− __le32 tmp;
455− u32 val;
456−
457− val = roce_read(hr_dev, ROCEE_GLB_CFG_REG);
458− tmp = cpu_to_le32(val);
459− roce_set_bit(tmp, ROCEE_GLB_CFG_ROCEE_DB_SQ_MODE_S, sdb_mode);
460− roce_set_bit(tmp, ROCEE_GLB_CFG_ROCEE_DB_OTH_MODE_S, odb_mode);
461− val = le32_to_cpu(tmp);
462− roce_write(hr_dev, ROCEE_GLB_CFG_REG, val);
463−}
464−
465−static int hns_roce_v1_set_hem(struct hns_roce_dev *hr_dev,
466− struct hns_roce_hem_table *table, int obj,
467− int step_idx)
468−{
469− spinlock_t *lock = &hr_dev->bt_cmd_lock;
470− struct device *dev = hr_dev->dev;
471− struct hns_roce_hem_iter iter;
472− void __iomem *bt_cmd;
473− __le32 bt_cmd_val[2];
474− __le32 bt_cmd_h = 0;
475− unsigned long flags;
476− __le32 bt_cmd_l;
477− int ret = 0;
478− u64 bt_ba;
479− long end;
480−
481− /* Find the HEM(Hardware Entry Memory) entry */
482− unsigned long i = obj / (table->table_chunk_size / table->obj_size);
483−
484− switch (table->type) {
485− case HEM_TYPE_QPC:
486− case HEM_TYPE_MTPT:
487− case HEM_TYPE_CQC:
488− case HEM_TYPE_SRQC:
489− roce_set_field(bt_cmd_h, ROCEE_BT_CMD_H_ROCEE_BT_CMD_MDF_M,
490− ROCEE_BT_CMD_H_ROCEE_BT_CMD_MDF_S, table->type);
491− break;
492− default:
493− return ret;
494− }
495−
496− roce_set_field(bt_cmd_h, ROCEE_BT_CMD_H_ROCEE_BT_CMD_IN_MDF_M,
497− ROCEE_BT_CMD_H_ROCEE_BT_CMD_IN_MDF_S, obj);
498− roce_set_bit(bt_cmd_h, ROCEE_BT_CMD_H_ROCEE_BT_CMD_S, 0);
499− roce_set_bit(bt_cmd_h, ROCEE_BT_CMD_H_ROCEE_BT_CMD_HW_SYNS_S, 1);
500−
501− /* Currently iter only a chunk */
502− for (hns_roce_hem_first(table->hem[i], &iter);
503− !hns_roce_hem_last(&iter); hns_roce_hem_next(&iter)) {
504− bt_ba = hns_roce_hem_addr(&iter) >> HNS_HW_PAGE_SHIFT;
505−
506− spin_lock_irqsave(lock, flags);
507−
508− bt_cmd = hr_dev->reg_base + ROCEE_BT_CMD_H_REG;
509−
510− end = HW_SYNC_TIMEOUT_MSECS;
511− while (end > 0) {
512− if (!(readl(bt_cmd) >> BT_CMD_SYNC_SHIFT))
513− break;
514−
515− mdelay(HW_SYNC_SLEEP_TIME_INTERVAL);
516− end -= HW_SYNC_SLEEP_TIME_INTERVAL;
517− }
518−
519− if (end <= 0) {
520− dev_err(dev, "Write bt_cmd err,hw_sync is not zero.\n");
521− spin_unlock_irqrestore(lock, flags);
522− return -EBUSY;
523− }
524−
525− bt_cmd_l = cpu_to_le32(bt_ba);
526− roce_set_field(bt_cmd_h, ROCEE_BT_CMD_H_ROCEE_BT_CMD_BA_H_M,
527− ROCEE_BT_CMD_H_ROCEE_BT_CMD_BA_H_S,
528− upper_32_bits(bt_ba));
529−
530− bt_cmd_val[0] = bt_cmd_l;
531− bt_cmd_val[1] = bt_cmd_h;
532− hns_roce_write64_k(bt_cmd_val,
533− hr_dev->reg_base + ROCEE_BT_CMD_L_REG);
534− spin_unlock_irqrestore(lock, flags);
535− }
536−
537− return ret;
538−}
539−
540−static void hns_roce_set_db_ext_mode(struct hns_roce_dev *hr_dev, u32 sdb_mode,
541− u32 odb_mode)
542−{
543− __le32 tmp;
544− u32 val;
545−
546− /* Configure SDB/ODB extend mode */
547− val = roce_read(hr_dev, ROCEE_GLB_CFG_REG);
548− tmp = cpu_to_le32(val);
549− roce_set_bit(tmp, ROCEE_GLB_CFG_SQ_EXT_DB_MODE_S, sdb_mode);
550− roce_set_bit(tmp, ROCEE_GLB_CFG_OTH_EXT_DB_MODE_S, odb_mode);
551− val = le32_to_cpu(tmp);
552− roce_write(hr_dev, ROCEE_GLB_CFG_REG, val);
553−}
554−
555−static void hns_roce_set_sdb(struct hns_roce_dev *hr_dev, u32 sdb_alept,
556− u32 sdb_alful)
557−{
558− __le32 tmp;
559− u32 val;
560−
561− /* Configure SDB */
562− val = roce_read(hr_dev, ROCEE_DB_SQ_WL_REG);
563− tmp = cpu_to_le32(val);
564− roce_set_field(tmp, ROCEE_DB_SQ_WL_ROCEE_DB_SQ_WL_M,
565− ROCEE_DB_SQ_WL_ROCEE_DB_SQ_WL_S, sdb_alful);
566− roce_set_field(tmp, ROCEE_DB_SQ_WL_ROCEE_DB_SQ_WL_EMPTY_M,
567− ROCEE_DB_SQ_WL_ROCEE_DB_SQ_WL_EMPTY_S, sdb_alept);
568− val = le32_to_cpu(tmp);
569− roce_write(hr_dev, ROCEE_DB_SQ_WL_REG, val);
570−}
571−
572−static void hns_roce_set_odb(struct hns_roce_dev *hr_dev, u32 odb_alept,
573− u32 odb_alful)
574−{
575− __le32 tmp;
576− u32 val;
577−
578− /* Configure ODB */
579− val = roce_read(hr_dev, ROCEE_DB_OTHERS_WL_REG);
580− tmp = cpu_to_le32(val);
581− roce_set_field(tmp, ROCEE_DB_OTHERS_WL_ROCEE_DB_OTH_WL_M,
582− ROCEE_DB_OTHERS_WL_ROCEE_DB_OTH_WL_S, odb_alful);
583− roce_set_field(tmp, ROCEE_DB_OTHERS_WL_ROCEE_DB_OTH_WL_EMPTY_M,
584− ROCEE_DB_OTHERS_WL_ROCEE_DB_OTH_WL_EMPTY_S, odb_alept);
585− val = le32_to_cpu(tmp);
586− roce_write(hr_dev, ROCEE_DB_OTHERS_WL_REG, val);
587−}
588−
589−static void hns_roce_set_sdb_ext(struct hns_roce_dev *hr_dev, u32 ext_sdb_alept,
590− u32 ext_sdb_alful)
591−{
592− struct hns_roce_v1_priv *priv = hr_dev->priv;
593− struct hns_roce_db_table *db = &priv->db_table;
594− struct device *dev = &hr_dev->pdev->dev;
595− dma_addr_t sdb_dma_addr;
596− __le32 tmp;
597− u32 val;
598−
599− /* Configure extend SDB threshold */
600− roce_write(hr_dev, ROCEE_EXT_DB_SQ_WL_EMPTY_REG, ext_sdb_alept);
601− roce_write(hr_dev, ROCEE_EXT_DB_SQ_WL_REG, ext_sdb_alful);
602−
603− /* Configure extend SDB base addr */
604− sdb_dma_addr = db->ext_db->sdb_buf_list->map;
605− roce_write(hr_dev, ROCEE_EXT_DB_SQ_REG, (u32)(sdb_dma_addr >> 12));
606−
607− /* Configure extend SDB depth */
608− val = roce_read(hr_dev, ROCEE_EXT_DB_SQ_H_REG);
609− tmp = cpu_to_le32(val);
610− roce_set_field(tmp, ROCEE_EXT_DB_SQ_H_EXT_DB_SQ_SHIFT_M,
611− ROCEE_EXT_DB_SQ_H_EXT_DB_SQ_SHIFT_S,
612− db->ext_db->esdb_dep);
613− /*
614− * 44 = 32 + 12, When evaluating addr to hardware, shift 12 because of
615− * using 4K page, and shift more 32 because of
616− * calculating the high 32 bit value evaluated to hardware.
617− */
618− roce_set_field(tmp, ROCEE_EXT_DB_SQ_H_EXT_DB_SQ_BA_H_M,
619− ROCEE_EXT_DB_SQ_H_EXT_DB_SQ_BA_H_S, sdb_dma_addr >> 44);
620− val = le32_to_cpu(tmp);
621− roce_write(hr_dev, ROCEE_EXT_DB_SQ_H_REG, val);
622−
623− dev_dbg(dev, "ext SDB depth: 0x%x\n", db->ext_db->esdb_dep);
624− dev_dbg(dev, "ext SDB threshold: empty: 0x%x, ful: 0x%x\n",
625− ext_sdb_alept, ext_sdb_alful);
626−}
627−
628−static void hns_roce_set_odb_ext(struct hns_roce_dev *hr_dev, u32 ext_odb_alept,
629− u32 ext_odb_alful)
630−{
631− struct hns_roce_v1_priv *priv = hr_dev->priv;
632− struct hns_roce_db_table *db = &priv->db_table;
633− struct device *dev = &hr_dev->pdev->dev;
634− dma_addr_t odb_dma_addr;
635− __le32 tmp;
636− u32 val;
637−
638− /* Configure extend ODB threshold */
639− roce_write(hr_dev, ROCEE_EXT_DB_OTHERS_WL_EMPTY_REG, ext_odb_alept);
640− roce_write(hr_dev, ROCEE_EXT_DB_OTHERS_WL_REG, ext_odb_alful);
641−
642− /* Configure extend ODB base addr */
643− odb_dma_addr = db->ext_db->odb_buf_list->map;
644− roce_write(hr_dev, ROCEE_EXT_DB_OTH_REG, (u32)(odb_dma_addr >> 12));
645−
646− /* Configure extend ODB depth */
647− val = roce_read(hr_dev, ROCEE_EXT_DB_OTH_H_REG);
648− tmp = cpu_to_le32(val);
649− roce_set_field(tmp, ROCEE_EXT_DB_OTH_H_EXT_DB_OTH_SHIFT_M,
650− ROCEE_EXT_DB_OTH_H_EXT_DB_OTH_SHIFT_S,
651− db->ext_db->eodb_dep);
652− roce_set_field(tmp, ROCEE_EXT_DB_SQ_H_EXT_DB_OTH_BA_H_M,
653− ROCEE_EXT_DB_SQ_H_EXT_DB_OTH_BA_H_S,
654− db->ext_db->eodb_dep);
655− val = le32_to_cpu(tmp);
656− roce_write(hr_dev, ROCEE_EXT_DB_OTH_H_REG, val);
657−
658− dev_dbg(dev, "ext ODB depth: 0x%x\n", db->ext_db->eodb_dep);
659− dev_dbg(dev, "ext ODB threshold: empty: 0x%x, ful: 0x%x\n",
660− ext_odb_alept, ext_odb_alful);
661−}
662−
663−static int hns_roce_db_ext_init(struct hns_roce_dev *hr_dev, u32 sdb_ext_mod,
664− u32 odb_ext_mod)
665−{
666− struct hns_roce_v1_priv *priv = hr_dev->priv;
667− struct hns_roce_db_table *db = &priv->db_table;
668− struct device *dev = &hr_dev->pdev->dev;
669− dma_addr_t sdb_dma_addr;
670− dma_addr_t odb_dma_addr;
671− int ret = 0;
672−
673− db->ext_db = kmalloc(sizeof(*db->ext_db), GFP_KERNEL);
674− if (!db->ext_db)
675− return -ENOMEM;
676−
677− if (sdb_ext_mod) {
678− db->ext_db->sdb_buf_list = kmalloc(
679− sizeof(*db->ext_db->sdb_buf_list), GFP_KERNEL);
680− if (!db->ext_db->sdb_buf_list) {
681− ret = -ENOMEM;
682− goto ext_sdb_buf_fail_out;
683− }
684−
685− db->ext_db->sdb_buf_list->buf = dma_alloc_coherent(dev,
686− HNS_ROCE_V1_EXT_SDB_SIZE,
687− &sdb_dma_addr, GFP_KERNEL);
688− if (!db->ext_db->sdb_buf_list->buf) {
689− ret = -ENOMEM;
690− goto alloc_sq_db_buf_fail;
691− }
692− db->ext_db->sdb_buf_list->map = sdb_dma_addr;
693−
694− db->ext_db->esdb_dep = ilog2(HNS_ROCE_V1_EXT_SDB_DEPTH);
695− hns_roce_set_sdb_ext(hr_dev, HNS_ROCE_V1_EXT_SDB_ALEPT,
696− HNS_ROCE_V1_EXT_SDB_ALFUL);
697− } else
698− hns_roce_set_sdb(hr_dev, HNS_ROCE_V1_SDB_ALEPT,
699− HNS_ROCE_V1_SDB_ALFUL);
700−
701− if (odb_ext_mod) {
702− db->ext_db->odb_buf_list = kmalloc(
703− sizeof(*db->ext_db->odb_buf_list), GFP_KERNEL);
704− if (!db->ext_db->odb_buf_list) {
705− ret = -ENOMEM;
706− goto ext_odb_buf_fail_out;
707− }
708−
709− db->ext_db->odb_buf_list->buf = dma_alloc_coherent(dev,
710− HNS_ROCE_V1_EXT_ODB_SIZE,
711− &odb_dma_addr, GFP_KERNEL);
712− if (!db->ext_db->odb_buf_list->buf) {
713− ret = -ENOMEM;
714− goto alloc_otr_db_buf_fail;
715− }
716− db->ext_db->odb_buf_list->map = odb_dma_addr;
717−
718− db->ext_db->eodb_dep = ilog2(HNS_ROCE_V1_EXT_ODB_DEPTH);
719− hns_roce_set_odb_ext(hr_dev, HNS_ROCE_V1_EXT_ODB_ALEPT,
720− HNS_ROCE_V1_EXT_ODB_ALFUL);
721− } else
722− hns_roce_set_odb(hr_dev, HNS_ROCE_V1_ODB_ALEPT,
723− HNS_ROCE_V1_ODB_ALFUL);
724−
725− hns_roce_set_db_ext_mode(hr_dev, sdb_ext_mod, odb_ext_mod);
726−
727− return 0;
728−
729−alloc_otr_db_buf_fail:
730− kfree(db->ext_db->odb_buf_list);
731−
732−ext_odb_buf_fail_out:
733− if (sdb_ext_mod) {
734− dma_free_coherent(dev, HNS_ROCE_V1_EXT_SDB_SIZE,
735− db->ext_db->sdb_buf_list->buf,
736− db->ext_db->sdb_buf_list->map);
737− }
738−
739−alloc_sq_db_buf_fail:
740− if (sdb_ext_mod)
741− kfree(db->ext_db->sdb_buf_list);
742−
743−ext_sdb_buf_fail_out:
744− kfree(db->ext_db);
745− return ret;
746−}
747−
748−static struct hns_roce_qp *hns_roce_v1_create_lp_qp(struct hns_roce_dev *hr_dev,
749− struct ib_pd *pd)
750−{
751− struct device *dev = &hr_dev->pdev->dev;
752− struct ib_qp_init_attr init_attr;
753− struct ib_qp *qp;
754−
755− memset(&init_attr, 0, sizeof(struct ib_qp_init_attr));
756− init_attr.qp_type = IB_QPT_RC;
757− init_attr.sq_sig_type = IB_SIGNAL_ALL_WR;
758− init_attr.cap.max_recv_wr = HNS_ROCE_MIN_WQE_NUM;
759− init_attr.cap.max_send_wr = HNS_ROCE_MIN_WQE_NUM;
760−
761− qp = ib_create_qp(pd, &init_attr);
762− if (IS_ERR(qp)) {
763− dev_err(dev, "Create loop qp for mr free failed!");
764− return NULL;
765− }
766−
767− return to_hr_qp(qp);
768−}
769−
770−static int hns_roce_v1_rsv_lp_qp(struct hns_roce_dev *hr_dev)
771−{
772− struct hns_roce_v1_priv *priv = hr_dev->priv;
773− struct hns_roce_free_mr *free_mr = &priv->free_mr;
774− struct hns_roce_caps *caps = &hr_dev->caps;
775− struct ib_device *ibdev = &hr_dev->ib_dev;
776− struct device *dev = &hr_dev->pdev->dev;
777− struct ib_cq_init_attr cq_init_attr;
778− struct ib_qp_attr attr = { 0 };
779− struct hns_roce_qp *hr_qp;
780− struct ib_cq *cq;
781− struct ib_pd *pd;
782− union ib_gid dgid;
783− __be64 subnet_prefix;
784− int attr_mask = 0;
785− int ret;
786− int i, j;
787− u8 queue_en[HNS_ROCE_V1_RESV_QP] = { 0 };
788− u8 phy_port;
789− u32 port = 0;
790− u8 sl;
791−
792− /* Reserved cq for loop qp */
793− cq_init_attr.cqe = HNS_ROCE_MIN_WQE_NUM * 2;
794− cq_init_attr.comp_vector = 0;
795−
796− cq = rdma_zalloc_drv_obj(ibdev, ib_cq);
797− if (!cq)
798− return -ENOMEM;
799−
800− ret = hns_roce_create_cq(cq, &cq_init_attr, NULL);
801− if (ret) {
802− dev_err(dev, "Create cq for reserved loop qp failed!");
803− goto alloc_cq_failed;
804− }
805− free_mr->mr_free_cq = to_hr_cq(cq);
806− free_mr->mr_free_cq->ib_cq.device = &hr_dev->ib_dev;
807− free_mr->mr_free_cq->ib_cq.uobject = NULL;
808− free_mr->mr_free_cq->ib_cq.comp_handler = NULL;
809− free_mr->mr_free_cq->ib_cq.event_handler = NULL;
810− free_mr->mr_free_cq->ib_cq.cq_context = NULL;
811− atomic_set(&free_mr->mr_free_cq->ib_cq.usecnt, 0);
812−
813− pd = rdma_zalloc_drv_obj(ibdev, ib_pd);
814− if (!pd) {
815− ret = -ENOMEM;
816− goto alloc_mem_failed;
817− }
818−
819− pd->device = ibdev;
820− ret = hns_roce_alloc_pd(pd, NULL);
821− if (ret)
822− goto alloc_pd_failed;
823−
824− free_mr->mr_free_pd = to_hr_pd(pd);
825− free_mr->mr_free_pd->ibpd.device = &hr_dev->ib_dev;
826− free_mr->mr_free_pd->ibpd.uobject = NULL;
827− free_mr->mr_free_pd->ibpd.__internal_mr = NULL;
828− atomic_set(&free_mr->mr_free_pd->ibpd.usecnt, 0);
829−
830− attr.qp_access_flags = IB_ACCESS_REMOTE_WRITE;
831− attr.pkey_index = 0;
832− attr.min_rnr_timer = 0;
833− /* Disable read ability */
834− attr.max_dest_rd_atomic = 0;
835− attr.max_rd_atomic = 0;
836− /* Use arbitrary values as rq_psn and sq_psn */
837− attr.rq_psn = 0x0808;
838− attr.sq_psn = 0x0808;
839− attr.retry_cnt = 7;
840− attr.rnr_retry = 7;
841− attr.timeout = 0x12;
842− attr.path_mtu = IB_MTU_256;
843− attr.ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;
844− rdma_ah_set_grh(&attr.ah_attr, NULL, 0, 0, 1, 0);
845− rdma_ah_set_static_rate(&attr.ah_attr, 3);
846−
847− subnet_prefix = cpu_to_be64(0xfe80000000000000LL);
848− for (i = 0; i < HNS_ROCE_V1_RESV_QP; i++) {
849− phy_port = (i >= HNS_ROCE_MAX_PORTS) ? (i - 2) :
850− (i % HNS_ROCE_MAX_PORTS);
851− sl = i / HNS_ROCE_MAX_PORTS;
852−
853− for (j = 0; j < caps->num_ports; j++) {
854− if (hr_dev->iboe.phy_port[j] == phy_port) {
855− queue_en[i] = 1;
856− port = j;
857− break;
858− }
859− }
860−
861− if (!queue_en[i])
862− continue;
863−
864− free_mr->mr_free_qp[i] = hns_roce_v1_create_lp_qp(hr_dev, pd);
865− if (!free_mr->mr_free_qp[i]) {
866− dev_err(dev, "Create loop qp failed!\n");
867− ret = -ENOMEM;
868− goto create_lp_qp_failed;
869− }
870− hr_qp = free_mr->mr_free_qp[i];
871−
872− hr_qp->port = port;
873− hr_qp->phy_port = phy_port;
874− hr_qp->ibqp.qp_type = IB_QPT_RC;
875− hr_qp->ibqp.device = &hr_dev->ib_dev;
876− hr_qp->ibqp.uobject = NULL;
877− atomic_set(&hr_qp->ibqp.usecnt, 0);
878− hr_qp->ibqp.pd = pd;
879− hr_qp->ibqp.recv_cq = cq;
880− hr_qp->ibqp.send_cq = cq;
881−
882− rdma_ah_set_port_num(&attr.ah_attr, port + 1);
883− rdma_ah_set_sl(&attr.ah_attr, sl);
884− attr.port_num = port + 1;
885−
886− attr.dest_qp_num = hr_qp->qpn;
887− memcpy(rdma_ah_retrieve_dmac(&attr.ah_attr),
888− hr_dev->dev_addr[port],
889− ETH_ALEN);
890−
891− memcpy(&dgid.raw, &subnet_prefix, sizeof(u64));
892− memcpy(&dgid.raw[8], hr_dev->dev_addr[port], 3);
893− memcpy(&dgid.raw[13], hr_dev->dev_addr[port] + 3, 3);
894− dgid.raw[11] = 0xff;
895− dgid.raw[12] = 0xfe;
896− dgid.raw[8] ^= 2;
897− rdma_ah_set_dgid_raw(&attr.ah_attr, dgid.raw);
898−
899− ret = hr_dev->hw->modify_qp(&hr_qp->ibqp, &attr, attr_mask,
900− IB_QPS_RESET, IB_QPS_INIT);
901− if (ret) {
902− dev_err(dev, "modify qp failed(%d)!\n", ret);
903− goto create_lp_qp_failed;
904− }
905−
906− ret = hr_dev->hw->modify_qp(&hr_qp->ibqp, &attr, IB_QP_DEST_QPN,
907− IB_QPS_INIT, IB_QPS_RTR);
908− if (ret) {
909− dev_err(dev, "modify qp failed(%d)!\n", ret);
910− goto create_lp_qp_failed;
911− }
912−
913− ret = hr_dev->hw->modify_qp(&hr_qp->ibqp, &attr, attr_mask,
914− IB_QPS_RTR, IB_QPS_RTS);
915− if (ret) {
916− dev_err(dev, "modify qp failed(%d)!\n", ret);
917− goto create_lp_qp_failed;
918− }
919− }
920−
921− return 0;
922−
923−create_lp_qp_failed:
924− for (i -= 1; i >= 0; i--) {
925− hr_qp = free_mr->mr_free_qp[i];
926− if (ib_destroy_qp(&hr_qp->ibqp))
927− dev_err(dev, "Destroy qp %d for mr free failed!\n", i);
928− }
929−
930− hns_roce_dealloc_pd(pd, NULL);
931−
932−alloc_pd_failed:
933− kfree(pd);
934−
935−alloc_mem_failed:
936− hns_roce_destroy_cq(cq, NULL);
937−alloc_cq_failed:
938− kfree(cq);
939− return ret;
940−}
941−
942−static void hns_roce_v1_release_lp_qp(struct hns_roce_dev *hr_dev)
943−{
944− struct hns_roce_v1_priv *priv = hr_dev->priv;
945− struct hns_roce_free_mr *free_mr = &priv->free_mr;
946− struct device *dev = &hr_dev->pdev->dev;
947− struct hns_roce_qp *hr_qp;
948− int ret;
949− int i;
950−
951− for (i = 0; i < HNS_ROCE_V1_RESV_QP; i++) {
952− hr_qp = free_mr->mr_free_qp[i];
953− if (!hr_qp)
954− continue;
955−
956− ret = ib_destroy_qp(&hr_qp->ibqp);
957− if (ret)
958− dev_err(dev, "Destroy qp %d for mr free failed(%d)!\n",
959− i, ret);
960− }
961−
962− hns_roce_destroy_cq(&free_mr->mr_free_cq->ib_cq, NULL);
963− kfree(&free_mr->mr_free_cq->ib_cq);
964− hns_roce_dealloc_pd(&free_mr->mr_free_pd->ibpd, NULL);
965− kfree(&free_mr->mr_free_pd->ibpd);
966−}
967−
968−static int hns_roce_db_init(struct hns_roce_dev *hr_dev)
969−{
970− struct hns_roce_v1_priv *priv = hr_dev->priv;
971− struct hns_roce_db_table *db = &priv->db_table;
972− struct device *dev = &hr_dev->pdev->dev;
973− u32 sdb_ext_mod;
974− u32 odb_ext_mod;
975− u32 sdb_evt_mod;
976− u32 odb_evt_mod;
977− int ret;
978−
979− memset(db, 0, sizeof(*db));
980−
981− /* Default DB mode */
982− sdb_ext_mod = HNS_ROCE_SDB_EXTEND_MODE;
983− odb_ext_mod = HNS_ROCE_ODB_EXTEND_MODE;
984− sdb_evt_mod = HNS_ROCE_SDB_NORMAL_MODE;
985− odb_evt_mod = HNS_ROCE_ODB_POLL_MODE;
986−
987− db->sdb_ext_mod = sdb_ext_mod;
988− db->odb_ext_mod = odb_ext_mod;
989−
990− /* Init extend DB */
991− ret = hns_roce_db_ext_init(hr_dev, sdb_ext_mod, odb_ext_mod);
992− if (ret) {
993− dev_err(dev, "Failed in extend DB configuration.\n");
994− return ret;
995− }
996−
997− hns_roce_set_db_event_mode(hr_dev, sdb_evt_mod, odb_evt_mod);
998−
999− return 0;
1000−}
1001−
1002−static void hns_roce_v1_recreate_lp_qp_work_fn(struct work_struct *work)
1003−{
1004− struct hns_roce_recreate_lp_qp_work *lp_qp_work;
1005− struct hns_roce_dev *hr_dev;
1006−
1007− lp_qp_work = container_of(work, struct hns_roce_recreate_lp_qp_work,
1008− work);
1009− hr_dev = to_hr_dev(lp_qp_work->ib_dev);
1010−
1011− hns_roce_v1_release_lp_qp(hr_dev);
1012−
1013− if (hns_roce_v1_rsv_lp_qp(hr_dev))
1014− dev_err(&hr_dev->pdev->dev, "create reserver qp failed\n");
1015−
1016− if (lp_qp_work->comp_flag)
1017− complete(lp_qp_work->comp);
1018−
1019− kfree(lp_qp_work);
1020−}
1021−
1022−static int hns_roce_v1_recreate_lp_qp(struct hns_roce_dev *hr_dev)
1023−{
1024− long end = HNS_ROCE_V1_RECREATE_LP_QP_TIMEOUT_MSECS;
1025− struct hns_roce_v1_priv *priv = hr_dev->priv;
1026− struct hns_roce_free_mr *free_mr = &priv->free_mr;
1027− struct hns_roce_recreate_lp_qp_work *lp_qp_work;
1028− struct device *dev = &hr_dev->pdev->dev;
1029− struct completion comp;
1030−
1031− lp_qp_work = kzalloc(sizeof(struct hns_roce_recreate_lp_qp_work),
1032− GFP_KERNEL);
1033− if (!lp_qp_work)
1034− return -ENOMEM;
1035−
1036− INIT_WORK(&(lp_qp_work->work), hns_roce_v1_recreate_lp_qp_work_fn);
1037−
1038− lp_qp_work->ib_dev = &(hr_dev->ib_dev);
1039− lp_qp_work->comp = &comp;
1040− lp_qp_work->comp_flag = 1;
1041−
1042− init_completion(lp_qp_work->comp);
1043−
1044− queue_work(free_mr->free_mr_wq, &(lp_qp_work->work));
1045−
1046− while (end > 0) {
1047− if (try_wait_for_completion(&comp))
1048− return 0;
1049− msleep(HNS_ROCE_V1_RECREATE_LP_QP_WAIT_VALUE);
1050− end -= HNS_ROCE_V1_RECREATE_LP_QP_WAIT_VALUE;
1051− }
1052−
1053− lp_qp_work->comp_flag = 0;
1054− if (try_wait_for_completion(&comp))
1055− return 0;
1056−
1057− dev_warn(dev, "recreate lp qp failed 20s timeout and return failed!\n");
1058− return -ETIMEDOUT;
1059−}
1060−
1061−static int hns_roce_v1_send_lp_wqe(struct hns_roce_qp *hr_qp)
1062−{
1063− struct hns_roce_dev *hr_dev = to_hr_dev(hr_qp->ibqp.device);
1064− struct device *dev = &hr_dev->pdev->dev;
1065− struct ib_send_wr send_wr;
1066− const struct ib_send_wr *bad_wr;
1067− int ret;
1068−
1069− memset(&send_wr, 0, sizeof(send_wr));
1070− send_wr.next = NULL;
1071− send_wr.num_sge = 0;
1072− send_wr.send_flags = 0;
1073− send_wr.sg_list = NULL;
1074− send_wr.wr_id = (unsigned long long)&send_wr;
1075− send_wr.opcode = IB_WR_RDMA_WRITE;
1076−
1077− ret = hns_roce_v1_post_send(&hr_qp->ibqp, &send_wr, &bad_wr);
1078− if (ret) {
1079− dev_err(dev, "Post write wqe for mr free failed(%d)!", ret);
1080− return ret;
1081− }
1082−
1083− return 0;
1084−}
1085−
1086−static void hns_roce_v1_mr_free_work_fn(struct work_struct *work)
1087−{
1088− unsigned long end =
1089− msecs_to_jiffies(HNS_ROCE_V1_FREE_MR_TIMEOUT_MSECS) + jiffies;
1090− struct hns_roce_mr_free_work *mr_work =
1091− container_of(work, struct hns_roce_mr_free_work, work);
1092− struct hns_roce_dev *hr_dev = to_hr_dev(mr_work->ib_dev);
1093− struct hns_roce_v1_priv *priv = hr_dev->priv;
1094− struct hns_roce_free_mr *free_mr = &priv->free_mr;
1095− struct hns_roce_cq *mr_free_cq = free_mr->mr_free_cq;
1096− struct hns_roce_mr *hr_mr = mr_work->mr;
1097− struct device *dev = &hr_dev->pdev->dev;
1098− struct ib_wc wc[HNS_ROCE_V1_RESV_QP];
1099− struct hns_roce_qp *hr_qp;
1100− int ne = 0;
1101− int ret;
1102− int i;
1103−
1104− for (i = 0; i < HNS_ROCE_V1_RESV_QP; i++) {
1105− hr_qp = free_mr->mr_free_qp[i];
1106− if (!hr_qp)
1107− continue;
1108− ne++;
1109−
1110− ret = hns_roce_v1_send_lp_wqe(hr_qp);
1111− if (ret) {
1112− dev_err(dev,
1113− "Send wqe (qp:0x%lx) for mr free failed(%d)!\n",
1114− hr_qp->qpn, ret);
1115− goto free_work;
1116− }
1117− }
1118−
1119− if (!ne) {
1120− dev_err(dev, "Reserved loop qp is absent!\n");
1121− goto free_work;
1122− }
1123−
1124− do {
1125− ret = hns_roce_v1_poll_cq(&mr_free_cq->ib_cq, ne, wc);
1126− if (ret < 0 && hr_qp) {
1127− dev_err(dev,
1128− "(qp:0x%lx) starts, Poll cqe failed(%d) for mr 0x%x free! Remain %d cqe\n",
1129− hr_qp->qpn, ret, hr_mr->key, ne);
1130− goto free_work;
1131− }
1132− ne -= ret;
1133− usleep_range(HNS_ROCE_V1_FREE_MR_WAIT_VALUE * 1000,
1134− (1 + HNS_ROCE_V1_FREE_MR_WAIT_VALUE) * 1000);
1135− } while (ne && time_before_eq(jiffies, end));
1136−
1137− if (ne != 0)
1138− dev_err(dev,
1139− "Poll cqe for mr 0x%x free timeout! Remain %d cqe\n",
1140− hr_mr->key, ne);
1141−
1142−free_work:
1143− if (mr_work->comp_flag)
1144− complete(mr_work->comp);
1145− kfree(mr_work);
1146−}
1147−
1148−static int hns_roce_v1_dereg_mr(struct hns_roce_dev *hr_dev,
1149− struct hns_roce_mr *mr, struct ib_udata *udata)
1150−{
1151− struct hns_roce_v1_priv *priv = hr_dev->priv;
1152− struct hns_roce_free_mr *free_mr = &priv->free_mr;
1153− long end = HNS_ROCE_V1_FREE_MR_TIMEOUT_MSECS;
1154− struct device *dev = &hr_dev->pdev->dev;
1155− struct hns_roce_mr_free_work *mr_work;
1156− unsigned long start = jiffies;
1157− struct completion comp;
1158− int ret = 0;
1159−
1160− if (mr->enabled) {
1161− if (hns_roce_hw_destroy_mpt(hr_dev, NULL,
1162− key_to_hw_index(mr->key) &
1163− (hr_dev->caps.num_mtpts - 1)))
1164− dev_warn(dev, "DESTROY_MPT failed!\n");
1165− }
1166−
1167− mr_work = kzalloc(sizeof(*mr_work), GFP_KERNEL);
1168− if (!mr_work) {
1169− ret = -ENOMEM;
1170− goto free_mr;
1171− }
1172−
1173− INIT_WORK(&(mr_work->work), hns_roce_v1_mr_free_work_fn);
1174−
1175− mr_work->ib_dev = &(hr_dev->ib_dev);
1176− mr_work->comp = &comp;
1177− mr_work->comp_flag = 1;
1178− mr_work->mr = (void *)mr;
1179− init_completion(mr_work->comp);
1180−
1181− queue_work(free_mr->free_mr_wq, &(mr_work->work));
1182−
1183− while (end > 0) {
1184− if (try_wait_for_completion(&comp))
1185− goto free_mr;
1186− msleep(HNS_ROCE_V1_FREE_MR_WAIT_VALUE);
1187− end -= HNS_ROCE_V1_FREE_MR_WAIT_VALUE;
1188− }
1189−
1190− mr_work->comp_flag = 0;
1191− if (try_wait_for_completion(&comp))
1192− goto free_mr;
1193−
1194− dev_warn(dev, "Free mr work 0x%x over 50s and failed!\n", mr->key);
1195− ret = -ETIMEDOUT;
1196−
1197−free_mr:
1198− dev_dbg(dev, "Free mr 0x%x use 0x%x us.\n",
1199− mr->key, jiffies_to_usecs(jiffies) - jiffies_to_usecs(start));
1200−
1201− ida_free(&hr_dev->mr_table.mtpt_ida.ida, (int)key_to_hw_index(mr->key));
1202− hns_roce_mtr_destroy(hr_dev, &mr->pbl_mtr);
1203− kfree(mr);
1204−
1205− return ret;
1206−}
1207−
1208−static void hns_roce_db_free(struct hns_roce_dev *hr_dev)
1209−{
1210− struct hns_roce_v1_priv *priv = hr_dev->priv;
1211− struct hns_roce_db_table *db = &priv->db_table;
1212− struct device *dev = &hr_dev->pdev->dev;
1213−
1214− if (db->sdb_ext_mod) {
1215− dma_free_coherent(dev, HNS_ROCE_V1_EXT_SDB_SIZE,
1216− db->ext_db->sdb_buf_list->buf,
1217− db->ext_db->sdb_buf_list->map);
1218− kfree(db->ext_db->sdb_buf_list);
1219− }
1220−
1221− if (db->odb_ext_mod) {
1222− dma_free_coherent(dev, HNS_ROCE_V1_EXT_ODB_SIZE,
1223− db->ext_db->odb_buf_list->buf,
1224− db->ext_db->odb_buf_list->map);
1225− kfree(db->ext_db->odb_buf_list);
1226− }
1227−
1228− kfree(db->ext_db);
1229−}
1230−
1231−static int hns_roce_raq_init(struct hns_roce_dev *hr_dev)
1232−{
1233− struct hns_roce_v1_priv *priv = hr_dev->priv;
1234− struct hns_roce_raq_table *raq = &priv->raq_table;
1235− struct device *dev = &hr_dev->pdev->dev;
1236− dma_addr_t addr;
1237− int raq_shift;
1238− __le32 tmp;
1239− u32 val;
1240− int ret;
1241−
1242− raq->e_raq_buf = kzalloc(sizeof(*(raq->e_raq_buf)), GFP_KERNEL);
1243− if (!raq->e_raq_buf)
1244− return -ENOMEM;
1245−
1246− raq->e_raq_buf->buf = dma_alloc_coherent(dev, HNS_ROCE_V1_RAQ_SIZE,
1247− &addr, GFP_KERNEL);
1248− if (!raq->e_raq_buf->buf) {
1249− ret = -ENOMEM;
1250− goto err_dma_alloc_raq;
1251− }
1252− raq->e_raq_buf->map = addr;
1253−
1254− /* Configure raq extended address. 48bit 4K align */
1255− roce_write(hr_dev, ROCEE_EXT_RAQ_REG, raq->e_raq_buf->map >> 12);
1256−
1257− /* Configure raq_shift */
1258− raq_shift = ilog2(HNS_ROCE_V1_RAQ_SIZE / HNS_ROCE_V1_RAQ_ENTRY);
1259− val = roce_read(hr_dev, ROCEE_EXT_RAQ_H_REG);
1260− tmp = cpu_to_le32(val);
1261− roce_set_field(tmp, ROCEE_EXT_RAQ_H_EXT_RAQ_SHIFT_M,
1262− ROCEE_EXT_RAQ_H_EXT_RAQ_SHIFT_S, raq_shift);
1263− /*
1264− * 44 = 32 + 12, When evaluating addr to hardware, shift 12 because of
1265− * using 4K page, and shift more 32 because of
1266− * calculating the high 32 bit value evaluated to hardware.
1267− */
1268− roce_set_field(tmp, ROCEE_EXT_RAQ_H_EXT_RAQ_BA_H_M,
1269− ROCEE_EXT_RAQ_H_EXT_RAQ_BA_H_S,
1270− raq->e_raq_buf->map >> 44);
1271− val = le32_to_cpu(tmp);
1272− roce_write(hr_dev, ROCEE_EXT_RAQ_H_REG, val);
1273− dev_dbg(dev, "Configure raq_shift 0x%x.\n", val);
1274−
1275− /* Configure raq threshold */
1276− val = roce_read(hr_dev, ROCEE_RAQ_WL_REG);
1277− tmp = cpu_to_le32(val);
1278− roce_set_field(tmp, ROCEE_RAQ_WL_ROCEE_RAQ_WL_M,
1279− ROCEE_RAQ_WL_ROCEE_RAQ_WL_S,
1280− HNS_ROCE_V1_EXT_RAQ_WF);
1281− val = le32_to_cpu(tmp);
1282− roce_write(hr_dev, ROCEE_RAQ_WL_REG, val);
1283− dev_dbg(dev, "Configure raq_wl 0x%x.\n", val);
1284−
1285− /* Enable extend raq */
1286− val = roce_read(hr_dev, ROCEE_WRMS_POL_TIME_INTERVAL_REG);
1287− tmp = cpu_to_le32(val);
1288− roce_set_field(tmp,
1289− ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_POL_TIME_INTERVAL_M,
1290− ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_POL_TIME_INTERVAL_S,
1291− POL_TIME_INTERVAL_VAL);
1292− roce_set_bit(tmp, ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_EXT_RAQ_MODE, 1);
1293− roce_set_field(tmp,
1294− ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_RAQ_TIMEOUT_CHK_CFG_M,
1295− ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_RAQ_TIMEOUT_CHK_CFG_S,
1296− 2);
1297− roce_set_bit(tmp,
1298− ROCEE_WRMS_POL_TIME_INTERVAL_WRMS_RAQ_TIMEOUT_CHK_EN_S, 1);
1299− val = le32_to_cpu(tmp);
1300− roce_write(hr_dev, ROCEE_WRMS_POL_TIME_INTERVAL_REG, val);
1301− dev_dbg(dev, "Configure WrmsPolTimeInterval 0x%x.\n", val);
1302−
1303− /* Enable raq drop */
1304− val = roce_read(hr_dev, ROCEE_GLB_CFG_REG);
1305− tmp = cpu_to_le32(val);
1306− roce_set_bit(tmp, ROCEE_GLB_CFG_TRP_RAQ_DROP_EN_S, 1);
1307− val = le32_to_cpu(tmp);
1308− roce_write(hr_dev, ROCEE_GLB_CFG_REG, val);
1309− dev_dbg(dev, "Configure GlbCfg = 0x%x.\n", val);
1310−
1311− return 0;
1312−
1313−err_dma_alloc_raq:
1314− kfree(raq->e_raq_buf);
1315− return ret;
1316−}
1317−
1318−static void hns_roce_raq_free(struct hns_roce_dev *hr_dev)
1319−{
1320− struct hns_roce_v1_priv *priv = hr_dev->priv;
1321− struct hns_roce_raq_table *raq = &priv->raq_table;
1322− struct device *dev = &hr_dev->pdev->dev;
1323−
1324− dma_free_coherent(dev, HNS_ROCE_V1_RAQ_SIZE, raq->e_raq_buf->buf,
1325− raq->e_raq_buf->map);
1326− kfree(raq->e_raq_buf);
1327−}
1328−
1329−static void hns_roce_port_enable(struct hns_roce_dev *hr_dev, int enable_flag)
1330−{
1331− __le32 tmp;
1332− u32 val;
1333−
1334− if (enable_flag) {
1335− val = roce_read(hr_dev, ROCEE_GLB_CFG_REG);
1336− /* Open all ports */
1337− tmp = cpu_to_le32(val);
1338− roce_set_field(tmp, ROCEE_GLB_CFG_ROCEE_PORT_ST_M,
1339− ROCEE_GLB_CFG_ROCEE_PORT_ST_S,
1340− ALL_PORT_VAL_OPEN);
1341− val = le32_to_cpu(tmp);
1342− roce_write(hr_dev, ROCEE_GLB_CFG_REG, val);
1343− } else {
1344− val = roce_read(hr_dev, ROCEE_GLB_CFG_REG);
1345− /* Close all ports */
1346− tmp = cpu_to_le32(val);
1347− roce_set_field(tmp, ROCEE_GLB_CFG_ROCEE_PORT_ST_M,
1348− ROCEE_GLB_CFG_ROCEE_PORT_ST_S, 0x0);
1349− val = le32_to_cpu(tmp);
1350− roce_write(hr_dev, ROCEE_GLB_CFG_REG, val);
1351− }
1352−}
1353−
1354−static int hns_roce_bt_init(struct hns_roce_dev *hr_dev)
1355−{
1356− struct hns_roce_v1_priv *priv = hr_dev->priv;
1357− struct device *dev = &hr_dev->pdev->dev;
1358− int ret;
1359−
1360− priv->bt_table.qpc_buf.buf = dma_alloc_coherent(dev,
1361− HNS_ROCE_BT_RSV_BUF_SIZE, &priv->bt_table.qpc_buf.map,
1362− GFP_KERNEL);
1363− if (!priv->bt_table.qpc_buf.buf)
1364− return -ENOMEM;
1365−
1366− priv->bt_table.mtpt_buf.buf = dma_alloc_coherent(dev,
1367− HNS_ROCE_BT_RSV_BUF_SIZE, &priv->bt_table.mtpt_buf.map,
1368− GFP_KERNEL);
1369− if (!priv->bt_table.mtpt_buf.buf) {
1370− ret = -ENOMEM;
1371− goto err_failed_alloc_mtpt_buf;
1372− }
1373−
1374− priv->bt_table.cqc_buf.buf = dma_alloc_coherent(dev,
1375− HNS_ROCE_BT_RSV_BUF_SIZE, &priv->bt_table.cqc_buf.map,
1376− GFP_KERNEL);
1377− if (!priv->bt_table.cqc_buf.buf) {
1378− ret = -ENOMEM;
1379− goto err_failed_alloc_cqc_buf;
1380− }
1381−
1382− return 0;
1383−
1384−err_failed_alloc_cqc_buf:
1385− dma_free_coherent(dev, HNS_ROCE_BT_RSV_BUF_SIZE,
1386− priv->bt_table.mtpt_buf.buf, priv->bt_table.mtpt_buf.map);
1387−
1388−err_failed_alloc_mtpt_buf:
1389− dma_free_coherent(dev, HNS_ROCE_BT_RSV_BUF_SIZE,
1390− priv->bt_table.qpc_buf.buf, priv->bt_table.qpc_buf.map);
1391−
1392− return ret;
1393−}
1394−
1395−static void hns_roce_bt_free(struct hns_roce_dev *hr_dev)
1396−{
1397− struct hns_roce_v1_priv *priv = hr_dev->priv;
1398− struct device *dev = &hr_dev->pdev->dev;
1399−
1400− dma_free_coherent(dev, HNS_ROCE_BT_RSV_BUF_SIZE,
1401− priv->bt_table.cqc_buf.buf, priv->bt_table.cqc_buf.map);
1402−
1403− dma_free_coherent(dev, HNS_ROCE_BT_RSV_BUF_SIZE,
1404− priv->bt_table.mtpt_buf.buf, priv->bt_table.mtpt_buf.map);
1405−
1406− dma_free_coherent(dev, HNS_ROCE_BT_RSV_BUF_SIZE,
1407− priv->bt_table.qpc_buf.buf, priv->bt_table.qpc_buf.map);
1408−}
1409−
1410−static int hns_roce_tptr_init(struct hns_roce_dev *hr_dev)
1411−{
1412− struct hns_roce_v1_priv *priv = hr_dev->priv;
1413− struct hns_roce_buf_list *tptr_buf = &priv->tptr_table.tptr_buf;
1414− struct device *dev = &hr_dev->pdev->dev;
1415−
1416− /*
1417− * This buffer will be used for CQ's tptr(tail pointer), also
1418− * named ci(customer index). Every CQ will use 2 bytes to save
1419− * cqe ci in hip06. Hardware will read this area to get new ci
1420− * when the queue is almost full.
1421− */
1422− tptr_buf->buf = dma_alloc_coherent(dev, HNS_ROCE_V1_TPTR_BUF_SIZE,
1423− &tptr_buf->map, GFP_KERNEL);
1424− if (!tptr_buf->buf)
1425− return -ENOMEM;
1426−
1427− hr_dev->tptr_dma_addr = tptr_buf->map;
1428− hr_dev->tptr_size = HNS_ROCE_V1_TPTR_BUF_SIZE;
1429−
1430− return 0;
1431−}
1432−
1433−static void hns_roce_tptr_free(struct hns_roce_dev *hr_dev)
1434−{
1435− struct hns_roce_v1_priv *priv = hr_dev->priv;
1436− struct hns_roce_buf_list *tptr_buf = &priv->tptr_table.tptr_buf;
1437− struct device *dev = &hr_dev->pdev->dev;
1438−
1439− dma_free_coherent(dev, HNS_ROCE_V1_TPTR_BUF_SIZE,
1440− tptr_buf->buf, tptr_buf->map);
1441−}
1442−
1443−static int hns_roce_free_mr_init(struct hns_roce_dev *hr_dev)
1444−{
1445− struct hns_roce_v1_priv *priv = hr_dev->priv;
1446− struct hns_roce_free_mr *free_mr = &priv->free_mr;
1447− struct device *dev = &hr_dev->pdev->dev;
1448− int ret;
1449−
1450− free_mr->free_mr_wq = create_singlethread_workqueue("hns_roce_free_mr");
1451− if (!free_mr->free_mr_wq) {
1452− dev_err(dev, "Create free mr workqueue failed!\n");
1453− return -ENOMEM;
1454− }
1455−
1456− ret = hns_roce_v1_rsv_lp_qp(hr_dev);
1457− if (ret) {
1458− dev_err(dev, "Reserved loop qp failed(%d)!\n", ret);
1459− destroy_workqueue(free_mr->free_mr_wq);
1460− }
1461−
1462− return ret;
1463−}
1464−
1465−static void hns_roce_free_mr_free(struct hns_roce_dev *hr_dev)
1466−{
1467− struct hns_roce_v1_priv *priv = hr_dev->priv;
1468− struct hns_roce_free_mr *free_mr = &priv->free_mr;
1469−
1470− destroy_workqueue(free_mr->free_mr_wq);
1471−
1472− hns_roce_v1_release_lp_qp(hr_dev);
1473−}
1474−
1475−/**
1476− * hns_roce_v1_reset - reset RoCE
1477− * @hr_dev: RoCE device struct pointer
1478− * @dereset: true -- drop reset, false -- reset
1479− * return 0 - success , negative --fail
1480− */
1481−static int hns_roce_v1_reset(struct hns_roce_dev *hr_dev, bool dereset)
1482−{
1483− struct device_node *dsaf_node;
1484− struct device *dev = &hr_dev->pdev->dev;
1485− struct device_node *np = dev->of_node;
1486− struct fwnode_handle *fwnode;
1487− int ret;
1488−
1489− /* check if this is DT/ACPI case */
1490− if (dev_of_node(dev)) {
1491− dsaf_node = of_parse_phandle(np, "dsaf-handle", 0);
1492− if (!dsaf_node) {
1493− dev_err(dev, "could not find dsaf-handle\n");
1494− return -EINVAL;
1495− }
1496− fwnode = &dsaf_node->fwnode;
1497− } else if (is_acpi_device_node(dev->fwnode)) {
1498− struct fwnode_reference_args args;
1499−
1500− ret = acpi_node_get_property_reference(dev->fwnode,
1501− "dsaf-handle", 0, &args);
1502− if (ret) {
1503− dev_err(dev, "could not find dsaf-handle\n");
1504− return ret;
1505− }
1506− fwnode = args.fwnode;
1507− } else {
1508− dev_err(dev, "cannot read data from DT or ACPI\n");
1509− return -ENXIO;
1510− }
1511−
1512− ret = hns_dsaf_roce_reset(fwnode, false);
1513− if (ret)
1514− return ret;
1515−
1516− if (dereset) {
1517− msleep(SLEEP_TIME_INTERVAL);
1518− ret = hns_dsaf_roce_reset(fwnode, true);
1519− }
1520−
1521− return ret;
1522−}
1523−
1524−static int hns_roce_v1_profile(struct hns_roce_dev *hr_dev)
1525−{
1526− struct hns_roce_caps *caps = &hr_dev->caps;
1527− int i;
1528−
1529− hr_dev->vendor_id = roce_read(hr_dev, ROCEE_VENDOR_ID_REG);
1530− hr_dev->vendor_part_id = roce_read(hr_dev, ROCEE_VENDOR_PART_ID_REG);
1531− hr_dev->sys_image_guid = roce_read(hr_dev, ROCEE_SYS_IMAGE_GUID_L_REG) |
1532− ((u64)roce_read(hr_dev,
1533− ROCEE_SYS_IMAGE_GUID_H_REG) << 32);
1534− hr_dev->hw_rev = HNS_ROCE_HW_VER1;
1535−
1536− caps->num_qps = HNS_ROCE_V1_MAX_QP_NUM;
1537− caps->max_wqes = HNS_ROCE_V1_MAX_WQE_NUM;
1538− caps->min_wqes = HNS_ROCE_MIN_WQE_NUM;
1539− caps->num_cqs = HNS_ROCE_V1_MAX_CQ_NUM;
1540− caps->min_cqes = HNS_ROCE_MIN_CQE_NUM;
1541− caps->max_cqes = HNS_ROCE_V1_MAX_CQE_NUM;
1542− caps->max_sq_sg = HNS_ROCE_V1_SG_NUM;
1543− caps->max_rq_sg = HNS_ROCE_V1_SG_NUM;
1544− caps->max_sq_inline = HNS_ROCE_V1_INLINE_SIZE;
1545− caps->num_uars = HNS_ROCE_V1_UAR_NUM;
1546− caps->phy_num_uars = HNS_ROCE_V1_PHY_UAR_NUM;
1547− caps->num_aeq_vectors = HNS_ROCE_V1_AEQE_VEC_NUM;
1548− caps->num_comp_vectors = HNS_ROCE_V1_COMP_VEC_NUM;
1549− caps->num_other_vectors = HNS_ROCE_V1_ABNORMAL_VEC_NUM;
1550− caps->num_mtpts = HNS_ROCE_V1_MAX_MTPT_NUM;
1551− caps->num_mtt_segs = HNS_ROCE_V1_MAX_MTT_SEGS;
1552− caps->num_pds = HNS_ROCE_V1_MAX_PD_NUM;
1553− caps->max_qp_init_rdma = HNS_ROCE_V1_MAX_QP_INIT_RDMA;
1554− caps->max_qp_dest_rdma = HNS_ROCE_V1_MAX_QP_DEST_RDMA;
1555− caps->max_sq_desc_sz = HNS_ROCE_V1_MAX_SQ_DESC_SZ;
1556− caps->max_rq_desc_sz = HNS_ROCE_V1_MAX_RQ_DESC_SZ;
1557− caps->qpc_sz = HNS_ROCE_V1_QPC_SIZE;
1558− caps->irrl_entry_sz = HNS_ROCE_V1_IRRL_ENTRY_SIZE;
1559− caps->cqc_entry_sz = HNS_ROCE_V1_CQC_ENTRY_SIZE;
1560− caps->mtpt_entry_sz = HNS_ROCE_V1_MTPT_ENTRY_SIZE;
1561− caps->mtt_entry_sz = HNS_ROCE_V1_MTT_ENTRY_SIZE;
1562− caps->cqe_sz = HNS_ROCE_V1_CQE_SIZE;
1563− caps->page_size_cap = HNS_ROCE_V1_PAGE_SIZE_SUPPORT;
1564− caps->reserved_lkey = 0;
1565− caps->reserved_pds = 0;
1566− caps->reserved_mrws = 1;
1567− caps->reserved_uars = 0;
1568− caps->reserved_cqs = 0;
1569− caps->reserved_qps = 12; /* 2 SQP per port, six ports total 12 */
1570− caps->chunk_sz = HNS_ROCE_V1_TABLE_CHUNK_SIZE;
1571−
1572− for (i = 0; i < caps->num_ports; i++)
1573− caps->pkey_table_len[i] = 1;
1574−
1575− for (i = 0; i < caps->num_ports; i++) {
1576− /* Six ports shared 16 GID in v1 engine */
1577− if (i >= (HNS_ROCE_V1_GID_NUM % caps->num_ports))
1578− caps->gid_table_len[i] = HNS_ROCE_V1_GID_NUM /
1579− caps->num_ports;
1580− else
1581− caps->gid_table_len[i] = HNS_ROCE_V1_GID_NUM /
1582− caps->num_ports + 1;
1583− }
1584−
1585− caps->ceqe_depth = HNS_ROCE_V1_COMP_EQE_NUM;
1586− caps->aeqe_depth = HNS_ROCE_V1_ASYNC_EQE_NUM;
1587− caps->local_ca_ack_delay = roce_read(hr_dev, ROCEE_ACK_DELAY_REG);
1588− caps->max_mtu = IB_MTU_2048;
1589−
1590− return 0;
1591−}
1592−
1593−static int hns_roce_v1_init(struct hns_roce_dev *hr_dev)
1594−{
1595− int ret;
1596− u32 val;
1597− __le32 tmp;
1598− struct device *dev = &hr_dev->pdev->dev;
1599−
1600− /* DMAE user config */
1601− val = roce_read(hr_dev, ROCEE_DMAE_USER_CFG1_REG);
1602− tmp = cpu_to_le32(val);
1603− roce_set_field(tmp, ROCEE_DMAE_USER_CFG1_ROCEE_CACHE_TB_CFG_M,
1604− ROCEE_DMAE_USER_CFG1_ROCEE_CACHE_TB_CFG_S, 0xf);
1605− roce_set_field(tmp, ROCEE_DMAE_USER_CFG1_ROCEE_STREAM_ID_TB_CFG_M,
1606− ROCEE_DMAE_USER_CFG1_ROCEE_STREAM_ID_TB_CFG_S,
1607− 1 << PAGES_SHIFT_16);
1608− val = le32_to_cpu(tmp);
1609− roce_write(hr_dev, ROCEE_DMAE_USER_CFG1_REG, val);
1610−
1611− val = roce_read(hr_dev, ROCEE_DMAE_USER_CFG2_REG);
1612− tmp = cpu_to_le32(val);
1613− roce_set_field(tmp, ROCEE_DMAE_USER_CFG2_ROCEE_CACHE_PKT_CFG_M,
1614− ROCEE_DMAE_USER_CFG2_ROCEE_CACHE_PKT_CFG_S, 0xf);
1615− roce_set_field(tmp, ROCEE_DMAE_USER_CFG2_ROCEE_STREAM_ID_PKT_CFG_M,
1616− ROCEE_DMAE_USER_CFG2_ROCEE_STREAM_ID_PKT_CFG_S,
1617− 1 << PAGES_SHIFT_16);
1618−
1619− ret = hns_roce_db_init(hr_dev);
1620− if (ret) {
1621− dev_err(dev, "doorbell init failed!\n");
1622− return ret;
1623− }
1624−
1625− ret = hns_roce_raq_init(hr_dev);
1626− if (ret) {
1627− dev_err(dev, "raq init failed!\n");
1628− goto error_failed_raq_init;
1629− }
1630−
1631− ret = hns_roce_bt_init(hr_dev);
1632− if (ret) {
1633− dev_err(dev, "bt init failed!\n");
1634− goto error_failed_bt_init;
1635− }
1636−
1637− ret = hns_roce_tptr_init(hr_dev);
1638− if (ret) {
1639− dev_err(dev, "tptr init failed!\n");
1640− goto error_failed_tptr_init;
1641− }
1642−
1643− ret = hns_roce_free_mr_init(hr_dev);
1644− if (ret) {
1645− dev_err(dev, "free mr init failed!\n");
1646− goto error_failed_free_mr_init;
1647− }
1648−
1649− hns_roce_port_enable(hr_dev, HNS_ROCE_PORT_UP);
1650−
1651− return 0;
1652−
1653−error_failed_free_mr_init:
1654− hns_roce_tptr_free(hr_dev);
1655−
1656−error_failed_tptr_init:
1657− hns_roce_bt_free(hr_dev);
1658−
1659−error_failed_bt_init:
1660− hns_roce_raq_free(hr_dev);
1661−
1662−error_failed_raq_init:
1663− hns_roce_db_free(hr_dev);
1664− return ret;
1665−}
1666−
1667−static void hns_roce_v1_exit(struct hns_roce_dev *hr_dev)
1668−{
1669− hns_roce_port_enable(hr_dev, HNS_ROCE_PORT_DOWN);
1670− hns_roce_free_mr_free(hr_dev);
1671− hns_roce_tptr_free(hr_dev);
1672− hns_roce_bt_free(hr_dev);
1673− hns_roce_raq_free(hr_dev);
1674− hns_roce_db_free(hr_dev);
1675−}
1676−
1677−static int hns_roce_v1_cmd_pending(struct hns_roce_dev *hr_dev)
1678−{
1679− u32 status = readl(hr_dev->reg_base + ROCEE_MB6_REG);
1680−
1681− return (!!(status & (1 << HCR_GO_BIT)));
1682−}
1683−
1684−static int hns_roce_v1_post_mbox(struct hns_roce_dev *hr_dev, u64 in_param,
1685− u64 out_param, u32 in_modifier, u8 op_modifier,
1686− u16 op, u16 token, int event)
1687−{
1688− u32 __iomem *hcr = (u32 __iomem *)(hr_dev->reg_base + ROCEE_MB1_REG);
1689− unsigned long end;
1690− u32 val = 0;
1691− __le32 tmp;
1692−
1693− end = msecs_to_jiffies(GO_BIT_TIMEOUT_MSECS) + jiffies;
1694− while (hns_roce_v1_cmd_pending(hr_dev)) {
1695− if (time_after(jiffies, end)) {
1696− dev_err(hr_dev->dev, "jiffies=%d end=%d\n",
1697− (int)jiffies, (int)end);
1698− return -EAGAIN;
1699− }
1700− cond_resched();
1701− }
1702−
1703− tmp = cpu_to_le32(val);
1704− roce_set_field(tmp, ROCEE_MB6_ROCEE_MB_CMD_M, ROCEE_MB6_ROCEE_MB_CMD_S,
1705− op);
1706− roce_set_field(tmp, ROCEE_MB6_ROCEE_MB_CMD_MDF_M,
1707− ROCEE_MB6_ROCEE_MB_CMD_MDF_S, op_modifier);
1708− roce_set_bit(tmp, ROCEE_MB6_ROCEE_MB_EVENT_S, event);
1709− roce_set_bit(tmp, ROCEE_MB6_ROCEE_MB_HW_RUN_S, 1);
1710− roce_set_field(tmp, ROCEE_MB6_ROCEE_MB_TOKEN_M,
1711− ROCEE_MB6_ROCEE_MB_TOKEN_S, token);
1712−
1713− val = le32_to_cpu(tmp);
1714− writeq(in_param, hcr + 0);
1715− writeq(out_param, hcr + 2);
1716− writel(in_modifier, hcr + 4);
1717− /* Memory barrier */
1718− wmb();
1719−
1720− writel(val, hcr + 5);
1721−
1722− return 0;
1723−}
1724−
1725−static int hns_roce_v1_chk_mbox(struct hns_roce_dev *hr_dev,
1726− unsigned int timeout)
1727−{
1728− u8 __iomem *hcr = hr_dev->reg_base + ROCEE_MB1_REG;
1729− unsigned long end;
1730− u32 status = 0;
1731−
1732− end = msecs_to_jiffies(timeout) + jiffies;
1733− while (hns_roce_v1_cmd_pending(hr_dev) && time_before(jiffies, end))
1734− cond_resched();
1735−
1736− if (hns_roce_v1_cmd_pending(hr_dev)) {
1737− dev_err(hr_dev->dev, "[cmd_poll]hw run cmd TIMEDOUT!\n");
1738− return -ETIMEDOUT;
1739− }
1740−
1741− status = le32_to_cpu((__force __le32)
1742− __raw_readl(hcr + HCR_STATUS_OFFSET));
1743− if ((status & STATUS_MASK) != 0x1) {
1744− dev_err(hr_dev->dev, "mailbox status 0x%x!\n", status);
1745− return -EBUSY;
1746− }
1747−
1748− return 0;
1749−}
1750−
1751−static int hns_roce_v1_set_gid(struct hns_roce_dev *hr_dev, u32 port,
1752− int gid_index, const union ib_gid *gid,
1753− const struct ib_gid_attr *attr)
1754−{
1755− unsigned long flags;
1756− u32 *p = NULL;
1757− u8 gid_idx;
1758−
1759− gid_idx = hns_get_gid_index(hr_dev, port, gid_index);
1760−
1761− spin_lock_irqsave(&hr_dev->iboe.lock, flags);
1762−
1763− p = (u32 *)&gid->raw[0];
1764− roce_raw_write(*p, hr_dev->reg_base + ROCEE_PORT_GID_L_0_REG +
1765− (HNS_ROCE_V1_GID_NUM * gid_idx));
1766−
1767− p = (u32 *)&gid->raw[4];
1768− roce_raw_write(*p, hr_dev->reg_base + ROCEE_PORT_GID_ML_0_REG +
1769− (HNS_ROCE_V1_GID_NUM * gid_idx));
1770−
1771− p = (u32 *)&gid->raw[8];
1772− roce_raw_write(*p, hr_dev->reg_base + ROCEE_PORT_GID_MH_0_REG +
1773− (HNS_ROCE_V1_GID_NUM * gid_idx));
1774−
1775− p = (u32 *)&gid->raw[0xc];
1776− roce_raw_write(*p, hr_dev->reg_base + ROCEE_PORT_GID_H_0_REG +
1777− (HNS_ROCE_V1_GID_NUM * gid_idx));
1778−
1779− spin_unlock_irqrestore(&hr_dev->iboe.lock, flags);
1780−
1781− return 0;
1782−}
1783−
1784−static int hns_roce_v1_set_mac(struct hns_roce_dev *hr_dev, u8 phy_port,
1785− const u8 *addr)
1786−{
1787− u32 reg_smac_l;
1788− u16 reg_smac_h;
1789− __le32 tmp;
1790− u16 *p_h;
1791− u32 *p;
1792− u32 val;
1793−
1794− /*
1795− * When mac changed, loopback may fail
1796− * because of smac not equal to dmac.
1797− * We Need to release and create reserved qp again.
1798− */
1799− if (hr_dev->hw->dereg_mr) {
1800− int ret;
1801−
1802− ret = hns_roce_v1_recreate_lp_qp(hr_dev);
1803− if (ret && ret != -ETIMEDOUT)
1804− return ret;
1805− }
1806−
1807− p = (u32 *)(&addr[0]);
1808− reg_smac_l = *p;
1809− roce_raw_write(reg_smac_l, hr_dev->reg_base + ROCEE_SMAC_L_0_REG +
1810− PHY_PORT_OFFSET * phy_port);
1811−
1812− val = roce_read(hr_dev,
1813− ROCEE_SMAC_H_0_REG + phy_port * PHY_PORT_OFFSET);
1814− tmp = cpu_to_le32(val);
1815− p_h = (u16 *)(&addr[4]);
1816− reg_smac_h = *p_h;
1817− roce_set_field(tmp, ROCEE_SMAC_H_ROCEE_SMAC_H_M,
1818− ROCEE_SMAC_H_ROCEE_SMAC_H_S, reg_smac_h);
1819− val = le32_to_cpu(tmp);
1820− roce_write(hr_dev, ROCEE_SMAC_H_0_REG + phy_port * PHY_PORT_OFFSET,
1821− val);
1822−
1823− return 0;
1824−}
1825−
1826−static void hns_roce_v1_set_mtu(struct hns_roce_dev *hr_dev, u8 phy_port,
1827− enum ib_mtu mtu)
1828−{
1829− __le32 tmp;
1830− u32 val;
1831−
1832− val = roce_read(hr_dev,
1833− ROCEE_SMAC_H_0_REG + phy_port * PHY_PORT_OFFSET);
1834− tmp = cpu_to_le32(val);
1835− roce_set_field(tmp, ROCEE_SMAC_H_ROCEE_PORT_MTU_M,
1836− ROCEE_SMAC_H_ROCEE_PORT_MTU_S, mtu);
1837− val = le32_to_cpu(tmp);
1838− roce_write(hr_dev, ROCEE_SMAC_H_0_REG + phy_port * PHY_PORT_OFFSET,
1839− val);
1840−}
1841−
1842−static int hns_roce_v1_write_mtpt(struct hns_roce_dev *hr_dev, void *mb_buf,
1843− struct hns_roce_mr *mr,
1844− unsigned long mtpt_idx)
1845−{
1846− u64 pages[HNS_ROCE_MAX_INNER_MTPT_NUM] = { 0 };
1847− struct ib_device *ibdev = &hr_dev->ib_dev;
1848− struct hns_roce_v1_mpt_entry *mpt_entry;
1849− dma_addr_t pbl_ba;
1850− int count;
1851− int i;
1852−
1853− /* MPT filled into mailbox buf */
1854− mpt_entry = (struct hns_roce_v1_mpt_entry *)mb_buf;
1855− memset(mpt_entry, 0, sizeof(*mpt_entry));
1856−
1857− roce_set_field(mpt_entry->mpt_byte_4, MPT_BYTE_4_KEY_STATE_M,
1858− MPT_BYTE_4_KEY_STATE_S, KEY_VALID);
1859− roce_set_field(mpt_entry->mpt_byte_4, MPT_BYTE_4_KEY_M,
1860− MPT_BYTE_4_KEY_S, mr->key);
1861− roce_set_field(mpt_entry->mpt_byte_4, MPT_BYTE_4_PAGE_SIZE_M,
1862− MPT_BYTE_4_PAGE_SIZE_S, MR_SIZE_4K);
1863− roce_set_bit(mpt_entry->mpt_byte_4, MPT_BYTE_4_MW_TYPE_S, 0);
1864− roce_set_bit(mpt_entry->mpt_byte_4, MPT_BYTE_4_MW_BIND_ENABLE_S,
1865− (mr->access & IB_ACCESS_MW_BIND ? 1 : 0));
1866− roce_set_bit(mpt_entry->mpt_byte_4, MPT_BYTE_4_OWN_S, 0);
1867− roce_set_field(mpt_entry->mpt_byte_4, MPT_BYTE_4_MEMORY_LOCATION_TYPE_M,
1868− MPT_BYTE_4_MEMORY_LOCATION_TYPE_S, mr->type);
1869− roce_set_bit(mpt_entry->mpt_byte_4, MPT_BYTE_4_REMOTE_ATOMIC_S, 0);
1870− roce_set_bit(mpt_entry->mpt_byte_4, MPT_BYTE_4_LOCAL_WRITE_S,
1871− (mr->access & IB_ACCESS_LOCAL_WRITE ? 1 : 0));
1872− roce_set_bit(mpt_entry->mpt_byte_4, MPT_BYTE_4_REMOTE_WRITE_S,
1873− (mr->access & IB_ACCESS_REMOTE_WRITE ? 1 : 0));
1874− roce_set_bit(mpt_entry->mpt_byte_4, MPT_BYTE_4_REMOTE_READ_S,
1875− (mr->access & IB_ACCESS_REMOTE_READ ? 1 : 0));
1876− roce_set_bit(mpt_entry->mpt_byte_4, MPT_BYTE_4_REMOTE_INVAL_ENABLE_S,
1877− 0);
1878− roce_set_bit(mpt_entry->mpt_byte_4, MPT_BYTE_4_ADDRESS_TYPE_S, 0);
1879−
1880− roce_set_field(mpt_entry->mpt_byte_12, MPT_BYTE_12_PBL_ADDR_H_M,
1881− MPT_BYTE_12_PBL_ADDR_H_S, 0);
1882− roce_set_field(mpt_entry->mpt_byte_12, MPT_BYTE_12_MW_BIND_COUNTER_M,
1883− MPT_BYTE_12_MW_BIND_COUNTER_S, 0);
1884−
1885− mpt_entry->virt_addr_l = cpu_to_le32((u32)mr->iova);
1886− mpt_entry->virt_addr_h = cpu_to_le32((u32)(mr->iova >> 32));
1887− mpt_entry->length = cpu_to_le32((u32)mr->size);
1888−
1889− roce_set_field(mpt_entry->mpt_byte_28, MPT_BYTE_28_PD_M,
1890− MPT_BYTE_28_PD_S, mr->pd);
1891− roce_set_field(mpt_entry->mpt_byte_28, MPT_BYTE_28_L_KEY_IDX_L_M,
1892− MPT_BYTE_28_L_KEY_IDX_L_S, mtpt_idx);
1893− roce_set_field(mpt_entry->mpt_byte_64, MPT_BYTE_64_L_KEY_IDX_H_M,
1894− MPT_BYTE_64_L_KEY_IDX_H_S, mtpt_idx >> MTPT_IDX_SHIFT);
1895−
1896− /* DMA memory register */
1897− if (mr->type == MR_TYPE_DMA)
1898− return 0;
1899−
1900− count = hns_roce_mtr_find(hr_dev, &mr->pbl_mtr, 0, pages,
1901− ARRAY_SIZE(pages), &pbl_ba);
1902− if (count < 1) {
1903− ibdev_err(ibdev, "failed to find PBL mtr, count = %d.", count);
1904− return -ENOBUFS;
1905− }
1906−
1907− /* Register user mr */
1908− for (i = 0; i < count; i++) {
1909− switch (i) {
1910− case 0:
1911− mpt_entry->pa0_l = cpu_to_le32((u32)(pages[i]));
1912− roce_set_field(mpt_entry->mpt_byte_36,
1913− MPT_BYTE_36_PA0_H_M,
1914− MPT_BYTE_36_PA0_H_S,
1915− (u32)(pages[i] >> PAGES_SHIFT_32));
1916− break;
1917− case 1:
1918− roce_set_field(mpt_entry->mpt_byte_36,
1919− MPT_BYTE_36_PA1_L_M,
1920− MPT_BYTE_36_PA1_L_S, (u32)(pages[i]));
1921− roce_set_field(mpt_entry->mpt_byte_40,
1922− MPT_BYTE_40_PA1_H_M,
1923− MPT_BYTE_40_PA1_H_S,
1924− (u32)(pages[i] >> PAGES_SHIFT_24));
1925− break;
1926− case 2:
1927− roce_set_field(mpt_entry->mpt_byte_40,
1928− MPT_BYTE_40_PA2_L_M,
1929− MPT_BYTE_40_PA2_L_S, (u32)(pages[i]));
1930− roce_set_field(mpt_entry->mpt_byte_44,
1931− MPT_BYTE_44_PA2_H_M,
1932− MPT_BYTE_44_PA2_H_S,
1933− (u32)(pages[i] >> PAGES_SHIFT_16));
1934− break;
1935− case 3:
1936− roce_set_field(mpt_entry->mpt_byte_44,
1937− MPT_BYTE_44_PA3_L_M,
1938− MPT_BYTE_44_PA3_L_S, (u32)(pages[i]));
1939− roce_set_field(mpt_entry->mpt_byte_48,
1940− MPT_BYTE_48_PA3_H_M,
1941− MPT_BYTE_48_PA3_H_S,
1942− (u32)(pages[i] >> PAGES_SHIFT_8));
1943− break;
1944− case 4:
1945− mpt_entry->pa4_l = cpu_to_le32((u32)(pages[i]));
1946− roce_set_field(mpt_entry->mpt_byte_56,
1947− MPT_BYTE_56_PA4_H_M,
1948− MPT_BYTE_56_PA4_H_S,
1949− (u32)(pages[i] >> PAGES_SHIFT_32));
1950− break;
1951− case 5:
1952− roce_set_field(mpt_entry->mpt_byte_56,
1953− MPT_BYTE_56_PA5_L_M,
1954− MPT_BYTE_56_PA5_L_S, (u32)(pages[i]));
1955− roce_set_field(mpt_entry->mpt_byte_60,
1956− MPT_BYTE_60_PA5_H_M,
1957− MPT_BYTE_60_PA5_H_S,
1958− (u32)(pages[i] >> PAGES_SHIFT_24));
1959− break;
1960− case 6:
1961− roce_set_field(mpt_entry->mpt_byte_60,
1962− MPT_BYTE_60_PA6_L_M,
1963− MPT_BYTE_60_PA6_L_S, (u32)(pages[i]));
1964− roce_set_field(mpt_entry->mpt_byte_64,
1965− MPT_BYTE_64_PA6_H_M,
1966− MPT_BYTE_64_PA6_H_S,
1967− (u32)(pages[i] >> PAGES_SHIFT_16));
1968− break;
1969− default:
1970− break;
1971− }
1972− }
1973−
1974− mpt_entry->pbl_addr_l = cpu_to_le32(pbl_ba);
1975− roce_set_field(mpt_entry->mpt_byte_12, MPT_BYTE_12_PBL_ADDR_H_M,
1976− MPT_BYTE_12_PBL_ADDR_H_S, upper_32_bits(pbl_ba));
1977−
1978− return 0;
1979−}
1980−
1981−static void *get_cqe(struct hns_roce_cq *hr_cq, int n)
1982−{
1983− return hns_roce_buf_offset(hr_cq->mtr.kmem, n * HNS_ROCE_V1_CQE_SIZE);
1984−}
1985−
1986−static void *get_sw_cqe(struct hns_roce_cq *hr_cq, int n)
1987−{
1988− struct hns_roce_cqe *hr_cqe = get_cqe(hr_cq, n & hr_cq->ib_cq.cqe);
1989−
1990− /* Get cqe when Owner bit is Conversely with the MSB of cons_idx */
1991− return (roce_get_bit(hr_cqe->cqe_byte_4, CQE_BYTE_4_OWNER_S) ^
1992− !!(n & hr_cq->cq_depth)) ? hr_cqe : NULL;
1993−}
1994−
1995−static struct hns_roce_cqe *next_cqe_sw(struct hns_roce_cq *hr_cq)
1996−{
1997− return get_sw_cqe(hr_cq, hr_cq->cons_index);
1998−}
1999−
2000−static void hns_roce_v1_cq_set_ci(struct hns_roce_cq *hr_cq, u32 cons_index)
2001−{
2002− __le32 doorbell[2];
2003−
2004− doorbell[0] = cpu_to_le32(cons_index & ((hr_cq->cq_depth << 1) - 1));
2005− doorbell[1] = 0;
2006− roce_set_bit(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_HW_SYNS_S, 1);
2007− roce_set_field(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_M,
2008− ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_S, 3);
2009− roce_set_field(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_MDF_M,
2010− ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_MDF_S, 0);
2011− roce_set_field(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_INP_H_M,
2012− ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_INP_H_S, hr_cq->cqn);
2013−
2014− hns_roce_write64_k(doorbell, hr_cq->db_reg);
2015−}
2016−
2017−static void __hns_roce_v1_cq_clean(struct hns_roce_cq *hr_cq, u32 qpn,
2018− struct hns_roce_srq *srq)
2019−{
2020− struct hns_roce_cqe *cqe, *dest;
2021− u32 prod_index;
2022− int nfreed = 0;
2023− u8 owner_bit;
2024−
2025− for (prod_index = hr_cq->cons_index; get_sw_cqe(hr_cq, prod_index);
2026− ++prod_index) {
2027− if (prod_index == hr_cq->cons_index + hr_cq->ib_cq.cqe)
2028− break;
2029− }
2030−
2031− /*
2032− * Now backwards through the CQ, removing CQ entries
2033− * that match our QP by overwriting them with next entries.
2034− */
2035− while ((int) --prod_index - (int) hr_cq->cons_index >= 0) {
2036− cqe = get_cqe(hr_cq, prod_index & hr_cq->ib_cq.cqe);
2037− if ((roce_get_field(cqe->cqe_byte_16, CQE_BYTE_16_LOCAL_QPN_M,
2038− CQE_BYTE_16_LOCAL_QPN_S) &
2039− HNS_ROCE_CQE_QPN_MASK) == qpn) {
2040− /* In v1 engine, not support SRQ */
2041− ++nfreed;
2042− } else if (nfreed) {
2043− dest = get_cqe(hr_cq, (prod_index + nfreed) &
2044− hr_cq->ib_cq.cqe);
2045− owner_bit = roce_get_bit(dest->cqe_byte_4,
2046− CQE_BYTE_4_OWNER_S);
2047− memcpy(dest, cqe, sizeof(*cqe));
2048− roce_set_bit(dest->cqe_byte_4, CQE_BYTE_4_OWNER_S,
2049− owner_bit);
2050− }
2051− }
2052−
2053− if (nfreed) {
2054− hr_cq->cons_index += nfreed;
2055− hns_roce_v1_cq_set_ci(hr_cq, hr_cq->cons_index);
2056− }
2057−}
2058−
2059−static void hns_roce_v1_cq_clean(struct hns_roce_cq *hr_cq, u32 qpn,
2060− struct hns_roce_srq *srq)
2061−{
2062− spin_lock_irq(&hr_cq->lock);
2063− __hns_roce_v1_cq_clean(hr_cq, qpn, srq);
2064− spin_unlock_irq(&hr_cq->lock);
2065−}
2066−
2067−static void hns_roce_v1_write_cqc(struct hns_roce_dev *hr_dev,
2068− struct hns_roce_cq *hr_cq, void *mb_buf,
2069− u64 *mtts, dma_addr_t dma_handle)
2070−{
2071− struct hns_roce_v1_priv *priv = hr_dev->priv;
2072− struct hns_roce_buf_list *tptr_buf = &priv->tptr_table.tptr_buf;
2073− struct hns_roce_cq_context *cq_context = mb_buf;
2074− dma_addr_t tptr_dma_addr;
2075− int offset;
2076−
2077− memset(cq_context, 0, sizeof(*cq_context));
2078−
2079− /* Get the tptr for this CQ. */
2080− offset = hr_cq->cqn * HNS_ROCE_V1_TPTR_ENTRY_SIZE;
2081− tptr_dma_addr = tptr_buf->map + offset;
2082− hr_cq->tptr_addr = (u16 *)(tptr_buf->buf + offset);
2083−
2084− /* Register cq_context members */
2085− roce_set_field(cq_context->cqc_byte_4,
2086− CQ_CONTEXT_CQC_BYTE_4_CQC_STATE_M,
2087− CQ_CONTEXT_CQC_BYTE_4_CQC_STATE_S, CQ_STATE_VALID);
2088− roce_set_field(cq_context->cqc_byte_4, CQ_CONTEXT_CQC_BYTE_4_CQN_M,
2089− CQ_CONTEXT_CQC_BYTE_4_CQN_S, hr_cq->cqn);
2090−
2091− cq_context->cq_bt_l = cpu_to_le32((u32)dma_handle);
2092−
2093− roce_set_field(cq_context->cqc_byte_12,
2094− CQ_CONTEXT_CQC_BYTE_12_CQ_BT_H_M,
2095− CQ_CONTEXT_CQC_BYTE_12_CQ_BT_H_S,
2096− ((u64)dma_handle >> 32));
2097− roce_set_field(cq_context->cqc_byte_12,
2098− CQ_CONTEXT_CQC_BYTE_12_CQ_CQE_SHIFT_M,
2099− CQ_CONTEXT_CQC_BYTE_12_CQ_CQE_SHIFT_S,
2100− ilog2(hr_cq->cq_depth));
2101− roce_set_field(cq_context->cqc_byte_12, CQ_CONTEXT_CQC_BYTE_12_CEQN_M,
2102− CQ_CONTEXT_CQC_BYTE_12_CEQN_S, hr_cq->vector);
2103−
2104− cq_context->cur_cqe_ba0_l = cpu_to_le32((u32)(mtts[0]));
2105−
2106− roce_set_field(cq_context->cqc_byte_20,
2107− CQ_CONTEXT_CQC_BYTE_20_CUR_CQE_BA0_H_M,
2108− CQ_CONTEXT_CQC_BYTE_20_CUR_CQE_BA0_H_S, (mtts[0]) >> 32);
2109− /* Dedicated hardware, directly set 0 */
2110− roce_set_field(cq_context->cqc_byte_20,
2111− CQ_CONTEXT_CQC_BYTE_20_CQ_CUR_INDEX_M,
2112− CQ_CONTEXT_CQC_BYTE_20_CQ_CUR_INDEX_S, 0);
2113− /**
2114− * 44 = 32 + 12, When evaluating addr to hardware, shift 12 because of
2115− * using 4K page, and shift more 32 because of
2116− * calculating the high 32 bit value evaluated to hardware.
2117− */
2118− roce_set_field(cq_context->cqc_byte_20,
2119− CQ_CONTEXT_CQC_BYTE_20_CQE_TPTR_ADDR_H_M,
2120− CQ_CONTEXT_CQC_BYTE_20_CQE_TPTR_ADDR_H_S,
2121− tptr_dma_addr >> 44);
2122−
2123− cq_context->cqe_tptr_addr_l = cpu_to_le32((u32)(tptr_dma_addr >> 12));
2124−
2125− roce_set_field(cq_context->cqc_byte_32,
2126− CQ_CONTEXT_CQC_BYTE_32_CUR_CQE_BA1_H_M,
2127− CQ_CONTEXT_CQC_BYTE_32_CUR_CQE_BA1_H_S, 0);
2128− roce_set_bit(cq_context->cqc_byte_32,
2129− CQ_CONTEXT_CQC_BYTE_32_SE_FLAG_S, 0);
2130− roce_set_bit(cq_context->cqc_byte_32,
2131− CQ_CONTEXT_CQC_BYTE_32_CE_FLAG_S, 0);
2132− roce_set_bit(cq_context->cqc_byte_32,
2133− CQ_CONTEXT_CQC_BYTE_32_NOTIFICATION_FLAG_S, 0);
2134− roce_set_bit(cq_context->cqc_byte_32,
2135− CQ_CQNTEXT_CQC_BYTE_32_TYPE_OF_COMPLETION_NOTIFICATION_S,
2136− 0);
2137− /* The initial value of cq's ci is 0 */
2138− roce_set_field(cq_context->cqc_byte_32,
2139− CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_M,
2140− CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_S, 0);
2141−}
2142−
2143−static int hns_roce_v1_req_notify_cq(struct ib_cq *ibcq,
2144− enum ib_cq_notify_flags flags)
2145−{
2146− struct hns_roce_cq *hr_cq = to_hr_cq(ibcq);
2147− u32 notification_flag;
2148− __le32 doorbell[2] = {};
2149−
2150− notification_flag = (flags & IB_CQ_SOLICITED_MASK) ==
2151− IB_CQ_SOLICITED ? CQ_DB_REQ_NOT : CQ_DB_REQ_NOT_SOL;
2152− /*
2153− * flags = 0; Notification Flag = 1, next
2154− * flags = 1; Notification Flag = 0, solocited
2155− */
2156− doorbell[0] =
2157− cpu_to_le32(hr_cq->cons_index & ((hr_cq->cq_depth << 1) - 1));
2158− roce_set_bit(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_HW_SYNS_S, 1);
2159− roce_set_field(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_M,
2160− ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_S, 3);
2161− roce_set_field(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_MDF_M,
2162− ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_MDF_S, 1);
2163− roce_set_field(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_INP_H_M,
2164− ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_INP_H_S,
2165− hr_cq->cqn | notification_flag);
2166−
2167− hns_roce_write64_k(doorbell, hr_cq->db_reg);
2168−
2169− return 0;
2170−}
2171−
2172−static int hns_roce_v1_poll_one(struct hns_roce_cq *hr_cq,
2173− struct hns_roce_qp **cur_qp, struct ib_wc *wc)
2174−{
2175− int qpn;
2176− int is_send;
2177− u16 wqe_ctr;
2178− u32 status;
2179− u32 opcode;
2180− struct hns_roce_cqe *cqe;
2181− struct hns_roce_qp *hr_qp;
2182− struct hns_roce_wq *wq;
2183− struct hns_roce_wqe_ctrl_seg *sq_wqe;
2184− struct hns_roce_dev *hr_dev = to_hr_dev(hr_cq->ib_cq.device);
2185− struct device *dev = &hr_dev->pdev->dev;
2186−
2187− /* Find cqe according consumer index */
2188− cqe = next_cqe_sw(hr_cq);
2189− if (!cqe)
2190− return -EAGAIN;
2191−
2192− ++hr_cq->cons_index;
2193− /* Memory barrier */
2194− rmb();
2195− /* 0->SQ, 1->RQ */
2196− is_send = !(roce_get_bit(cqe->cqe_byte_4, CQE_BYTE_4_SQ_RQ_FLAG_S));
2197−
2198− /* Local_qpn in UD cqe is always 1, so it needs to compute new qpn */
2199− if (roce_get_field(cqe->cqe_byte_16, CQE_BYTE_16_LOCAL_QPN_M,
2200− CQE_BYTE_16_LOCAL_QPN_S) <= 1) {
2201− qpn = roce_get_field(cqe->cqe_byte_20, CQE_BYTE_20_PORT_NUM_M,
2202− CQE_BYTE_20_PORT_NUM_S) +
2203− roce_get_field(cqe->cqe_byte_16, CQE_BYTE_16_LOCAL_QPN_M,
2204− CQE_BYTE_16_LOCAL_QPN_S) *
2205− HNS_ROCE_MAX_PORTS;
2206− } else {
2207− qpn = roce_get_field(cqe->cqe_byte_16, CQE_BYTE_16_LOCAL_QPN_M,
2208− CQE_BYTE_16_LOCAL_QPN_S);
2209− }
2210−
2211− if (!*cur_qp || (qpn & HNS_ROCE_CQE_QPN_MASK) != (*cur_qp)->qpn) {
2212− hr_qp = __hns_roce_qp_lookup(hr_dev, qpn);
2213− if (unlikely(!hr_qp)) {
2214− dev_err(dev, "CQ %06lx with entry for unknown QPN %06x\n",
2215− hr_cq->cqn, (qpn & HNS_ROCE_CQE_QPN_MASK));
2216− return -EINVAL;
2217− }
2218−
2219− *cur_qp = hr_qp;
2220− }
2221−
2222− wc->qp = &(*cur_qp)->ibqp;
2223− wc->vendor_err = 0;
2224−
2225− status = roce_get_field(cqe->cqe_byte_4,
2226− CQE_BYTE_4_STATUS_OF_THE_OPERATION_M,
2227− CQE_BYTE_4_STATUS_OF_THE_OPERATION_S) &
2228− HNS_ROCE_CQE_STATUS_MASK;
2229− switch (status) {
2230− case HNS_ROCE_CQE_SUCCESS:
2231− wc->status = IB_WC_SUCCESS;
2232− break;
2233− case HNS_ROCE_CQE_SYNDROME_LOCAL_LENGTH_ERR:
2234− wc->status = IB_WC_LOC_LEN_ERR;
2235− break;
2236− case HNS_ROCE_CQE_SYNDROME_LOCAL_QP_OP_ERR:
2237− wc->status = IB_WC_LOC_QP_OP_ERR;
2238− break;
2239− case HNS_ROCE_CQE_SYNDROME_LOCAL_PROT_ERR:
2240− wc->status = IB_WC_LOC_PROT_ERR;
2241− break;
2242− case HNS_ROCE_CQE_SYNDROME_WR_FLUSH_ERR:
2243− wc->status = IB_WC_WR_FLUSH_ERR;
2244− break;
2245− case HNS_ROCE_CQE_SYNDROME_MEM_MANAGE_OPERATE_ERR:
2246− wc->status = IB_WC_MW_BIND_ERR;
2247− break;
2248− case HNS_ROCE_CQE_SYNDROME_BAD_RESP_ERR:
2249− wc->status = IB_WC_BAD_RESP_ERR;
2250− break;
2251− case HNS_ROCE_CQE_SYNDROME_LOCAL_ACCESS_ERR:
2252− wc->status = IB_WC_LOC_ACCESS_ERR;
2253− break;
2254− case HNS_ROCE_CQE_SYNDROME_REMOTE_INVAL_REQ_ERR:
2255− wc->status = IB_WC_REM_INV_REQ_ERR;
2256− break;
2257− case HNS_ROCE_CQE_SYNDROME_REMOTE_ACCESS_ERR:
2258− wc->status = IB_WC_REM_ACCESS_ERR;
2259− break;
2260− case HNS_ROCE_CQE_SYNDROME_REMOTE_OP_ERR:
2261− wc->status = IB_WC_REM_OP_ERR;
2262− break;
2263− case HNS_ROCE_CQE_SYNDROME_TRANSPORT_RETRY_EXC_ERR:
2264− wc->status = IB_WC_RETRY_EXC_ERR;
2265− break;
2266− case HNS_ROCE_CQE_SYNDROME_RNR_RETRY_EXC_ERR:
2267− wc->status = IB_WC_RNR_RETRY_EXC_ERR;
2268− break;
2269− default:
2270− wc->status = IB_WC_GENERAL_ERR;
2271− break;
2272− }
2273−
2274− /* CQE status error, directly return */
2275− if (wc->status != IB_WC_SUCCESS)
2276− return 0;
2277−
2278− if (is_send) {
2279− /* SQ conrespond to CQE */
2280− sq_wqe = hns_roce_get_send_wqe(*cur_qp,
2281− roce_get_field(cqe->cqe_byte_4,
2282− CQE_BYTE_4_WQE_INDEX_M,
2283− CQE_BYTE_4_WQE_INDEX_S) &
2284− ((*cur_qp)->sq.wqe_cnt-1));
2285− switch (le32_to_cpu(sq_wqe->flag) & HNS_ROCE_WQE_OPCODE_MASK) {
2286− case HNS_ROCE_WQE_OPCODE_SEND:
2287− wc->opcode = IB_WC_SEND;
2288− break;
2289− case HNS_ROCE_WQE_OPCODE_RDMA_READ:
2290− wc->opcode = IB_WC_RDMA_READ;
2291− wc->byte_len = le32_to_cpu(cqe->byte_cnt);
2292− break;
2293− case HNS_ROCE_WQE_OPCODE_RDMA_WRITE:
2294− wc->opcode = IB_WC_RDMA_WRITE;
2295− break;
2296− case HNS_ROCE_WQE_OPCODE_LOCAL_INV:
2297− wc->opcode = IB_WC_LOCAL_INV;
2298− break;
2299− case HNS_ROCE_WQE_OPCODE_UD_SEND:
2300− wc->opcode = IB_WC_SEND;
2301− break;
2302− default:
2303− wc->status = IB_WC_GENERAL_ERR;
2304− break;
2305− }
2306− wc->wc_flags = (le32_to_cpu(sq_wqe->flag) & HNS_ROCE_WQE_IMM ?
2307− IB_WC_WITH_IMM : 0);
2308−
2309− wq = &(*cur_qp)->sq;
2310− if ((*cur_qp)->sq_signal_bits) {
2311− /*
2312− * If sg_signal_bit is 1,
2313− * firstly tail pointer updated to wqe
2314− * which current cqe correspond to
2315− */
2316− wqe_ctr = (u16)roce_get_field(cqe->cqe_byte_4,
2317− CQE_BYTE_4_WQE_INDEX_M,
2318− CQE_BYTE_4_WQE_INDEX_S);
2319− wq->tail += (wqe_ctr - (u16)wq->tail) &
2320− (wq->wqe_cnt - 1);
2321− }
2322− wc->wr_id = wq->wrid[wq->tail & (wq->wqe_cnt - 1)];
2323− ++wq->tail;
2324− } else {
2325− /* RQ conrespond to CQE */
2326− wc->byte_len = le32_to_cpu(cqe->byte_cnt);
2327− opcode = roce_get_field(cqe->cqe_byte_4,
2328− CQE_BYTE_4_OPERATION_TYPE_M,
2329− CQE_BYTE_4_OPERATION_TYPE_S) &
2330− HNS_ROCE_CQE_OPCODE_MASK;
2331− switch (opcode) {
2332− case HNS_ROCE_OPCODE_RDMA_WITH_IMM_RECEIVE:
2333− wc->opcode = IB_WC_RECV_RDMA_WITH_IMM;
2334− wc->wc_flags = IB_WC_WITH_IMM;
2335− wc->ex.imm_data =
2336− cpu_to_be32(le32_to_cpu(cqe->immediate_data));
2337− break;
2338− case HNS_ROCE_OPCODE_SEND_DATA_RECEIVE:
2339− if (roce_get_bit(cqe->cqe_byte_4,
2340− CQE_BYTE_4_IMM_INDICATOR_S)) {
2341− wc->opcode = IB_WC_RECV;
2342− wc->wc_flags = IB_WC_WITH_IMM;
2343− wc->ex.imm_data = cpu_to_be32(
2344− le32_to_cpu(cqe->immediate_data));
2345− } else {
2346− wc->opcode = IB_WC_RECV;
2347− wc->wc_flags = 0;
2348− }
2349− break;
2350− default:
2351− wc->status = IB_WC_GENERAL_ERR;
2352− break;
2353− }
2354−
2355− /* Update tail pointer, record wr_id */
2356− wq = &(*cur_qp)->rq;
2357− wc->wr_id = wq->wrid[wq->tail & (wq->wqe_cnt - 1)];
2358− ++wq->tail;
2359− wc->sl = (u8)roce_get_field(cqe->cqe_byte_20, CQE_BYTE_20_SL_M,
2360− CQE_BYTE_20_SL_S);
2361− wc->src_qp = (u8)roce_get_field(cqe->cqe_byte_20,
2362− CQE_BYTE_20_REMOTE_QPN_M,
2363− CQE_BYTE_20_REMOTE_QPN_S);
2364− wc->wc_flags |= (roce_get_bit(cqe->cqe_byte_20,
2365− CQE_BYTE_20_GRH_PRESENT_S) ?
2366− IB_WC_GRH : 0);
2367− wc->pkey_index = (u16)roce_get_field(cqe->cqe_byte_28,
2368− CQE_BYTE_28_P_KEY_IDX_M,
2369− CQE_BYTE_28_P_KEY_IDX_S);
2370− }
2371−
2372− return 0;
2373−}
2374−
2375−int hns_roce_v1_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc)
2376−{
2377− struct hns_roce_cq *hr_cq = to_hr_cq(ibcq);
2378− struct hns_roce_qp *cur_qp = NULL;
2379− unsigned long flags;
2380− int npolled;
2381− int ret;
2382−
2383− spin_lock_irqsave(&hr_cq->lock, flags);
2384−
2385− for (npolled = 0; npolled < num_entries; ++npolled) {
2386− ret = hns_roce_v1_poll_one(hr_cq, &cur_qp, wc + npolled);
2387− if (ret)
2388− break;
2389− }
2390−
2391− if (npolled) {
2392− *hr_cq->tptr_addr = hr_cq->cons_index &
2393− ((hr_cq->cq_depth << 1) - 1);
2394−
2395− hns_roce_v1_cq_set_ci(hr_cq, hr_cq->cons_index);
2396− }
2397−
2398− spin_unlock_irqrestore(&hr_cq->lock, flags);
2399−
2400− if (ret == 0 || ret == -EAGAIN)
2401− return npolled;
2402− else
2403− return ret;
2404−}
2405−
2406−static int hns_roce_v1_clear_hem(struct hns_roce_dev *hr_dev,
2407− struct hns_roce_hem_table *table, int obj,
2408− int step_idx)
2409−{
2410− struct hns_roce_v1_priv *priv = hr_dev->priv;
2411− struct device *dev = &hr_dev->pdev->dev;
2412− long end = HW_SYNC_TIMEOUT_MSECS;
2413− __le32 bt_cmd_val[2] = {0};
2414− unsigned long flags = 0;
2415− void __iomem *bt_cmd;
2416− u64 bt_ba = 0;
2417−
2418− switch (table->type) {
2419− case HEM_TYPE_QPC:
2420− bt_ba = priv->bt_table.qpc_buf.map >> 12;
2421− break;
2422− case HEM_TYPE_MTPT:
2423− bt_ba = priv->bt_table.mtpt_buf.map >> 12;
2424− break;
2425− case HEM_TYPE_CQC:
2426− bt_ba = priv->bt_table.cqc_buf.map >> 12;
2427− break;
2428− case HEM_TYPE_SRQC:
2429− dev_dbg(dev, "HEM_TYPE_SRQC not support.\n");
2430− return -EINVAL;
2431− default:
2432− return 0;
2433− }
2434− roce_set_field(bt_cmd_val[1], ROCEE_BT_CMD_H_ROCEE_BT_CMD_MDF_M,
2435− ROCEE_BT_CMD_H_ROCEE_BT_CMD_MDF_S, table->type);
2436− roce_set_field(bt_cmd_val[1], ROCEE_BT_CMD_H_ROCEE_BT_CMD_IN_MDF_M,
2437− ROCEE_BT_CMD_H_ROCEE_BT_CMD_IN_MDF_S, obj);
2438− roce_set_bit(bt_cmd_val[1], ROCEE_BT_CMD_H_ROCEE_BT_CMD_S, 0);
2439− roce_set_bit(bt_cmd_val[1], ROCEE_BT_CMD_H_ROCEE_BT_CMD_HW_SYNS_S, 1);
2440−
2441− spin_lock_irqsave(&hr_dev->bt_cmd_lock, flags);
2442−
2443− bt_cmd = hr_dev->reg_base + ROCEE_BT_CMD_H_REG;
2444−
2445− while (1) {
2446− if (readl(bt_cmd) >> BT_CMD_SYNC_SHIFT) {
2447− if (!end) {
2448− dev_err(dev, "Write bt_cmd err,hw_sync is not zero.\n");
2449− spin_unlock_irqrestore(&hr_dev->bt_cmd_lock,
2450− flags);
2451− return -EBUSY;
2452− }
2453− } else {
2454− break;
2455− }
2456− mdelay(HW_SYNC_SLEEP_TIME_INTERVAL);
2457− end -= HW_SYNC_SLEEP_TIME_INTERVAL;
2458− }
2459−
2460− bt_cmd_val[0] = cpu_to_le32(bt_ba);
2461− roce_set_field(bt_cmd_val[1], ROCEE_BT_CMD_H_ROCEE_BT_CMD_BA_H_M,
2462− ROCEE_BT_CMD_H_ROCEE_BT_CMD_BA_H_S, bt_ba >> 32);
2463− hns_roce_write64_k(bt_cmd_val, hr_dev->reg_base + ROCEE_BT_CMD_L_REG);
2464−
2465− spin_unlock_irqrestore(&hr_dev->bt_cmd_lock, flags);
2466−
2467− return 0;
2468−}
2469−
2470−static int hns_roce_v1_qp_modify(struct hns_roce_dev *hr_dev,
2471− enum hns_roce_qp_state cur_state,
2472− enum hns_roce_qp_state new_state,
2473− struct hns_roce_qp_context *context,
2474− struct hns_roce_qp *hr_qp)
2475−{
2476− static const u16
2477− op[HNS_ROCE_QP_NUM_STATE][HNS_ROCE_QP_NUM_STATE] = {
2478− [HNS_ROCE_QP_STATE_RST] = {
2479− [HNS_ROCE_QP_STATE_RST] = HNS_ROCE_CMD_2RST_QP,
2480− [HNS_ROCE_QP_STATE_ERR] = HNS_ROCE_CMD_2ERR_QP,
2481− [HNS_ROCE_QP_STATE_INIT] = HNS_ROCE_CMD_RST2INIT_QP,
2482− },
2483− [HNS_ROCE_QP_STATE_INIT] = {
2484− [HNS_ROCE_QP_STATE_RST] = HNS_ROCE_CMD_2RST_QP,
2485− [HNS_ROCE_QP_STATE_ERR] = HNS_ROCE_CMD_2ERR_QP,
2486− /* Note: In v1 engine, HW doesn't support RST2INIT.
2487− * We use RST2INIT cmd instead of INIT2INIT.
2488− */
2489− [HNS_ROCE_QP_STATE_INIT] = HNS_ROCE_CMD_RST2INIT_QP,
2490− [HNS_ROCE_QP_STATE_RTR] = HNS_ROCE_CMD_INIT2RTR_QP,
2491− },
2492− [HNS_ROCE_QP_STATE_RTR] = {
2493− [HNS_ROCE_QP_STATE_RST] = HNS_ROCE_CMD_2RST_QP,
2494− [HNS_ROCE_QP_STATE_ERR] = HNS_ROCE_CMD_2ERR_QP,
2495− [HNS_ROCE_QP_STATE_RTS] = HNS_ROCE_CMD_RTR2RTS_QP,
2496− },
2497− [HNS_ROCE_QP_STATE_RTS] = {
2498− [HNS_ROCE_QP_STATE_RST] = HNS_ROCE_CMD_2RST_QP,
2499− [HNS_ROCE_QP_STATE_ERR] = HNS_ROCE_CMD_2ERR_QP,
2500− [HNS_ROCE_QP_STATE_RTS] = HNS_ROCE_CMD_RTS2RTS_QP,
2501− [HNS_ROCE_QP_STATE_SQD] = HNS_ROCE_CMD_RTS2SQD_QP,
2502− },
2503− [HNS_ROCE_QP_STATE_SQD] = {
2504− [HNS_ROCE_QP_STATE_RST] = HNS_ROCE_CMD_2RST_QP,
2505− [HNS_ROCE_QP_STATE_ERR] = HNS_ROCE_CMD_2ERR_QP,
2506− [HNS_ROCE_QP_STATE_RTS] = HNS_ROCE_CMD_SQD2RTS_QP,
2507− [HNS_ROCE_QP_STATE_SQD] = HNS_ROCE_CMD_SQD2SQD_QP,
2508− },
2509− [HNS_ROCE_QP_STATE_ERR] = {
2510− [HNS_ROCE_QP_STATE_RST] = HNS_ROCE_CMD_2RST_QP,
2511− [HNS_ROCE_QP_STATE_ERR] = HNS_ROCE_CMD_2ERR_QP,
2512− }
2513− };
2514−
2515− struct hns_roce_cmd_mailbox *mailbox;
2516− struct device *dev = &hr_dev->pdev->dev;
2517− int ret;
2518−
2519− if (cur_state >= HNS_ROCE_QP_NUM_STATE ||
2520− new_state >= HNS_ROCE_QP_NUM_STATE ||
2521− !op[cur_state][new_state]) {
2522− dev_err(dev, "[modify_qp]not support state %d to %d\n",
2523− cur_state, new_state);
2524− return -EINVAL;
2525− }
2526−
2527− if (op[cur_state][new_state] == HNS_ROCE_CMD_2RST_QP)
2528− return hns_roce_cmd_mbox(hr_dev, 0, 0, hr_qp->qpn, 2,
2529− HNS_ROCE_CMD_2RST_QP,
2530− HNS_ROCE_CMD_TIMEOUT_MSECS);
2531−
2532− if (op[cur_state][new_state] == HNS_ROCE_CMD_2ERR_QP)
2533− return hns_roce_cmd_mbox(hr_dev, 0, 0, hr_qp->qpn, 2,
2534− HNS_ROCE_CMD_2ERR_QP,
2535− HNS_ROCE_CMD_TIMEOUT_MSECS);
2536−
2537− mailbox = hns_roce_alloc_cmd_mailbox(hr_dev);
2538− if (IS_ERR(mailbox))
2539− return PTR_ERR(mailbox);
2540−
2541− memcpy(mailbox->buf, context, sizeof(*context));
2542−
2543− ret = hns_roce_cmd_mbox(hr_dev, mailbox->dma, 0, hr_qp->qpn, 0,
2544− op[cur_state][new_state],
2545− HNS_ROCE_CMD_TIMEOUT_MSECS);
2546−
2547− hns_roce_free_cmd_mailbox(hr_dev, mailbox);
2548− return ret;
2549−}
2550−
2551−static int find_wqe_mtt(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp,
2552− u64 *sq_ba, u64 *rq_ba, dma_addr_t *bt_ba)
2553−{
2554− struct ib_device *ibdev = &hr_dev->ib_dev;
2555− int count;
2556−
2557− count = hns_roce_mtr_find(hr_dev, &hr_qp->mtr, 0, sq_ba, 1, bt_ba);
2558− if (count < 1) {
2559− ibdev_err(ibdev, "Failed to find SQ ba\n");
2560− return -ENOBUFS;
2561− }
2562−
2563− count = hns_roce_mtr_find(hr_dev, &hr_qp->mtr, hr_qp->rq.offset, rq_ba,
2564− 1, NULL);
2565− if (!count) {
2566− ibdev_err(ibdev, "Failed to find RQ ba\n");
2567− return -ENOBUFS;
2568− }
2569−
2570− return 0;
2571−}
2572−
2573−static int hns_roce_v1_m_sqp(struct ib_qp *ibqp, const struct ib_qp_attr *attr,
2574− int attr_mask, enum ib_qp_state cur_state,
2575− enum ib_qp_state new_state)
2576−{
2577− struct hns_roce_dev *hr_dev = to_hr_dev(ibqp->device);
2578− struct hns_roce_qp *hr_qp = to_hr_qp(ibqp);
2579− struct hns_roce_sqp_context *context;
2580− dma_addr_t dma_handle = 0;
2581− u32 __iomem *addr;
2582− u64 sq_ba = 0;
2583− u64 rq_ba = 0;
2584− __le32 tmp;
2585− u32 reg_val;
2586−
2587− context = kzalloc(sizeof(*context), GFP_KERNEL);
2588− if (!context)
2589− return -ENOMEM;
2590−
2591− /* Search QP buf's MTTs */
2592− if (find_wqe_mtt(hr_dev, hr_qp, &sq_ba, &rq_ba, &dma_handle))
2593− goto out;
2594−
2595− if (cur_state == IB_QPS_RESET && new_state == IB_QPS_INIT) {
2596− roce_set_field(context->qp1c_bytes_4,
2597− QP1C_BYTES_4_SQ_WQE_SHIFT_M,
2598− QP1C_BYTES_4_SQ_WQE_SHIFT_S,
2599− ilog2((unsigned int)hr_qp->sq.wqe_cnt));
2600− roce_set_field(context->qp1c_bytes_4,
2601− QP1C_BYTES_4_RQ_WQE_SHIFT_M,
2602− QP1C_BYTES_4_RQ_WQE_SHIFT_S,
2603− ilog2((unsigned int)hr_qp->rq.wqe_cnt));
2604− roce_set_field(context->qp1c_bytes_4, QP1C_BYTES_4_PD_M,
2605− QP1C_BYTES_4_PD_S, to_hr_pd(ibqp->pd)->pdn);
2606−
2607− context->sq_rq_bt_l = cpu_to_le32(dma_handle);
2608− roce_set_field(context->qp1c_bytes_12,
2609− QP1C_BYTES_12_SQ_RQ_BT_H_M,
2610− QP1C_BYTES_12_SQ_RQ_BT_H_S,
2611− upper_32_bits(dma_handle));
2612−
2613− roce_set_field(context->qp1c_bytes_16, QP1C_BYTES_16_RQ_HEAD_M,
2614− QP1C_BYTES_16_RQ_HEAD_S, hr_qp->rq.head);
2615− roce_set_field(context->qp1c_bytes_16, QP1C_BYTES_16_PORT_NUM_M,
2616− QP1C_BYTES_16_PORT_NUM_S, hr_qp->phy_port);
2617− roce_set_bit(context->qp1c_bytes_16,
2618− QP1C_BYTES_16_SIGNALING_TYPE_S,
2619− hr_qp->sq_signal_bits);
2620− roce_set_bit(context->qp1c_bytes_16, QP1C_BYTES_16_RQ_BA_FLG_S,
2621− 1);
2622− roce_set_bit(context->qp1c_bytes_16, QP1C_BYTES_16_SQ_BA_FLG_S,
2623− 1);
2624− roce_set_bit(context->qp1c_bytes_16, QP1C_BYTES_16_QP1_ERR_S,
2625− 0);
2626−
2627− roce_set_field(context->qp1c_bytes_20, QP1C_BYTES_20_SQ_HEAD_M,
2628− QP1C_BYTES_20_SQ_HEAD_S, hr_qp->sq.head);
2629− roce_set_field(context->qp1c_bytes_20, QP1C_BYTES_20_PKEY_IDX_M,
2630− QP1C_BYTES_20_PKEY_IDX_S, attr->pkey_index);
2631−
2632− context->cur_rq_wqe_ba_l = cpu_to_le32(rq_ba);
2633−
2634− roce_set_field(context->qp1c_bytes_28,
2635− QP1C_BYTES_28_CUR_RQ_WQE_BA_H_M,
2636− QP1C_BYTES_28_CUR_RQ_WQE_BA_H_S,
2637− upper_32_bits(rq_ba));
2638− roce_set_field(context->qp1c_bytes_28,
2639− QP1C_BYTES_28_RQ_CUR_IDX_M,
2640− QP1C_BYTES_28_RQ_CUR_IDX_S, 0);
2641−
2642− roce_set_field(context->qp1c_bytes_32,
2643− QP1C_BYTES_32_RX_CQ_NUM_M,
2644− QP1C_BYTES_32_RX_CQ_NUM_S,
2645− to_hr_cq(ibqp->recv_cq)->cqn);
2646− roce_set_field(context->qp1c_bytes_32,
2647− QP1C_BYTES_32_TX_CQ_NUM_M,
2648− QP1C_BYTES_32_TX_CQ_NUM_S,
2649− to_hr_cq(ibqp->send_cq)->cqn);
2650−
2651− context->cur_sq_wqe_ba_l = cpu_to_le32(sq_ba);
2652−
2653− roce_set_field(context->qp1c_bytes_40,
2654− QP1C_BYTES_40_CUR_SQ_WQE_BA_H_M,
2655− QP1C_BYTES_40_CUR_SQ_WQE_BA_H_S,
2656− upper_32_bits(sq_ba));
2657− roce_set_field(context->qp1c_bytes_40,
2658− QP1C_BYTES_40_SQ_CUR_IDX_M,
2659− QP1C_BYTES_40_SQ_CUR_IDX_S, 0);
2660−
2661− /* Copy context to QP1C register */
2662− addr = (u32 __iomem *)(hr_dev->reg_base +
2663− ROCEE_QP1C_CFG0_0_REG +
2664− hr_qp->phy_port * sizeof(*context));
2665−
2666− writel(le32_to_cpu(context->qp1c_bytes_4), addr);
2667− writel(le32_to_cpu(context->sq_rq_bt_l), addr + 1);
2668− writel(le32_to_cpu(context->qp1c_bytes_12), addr + 2);
2669− writel(le32_to_cpu(context->qp1c_bytes_16), addr + 3);
2670− writel(le32_to_cpu(context->qp1c_bytes_20), addr + 4);
2671− writel(le32_to_cpu(context->cur_rq_wqe_ba_l), addr + 5);
2672− writel(le32_to_cpu(context->qp1c_bytes_28), addr + 6);
2673− writel(le32_to_cpu(context->qp1c_bytes_32), addr + 7);
2674− writel(le32_to_cpu(context->cur_sq_wqe_ba_l), addr + 8);
2675− writel(le32_to_cpu(context->qp1c_bytes_40), addr + 9);
2676− }
2677−
2678− /* Modify QP1C status */
2679− reg_val = roce_read(hr_dev, ROCEE_QP1C_CFG0_0_REG +
2680− hr_qp->phy_port * sizeof(*context));
2681− tmp = cpu_to_le32(reg_val);
2682− roce_set_field(tmp, ROCEE_QP1C_CFG0_0_ROCEE_QP1C_QP_ST_M,
2683− ROCEE_QP1C_CFG0_0_ROCEE_QP1C_QP_ST_S, new_state);
2684− reg_val = le32_to_cpu(tmp);
2685− roce_write(hr_dev, ROCEE_QP1C_CFG0_0_REG +
2686− hr_qp->phy_port * sizeof(*context), reg_val);
2687−
2688− hr_qp->state = new_state;
2689− if (new_state == IB_QPS_RESET) {
2690− hns_roce_v1_cq_clean(to_hr_cq(ibqp->recv_cq), hr_qp->qpn,
2691− ibqp->srq ? to_hr_srq(ibqp->srq) : NULL);
2692− if (ibqp->send_cq != ibqp->recv_cq)
2693− hns_roce_v1_cq_clean(to_hr_cq(ibqp->send_cq),
2694− hr_qp->qpn, NULL);
2695−
2696− hr_qp->rq.head = 0;
2697− hr_qp->rq.tail = 0;
2698− hr_qp->sq.head = 0;
2699− hr_qp->sq.tail = 0;
2700− }
2701−
2702− kfree(context);
2703− return 0;
2704−
2705−out:
2706− kfree(context);
2707− return -EINVAL;
2708−}
2709−
2710−static bool check_qp_state(enum ib_qp_state cur_state,
2711− enum ib_qp_state new_state)
2712−{
2713− static const bool sm[][IB_QPS_ERR + 1] = {
2714− [IB_QPS_RESET] = { [IB_QPS_RESET] = true,
2715− [IB_QPS_INIT] = true },
2716− [IB_QPS_INIT] = { [IB_QPS_RESET] = true,
2717− [IB_QPS_INIT] = true,
2718− [IB_QPS_RTR] = true,
2719− [IB_QPS_ERR] = true },
2720− [IB_QPS_RTR] = { [IB_QPS_RESET] = true,
2721− [IB_QPS_RTS] = true,
2722− [IB_QPS_ERR] = true },
2723− [IB_QPS_RTS] = { [IB_QPS_RESET] = true, [IB_QPS_ERR] = true },
2724− [IB_QPS_SQD] = {},
2725− [IB_QPS_SQE] = {},
2726− [IB_QPS_ERR] = { [IB_QPS_RESET] = true, [IB_QPS_ERR] = true }
2727− };
2728−
2729− return sm[cur_state][new_state];
2730−}
2731−
2732−static int hns_roce_v1_m_qp(struct ib_qp *ibqp, const struct ib_qp_attr *attr,
2733− int attr_mask, enum ib_qp_state cur_state,
2734− enum ib_qp_state new_state)
2735−{
2736− struct hns_roce_dev *hr_dev = to_hr_dev(ibqp->device);
2737− struct hns_roce_qp *hr_qp = to_hr_qp(ibqp);
2738− struct device *dev = &hr_dev->pdev->dev;
2739− struct hns_roce_qp_context *context;
2740− const struct ib_global_route *grh = rdma_ah_read_grh(&attr->ah_attr);
2741− dma_addr_t dma_handle_2 = 0;
2742− dma_addr_t dma_handle = 0;
2743− __le32 doorbell[2] = {0};
2744− u64 *mtts_2 = NULL;
2745− int ret = -EINVAL;
2746− const u8 *smac;
2747− u64 sq_ba = 0;
2748− u64 rq_ba = 0;
2749− u32 port;
2750− u32 port_num;
2751− u8 *dmac;
2752−
2753− if (!check_qp_state(cur_state, new_state)) {
2754− ibdev_err(ibqp->device,
2755− "not support QP(%u) status from %d to %d\n",
2756− ibqp->qp_num, cur_state, new_state);
2757− return -EINVAL;
2758− }
2759−
2760− context = kzalloc(sizeof(*context), GFP_KERNEL);
2761− if (!context)
2762− return -ENOMEM;
2763−
2764− /* Search qp buf's mtts */
2765− if (find_wqe_mtt(hr_dev, hr_qp, &sq_ba, &rq_ba, &dma_handle))
2766− goto out;
2767−
2768− /* Search IRRL's mtts */
2769− mtts_2 = hns_roce_table_find(hr_dev, &hr_dev->qp_table.irrl_table,
2770− hr_qp->qpn, &dma_handle_2);
2771− if (mtts_2 == NULL) {
2772− dev_err(dev, "qp irrl_table find failed\n");
2773− goto out;
2774− }
2775−
2776− /*
2777− * Reset to init
2778− * Mandatory param:
2779− * IB_QP_STATE | IB_QP_PKEY_INDEX | IB_QP_PORT | IB_QP_ACCESS_FLAGS
2780− * Optional param: NA
2781− */
2782− if (cur_state == IB_QPS_RESET && new_state == IB_QPS_INIT) {
2783− roce_set_field(context->qpc_bytes_4,
2784− QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_M,
2785− QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_S,
2786− to_hr_qp_type(hr_qp->ibqp.qp_type));
2787−
2788− roce_set_bit(context->qpc_bytes_4,
2789− QP_CONTEXT_QPC_BYTE_4_ENABLE_FPMR_S, 0);
2790− roce_set_bit(context->qpc_bytes_4,
2791− QP_CONTEXT_QPC_BYTE_4_RDMA_READ_ENABLE_S,
2792− !!(attr->qp_access_flags & IB_ACCESS_REMOTE_READ));
2793− roce_set_bit(context->qpc_bytes_4,
2794− QP_CONTEXT_QPC_BYTE_4_RDMA_WRITE_ENABLE_S,
2795− !!(attr->qp_access_flags & IB_ACCESS_REMOTE_WRITE)
2796− );
2797− roce_set_bit(context->qpc_bytes_4,
2798− QP_CONTEXT_QPC_BYTE_4_ATOMIC_OPERATION_ENABLE_S,
2799− !!(attr->qp_access_flags & IB_ACCESS_REMOTE_ATOMIC)
2800− );
2801− roce_set_bit(context->qpc_bytes_4,
2802− QP_CONTEXT_QPC_BYTE_4_RDMAR_USE_S, 1);
2803− roce_set_field(context->qpc_bytes_4,
2804− QP_CONTEXT_QPC_BYTES_4_SQ_WQE_SHIFT_M,
2805− QP_CONTEXT_QPC_BYTES_4_SQ_WQE_SHIFT_S,
2806− ilog2((unsigned int)hr_qp->sq.wqe_cnt));
2807− roce_set_field(context->qpc_bytes_4,
2808− QP_CONTEXT_QPC_BYTES_4_RQ_WQE_SHIFT_M,
2809− QP_CONTEXT_QPC_BYTES_4_RQ_WQE_SHIFT_S,
2810− ilog2((unsigned int)hr_qp->rq.wqe_cnt));
2811− roce_set_field(context->qpc_bytes_4,
2812− QP_CONTEXT_QPC_BYTES_4_PD_M,
2813− QP_CONTEXT_QPC_BYTES_4_PD_S,
2814− to_hr_pd(ibqp->pd)->pdn);
2815− hr_qp->access_flags = attr->qp_access_flags;
2816− roce_set_field(context->qpc_bytes_8,
2817− QP_CONTEXT_QPC_BYTES_8_TX_COMPLETION_M,
2818− QP_CONTEXT_QPC_BYTES_8_TX_COMPLETION_S,
2819− to_hr_cq(ibqp->send_cq)->cqn);
2820− roce_set_field(context->qpc_bytes_8,
2821− QP_CONTEXT_QPC_BYTES_8_RX_COMPLETION_M,
2822− QP_CONTEXT_QPC_BYTES_8_RX_COMPLETION_S,
2823− to_hr_cq(ibqp->recv_cq)->cqn);
2824−
2825− if (ibqp->srq)
2826− roce_set_field(context->qpc_bytes_12,
2827− QP_CONTEXT_QPC_BYTES_12_SRQ_NUMBER_M,
2828− QP_CONTEXT_QPC_BYTES_12_SRQ_NUMBER_S,
2829− to_hr_srq(ibqp->srq)->srqn);
2830−
2831− roce_set_field(context->qpc_bytes_12,
2832− QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_M,
2833− QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_S,
2834− attr->pkey_index);
2835− hr_qp->pkey_index = attr->pkey_index;
2836− roce_set_field(context->qpc_bytes_16,
2837− QP_CONTEXT_QPC_BYTES_16_QP_NUM_M,
2838− QP_CONTEXT_QPC_BYTES_16_QP_NUM_S, hr_qp->qpn);
2839− } else if (cur_state == IB_QPS_INIT && new_state == IB_QPS_INIT) {
2840− roce_set_field(context->qpc_bytes_4,
2841− QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_M,
2842− QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_S,
2843− to_hr_qp_type(hr_qp->ibqp.qp_type));
2844− roce_set_bit(context->qpc_bytes_4,
2845− QP_CONTEXT_QPC_BYTE_4_ENABLE_FPMR_S, 0);
2846− if (attr_mask & IB_QP_ACCESS_FLAGS) {
2847− roce_set_bit(context->qpc_bytes_4,
2848− QP_CONTEXT_QPC_BYTE_4_RDMA_READ_ENABLE_S,
2849− !!(attr->qp_access_flags &
2850− IB_ACCESS_REMOTE_READ));
2851− roce_set_bit(context->qpc_bytes_4,
2852− QP_CONTEXT_QPC_BYTE_4_RDMA_WRITE_ENABLE_S,
2853− !!(attr->qp_access_flags &
2854− IB_ACCESS_REMOTE_WRITE));
2855− } else {
2856− roce_set_bit(context->qpc_bytes_4,
2857− QP_CONTEXT_QPC_BYTE_4_RDMA_READ_ENABLE_S,
2858− !!(hr_qp->access_flags &
2859− IB_ACCESS_REMOTE_READ));
2860− roce_set_bit(context->qpc_bytes_4,
2861− QP_CONTEXT_QPC_BYTE_4_RDMA_WRITE_ENABLE_S,
2862− !!(hr_qp->access_flags &
2863− IB_ACCESS_REMOTE_WRITE));
2864− }
2865−
2866− roce_set_bit(context->qpc_bytes_4,
2867− QP_CONTEXT_QPC_BYTE_4_RDMAR_USE_S, 1);
2868− roce_set_field(context->qpc_bytes_4,
2869− QP_CONTEXT_QPC_BYTES_4_SQ_WQE_SHIFT_M,
2870− QP_CONTEXT_QPC_BYTES_4_SQ_WQE_SHIFT_S,
2871− ilog2((unsigned int)hr_qp->sq.wqe_cnt));
2872− roce_set_field(context->qpc_bytes_4,
2873− QP_CONTEXT_QPC_BYTES_4_RQ_WQE_SHIFT_M,
2874− QP_CONTEXT_QPC_BYTES_4_RQ_WQE_SHIFT_S,
2875− ilog2((unsigned int)hr_qp->rq.wqe_cnt));
2876− roce_set_field(context->qpc_bytes_4,
2877− QP_CONTEXT_QPC_BYTES_4_PD_M,
2878− QP_CONTEXT_QPC_BYTES_4_PD_S,
2879− to_hr_pd(ibqp->pd)->pdn);
2880−
2881− roce_set_field(context->qpc_bytes_8,
2882− QP_CONTEXT_QPC_BYTES_8_TX_COMPLETION_M,
2883− QP_CONTEXT_QPC_BYTES_8_TX_COMPLETION_S,
2884− to_hr_cq(ibqp->send_cq)->cqn);
2885− roce_set_field(context->qpc_bytes_8,
2886− QP_CONTEXT_QPC_BYTES_8_RX_COMPLETION_M,
2887− QP_CONTEXT_QPC_BYTES_8_RX_COMPLETION_S,
2888− to_hr_cq(ibqp->recv_cq)->cqn);
2889−
2890− if (ibqp->srq)
2891− roce_set_field(context->qpc_bytes_12,
2892− QP_CONTEXT_QPC_BYTES_12_SRQ_NUMBER_M,
2893− QP_CONTEXT_QPC_BYTES_12_SRQ_NUMBER_S,
2894− to_hr_srq(ibqp->srq)->srqn);
2895− if (attr_mask & IB_QP_PKEY_INDEX)
2896− roce_set_field(context->qpc_bytes_12,
2897− QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_M,
2898− QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_S,
2899− attr->pkey_index);
2900− else
2901− roce_set_field(context->qpc_bytes_12,
2902− QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_M,
2903− QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_S,
2904− hr_qp->pkey_index);
2905−
2906− roce_set_field(context->qpc_bytes_16,
2907− QP_CONTEXT_QPC_BYTES_16_QP_NUM_M,
2908− QP_CONTEXT_QPC_BYTES_16_QP_NUM_S, hr_qp->qpn);
2909− } else if (cur_state == IB_QPS_INIT && new_state == IB_QPS_RTR) {
2910− if ((attr_mask & IB_QP_ALT_PATH) ||
2911− (attr_mask & IB_QP_ACCESS_FLAGS) ||
2912− (attr_mask & IB_QP_PKEY_INDEX) ||
2913− (attr_mask & IB_QP_QKEY)) {
2914− dev_err(dev, "INIT2RTR attr_mask error\n");
2915− goto out;
2916− }
2917−
2918− dmac = (u8 *)attr->ah_attr.roce.dmac;
2919−
2920− context->sq_rq_bt_l = cpu_to_le32(dma_handle);
2921− roce_set_field(context->qpc_bytes_24,
2922− QP_CONTEXT_QPC_BYTES_24_SQ_RQ_BT_H_M,
2923− QP_CONTEXT_QPC_BYTES_24_SQ_RQ_BT_H_S,
2924− upper_32_bits(dma_handle));
2925− roce_set_bit(context->qpc_bytes_24,
2926− QP_CONTEXT_QPC_BYTE_24_REMOTE_ENABLE_E2E_CREDITS_S,
2927− 1);
2928− roce_set_field(context->qpc_bytes_24,
2929− QP_CONTEXT_QPC_BYTES_24_MINIMUM_RNR_NAK_TIMER_M,
2930− QP_CONTEXT_QPC_BYTES_24_MINIMUM_RNR_NAK_TIMER_S,
2931− attr->min_rnr_timer);
2932− context->irrl_ba_l = cpu_to_le32((u32)(dma_handle_2));
2933− roce_set_field(context->qpc_bytes_32,
2934− QP_CONTEXT_QPC_BYTES_32_IRRL_BA_H_M,
2935− QP_CONTEXT_QPC_BYTES_32_IRRL_BA_H_S,
2936− ((u32)(dma_handle_2 >> 32)) &
2937− QP_CONTEXT_QPC_BYTES_32_IRRL_BA_H_M);
2938− roce_set_field(context->qpc_bytes_32,
2939− QP_CONTEXT_QPC_BYTES_32_MIG_STATE_M,
2940− QP_CONTEXT_QPC_BYTES_32_MIG_STATE_S, 0);
2941− roce_set_bit(context->qpc_bytes_32,
2942− QP_CONTEXT_QPC_BYTE_32_LOCAL_ENABLE_E2E_CREDITS_S,
2943− 1);
2944− roce_set_bit(context->qpc_bytes_32,
2945− QP_CONTEXT_QPC_BYTE_32_SIGNALING_TYPE_S,
2946− hr_qp->sq_signal_bits);
2947−
2948− port = (attr_mask & IB_QP_PORT) ? (attr->port_num - 1) :
2949− hr_qp->port;
2950− smac = (const u8 *)hr_dev->dev_addr[port];
2951− /* when dmac equals smac or loop_idc is 1, it should loopback */
2952− if (ether_addr_equal_unaligned(dmac, smac) ||
2953− hr_dev->loop_idc == 0x1)
2954− roce_set_bit(context->qpc_bytes_32,
2955− QP_CONTEXT_QPC_BYTE_32_LOOPBACK_INDICATOR_S, 1);
2956−
2957− roce_set_bit(context->qpc_bytes_32,
2958− QP_CONTEXT_QPC_BYTE_32_GLOBAL_HEADER_S,
2959− rdma_ah_get_ah_flags(&attr->ah_attr));
2960− roce_set_field(context->qpc_bytes_32,
2961− QP_CONTEXT_QPC_BYTES_32_RESPONDER_RESOURCES_M,
2962− QP_CONTEXT_QPC_BYTES_32_RESPONDER_RESOURCES_S,
2963− ilog2((unsigned int)attr->max_dest_rd_atomic));
2964−
2965− if (attr_mask & IB_QP_DEST_QPN)
2966− roce_set_field(context->qpc_bytes_36,
2967− QP_CONTEXT_QPC_BYTES_36_DEST_QP_M,
2968− QP_CONTEXT_QPC_BYTES_36_DEST_QP_S,
2969− attr->dest_qp_num);
2970−
2971− /* Configure GID index */
2972− port_num = rdma_ah_get_port_num(&attr->ah_attr);
2973− roce_set_field(context->qpc_bytes_36,
2974− QP_CONTEXT_QPC_BYTES_36_SGID_INDEX_M,
2975− QP_CONTEXT_QPC_BYTES_36_SGID_INDEX_S,
2976− hns_get_gid_index(hr_dev,
2977− port_num - 1,
2978− grh->sgid_index));
2979−
2980− memcpy(&(context->dmac_l), dmac, 4);
2981−
2982− roce_set_field(context->qpc_bytes_44,
2983− QP_CONTEXT_QPC_BYTES_44_DMAC_H_M,
2984− QP_CONTEXT_QPC_BYTES_44_DMAC_H_S,
2985− *((u16 *)(&dmac[4])));
2986− roce_set_field(context->qpc_bytes_44,
2987− QP_CONTEXT_QPC_BYTES_44_MAXIMUM_STATIC_RATE_M,
2988− QP_CONTEXT_QPC_BYTES_44_MAXIMUM_STATIC_RATE_S,
2989− rdma_ah_get_static_rate(&attr->ah_attr));
2990− roce_set_field(context->qpc_bytes_44,
2991− QP_CONTEXT_QPC_BYTES_44_HOPLMT_M,
2992− QP_CONTEXT_QPC_BYTES_44_HOPLMT_S,
2993− grh->hop_limit);
2994−
2995− roce_set_field(context->qpc_bytes_48,
2996− QP_CONTEXT_QPC_BYTES_48_FLOWLABEL_M,
2997− QP_CONTEXT_QPC_BYTES_48_FLOWLABEL_S,
2998− grh->flow_label);
2999− roce_set_field(context->qpc_bytes_48,
3000− QP_CONTEXT_QPC_BYTES_48_TCLASS_M,
3001− QP_CONTEXT_QPC_BYTES_48_TCLASS_S,
3002− grh->traffic_class);
3003− roce_set_field(context->qpc_bytes_48,
3004− QP_CONTEXT_QPC_BYTES_48_MTU_M,
3005− QP_CONTEXT_QPC_BYTES_48_MTU_S, attr->path_mtu);
3006−
3007− memcpy(context->dgid, grh->dgid.raw,
3008− sizeof(grh->dgid.raw));
3009−
3010− dev_dbg(dev, "dmac:%x :%lx\n", context->dmac_l,
3011− roce_get_field(context->qpc_bytes_44,
3012− QP_CONTEXT_QPC_BYTES_44_DMAC_H_M,
3013− QP_CONTEXT_QPC_BYTES_44_DMAC_H_S));
3014−
3015− roce_set_field(context->qpc_bytes_68,
3016− QP_CONTEXT_QPC_BYTES_68_RQ_HEAD_M,
3017− QP_CONTEXT_QPC_BYTES_68_RQ_HEAD_S,
3018− hr_qp->rq.head);
3019− roce_set_field(context->qpc_bytes_68,
3020− QP_CONTEXT_QPC_BYTES_68_RQ_CUR_INDEX_M,
3021− QP_CONTEXT_QPC_BYTES_68_RQ_CUR_INDEX_S, 0);
3022−
3023− context->cur_rq_wqe_ba_l = cpu_to_le32(rq_ba);
3024−
3025− roce_set_field(context->qpc_bytes_76,
3026− QP_CONTEXT_QPC_BYTES_76_CUR_RQ_WQE_BA_H_M,
3027− QP_CONTEXT_QPC_BYTES_76_CUR_RQ_WQE_BA_H_S,
3028− upper_32_bits(rq_ba));
3029− roce_set_field(context->qpc_bytes_76,
3030− QP_CONTEXT_QPC_BYTES_76_RX_REQ_MSN_M,
3031− QP_CONTEXT_QPC_BYTES_76_RX_REQ_MSN_S, 0);
3032−
3033− context->rx_rnr_time = 0;
3034−
3035− roce_set_field(context->qpc_bytes_84,
3036− QP_CONTEXT_QPC_BYTES_84_LAST_ACK_PSN_M,
3037− QP_CONTEXT_QPC_BYTES_84_LAST_ACK_PSN_S,
3038− attr->rq_psn - 1);
3039− roce_set_field(context->qpc_bytes_84,
3040− QP_CONTEXT_QPC_BYTES_84_TRRL_HEAD_M,
3041− QP_CONTEXT_QPC_BYTES_84_TRRL_HEAD_S, 0);
3042−
3043− roce_set_field(context->qpc_bytes_88,
3044− QP_CONTEXT_QPC_BYTES_88_RX_REQ_EPSN_M,
3045− QP_CONTEXT_QPC_BYTES_88_RX_REQ_EPSN_S,
3046− attr->rq_psn);
3047− roce_set_bit(context->qpc_bytes_88,
3048− QP_CONTEXT_QPC_BYTES_88_RX_REQ_PSN_ERR_FLAG_S, 0);
3049− roce_set_bit(context->qpc_bytes_88,
3050− QP_CONTEXT_QPC_BYTES_88_RX_LAST_OPCODE_FLG_S, 0);
3051− roce_set_field(context->qpc_bytes_88,
3052− QP_CONTEXT_QPC_BYTES_88_RQ_REQ_LAST_OPERATION_TYPE_M,
3053− QP_CONTEXT_QPC_BYTES_88_RQ_REQ_LAST_OPERATION_TYPE_S,
3054− 0);
3055− roce_set_field(context->qpc_bytes_88,
3056− QP_CONTEXT_QPC_BYTES_88_RQ_REQ_RDMA_WR_FLAG_M,
3057− QP_CONTEXT_QPC_BYTES_88_RQ_REQ_RDMA_WR_FLAG_S,
3058− 0);
3059−
3060− context->dma_length = 0;
3061− context->r_key = 0;
3062− context->va_l = 0;
3063− context->va_h = 0;
3064−
3065− roce_set_field(context->qpc_bytes_108,
3066− QP_CONTEXT_QPC_BYTES_108_TRRL_SDB_PSN_M,
3067− QP_CONTEXT_QPC_BYTES_108_TRRL_SDB_PSN_S, 0);
3068− roce_set_bit(context->qpc_bytes_108,
3069− QP_CONTEXT_QPC_BYTES_108_TRRL_SDB_PSN_FLG_S, 0);
3070− roce_set_bit(context->qpc_bytes_108,
3071− QP_CONTEXT_QPC_BYTES_108_TRRL_TDB_PSN_FLG_S, 0);
3072−
3073− roce_set_field(context->qpc_bytes_112,
3074− QP_CONTEXT_QPC_BYTES_112_TRRL_TDB_PSN_M,
3075− QP_CONTEXT_QPC_BYTES_112_TRRL_TDB_PSN_S, 0);
3076− roce_set_field(context->qpc_bytes_112,
3077− QP_CONTEXT_QPC_BYTES_112_TRRL_TAIL_M,
3078− QP_CONTEXT_QPC_BYTES_112_TRRL_TAIL_S, 0);
3079−
3080− /* For chip resp ack */
3081− roce_set_field(context->qpc_bytes_156,
3082− QP_CONTEXT_QPC_BYTES_156_PORT_NUM_M,
3083− QP_CONTEXT_QPC_BYTES_156_PORT_NUM_S,
3084− hr_qp->phy_port);
3085− roce_set_field(context->qpc_bytes_156,
3086− QP_CONTEXT_QPC_BYTES_156_SL_M,
3087− QP_CONTEXT_QPC_BYTES_156_SL_S,
3088− rdma_ah_get_sl(&attr->ah_attr));
3089− hr_qp->sl = rdma_ah_get_sl(&attr->ah_attr);
3090− } else if (cur_state == IB_QPS_RTR && new_state == IB_QPS_RTS) {
3091− /* If exist optional param, return error */
3092− if ((attr_mask & IB_QP_ALT_PATH) ||
3093− (attr_mask & IB_QP_ACCESS_FLAGS) ||
3094− (attr_mask & IB_QP_QKEY) ||
3095− (attr_mask & IB_QP_PATH_MIG_STATE) ||
3096− (attr_mask & IB_QP_CUR_STATE) ||
3097− (attr_mask & IB_QP_MIN_RNR_TIMER)) {
3098− dev_err(dev, "RTR2RTS attr_mask error\n");
3099− goto out;
3100− }
3101−
3102− context->rx_cur_sq_wqe_ba_l = cpu_to_le32(sq_ba);
3103−
3104− roce_set_field(context->qpc_bytes_120,
3105− QP_CONTEXT_QPC_BYTES_120_RX_CUR_SQ_WQE_BA_H_M,
3106− QP_CONTEXT_QPC_BYTES_120_RX_CUR_SQ_WQE_BA_H_S,
3107− upper_32_bits(sq_ba));
3108−
3109− roce_set_field(context->qpc_bytes_124,
3110− QP_CONTEXT_QPC_BYTES_124_RX_ACK_MSN_M,
3111− QP_CONTEXT_QPC_BYTES_124_RX_ACK_MSN_S, 0);
3112− roce_set_field(context->qpc_bytes_124,
3113− QP_CONTEXT_QPC_BYTES_124_IRRL_MSG_IDX_M,
3114− QP_CONTEXT_QPC_BYTES_124_IRRL_MSG_IDX_S, 0);
3115−
3116− roce_set_field(context->qpc_bytes_128,
3117− QP_CONTEXT_QPC_BYTES_128_RX_ACK_EPSN_M,
3118− QP_CONTEXT_QPC_BYTES_128_RX_ACK_EPSN_S,
3119− attr->sq_psn);
3120− roce_set_bit(context->qpc_bytes_128,
3121− QP_CONTEXT_QPC_BYTES_128_RX_ACK_PSN_ERR_FLG_S, 0);
3122− roce_set_field(context->qpc_bytes_128,
3123− QP_CONTEXT_QPC_BYTES_128_ACK_LAST_OPERATION_TYPE_M,
3124− QP_CONTEXT_QPC_BYTES_128_ACK_LAST_OPERATION_TYPE_S,
3125− 0);
3126− roce_set_bit(context->qpc_bytes_128,
3127− QP_CONTEXT_QPC_BYTES_128_IRRL_PSN_VLD_FLG_S, 0);
3128−
3129− roce_set_field(context->qpc_bytes_132,
3130− QP_CONTEXT_QPC_BYTES_132_IRRL_PSN_M,
3131− QP_CONTEXT_QPC_BYTES_132_IRRL_PSN_S, 0);
3132− roce_set_field(context->qpc_bytes_132,
3133− QP_CONTEXT_QPC_BYTES_132_IRRL_TAIL_M,
3134− QP_CONTEXT_QPC_BYTES_132_IRRL_TAIL_S, 0);
3135−
3136− roce_set_field(context->qpc_bytes_136,
3137− QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_PSN_M,
3138− QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_PSN_S,
3139− attr->sq_psn);
3140− roce_set_field(context->qpc_bytes_136,
3141− QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_FPKT_PSN_L_M,
3142− QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_FPKT_PSN_L_S,
3143− attr->sq_psn);
3144−
3145− roce_set_field(context->qpc_bytes_140,
3146− QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_FPKT_PSN_H_M,
3147− QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_FPKT_PSN_H_S,
3148− (attr->sq_psn >> SQ_PSN_SHIFT));
3149− roce_set_field(context->qpc_bytes_140,
3150− QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_MSN_M,
3151− QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_MSN_S, 0);
3152− roce_set_bit(context->qpc_bytes_140,
3153− QP_CONTEXT_QPC_BYTES_140_RNR_RETRY_FLG_S, 0);
3154−
3155− roce_set_field(context->qpc_bytes_148,
3156− QP_CONTEXT_QPC_BYTES_148_CHECK_FLAG_M,
3157− QP_CONTEXT_QPC_BYTES_148_CHECK_FLAG_S, 0);
3158− roce_set_field(context->qpc_bytes_148,
3159− QP_CONTEXT_QPC_BYTES_148_RETRY_COUNT_M,
3160− QP_CONTEXT_QPC_BYTES_148_RETRY_COUNT_S,
3161− attr->retry_cnt);
3162− roce_set_field(context->qpc_bytes_148,
3163− QP_CONTEXT_QPC_BYTES_148_RNR_RETRY_COUNT_M,
3164− QP_CONTEXT_QPC_BYTES_148_RNR_RETRY_COUNT_S,
3165− attr->rnr_retry);
3166− roce_set_field(context->qpc_bytes_148,
3167− QP_CONTEXT_QPC_BYTES_148_LSN_M,
3168− QP_CONTEXT_QPC_BYTES_148_LSN_S, 0x100);
3169−
3170− context->rnr_retry = 0;
3171−
3172− roce_set_field(context->qpc_bytes_156,
3173− QP_CONTEXT_QPC_BYTES_156_RETRY_COUNT_INIT_M,
3174− QP_CONTEXT_QPC_BYTES_156_RETRY_COUNT_INIT_S,
3175− attr->retry_cnt);
3176− if (attr->timeout < 0x12) {
3177− dev_info(dev, "ack timeout value(0x%x) must bigger than 0x12.\n",
3178− attr->timeout);
3179− roce_set_field(context->qpc_bytes_156,
3180− QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_M,
3181− QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_S,
3182− 0x12);
3183− } else {
3184− roce_set_field(context->qpc_bytes_156,
3185− QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_M,
3186− QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_S,
3187− attr->timeout);
3188− }
3189− roce_set_field(context->qpc_bytes_156,
3190− QP_CONTEXT_QPC_BYTES_156_RNR_RETRY_COUNT_INIT_M,
3191− QP_CONTEXT_QPC_BYTES_156_RNR_RETRY_COUNT_INIT_S,
3192− attr->rnr_retry);
3193− roce_set_field(context->qpc_bytes_156,
3194− QP_CONTEXT_QPC_BYTES_156_PORT_NUM_M,
3195− QP_CONTEXT_QPC_BYTES_156_PORT_NUM_S,
3196− hr_qp->phy_port);
3197− roce_set_field(context->qpc_bytes_156,
3198− QP_CONTEXT_QPC_BYTES_156_SL_M,
3199− QP_CONTEXT_QPC_BYTES_156_SL_S,
3200− rdma_ah_get_sl(&attr->ah_attr));
3201− hr_qp->sl = rdma_ah_get_sl(&attr->ah_attr);
3202− roce_set_field(context->qpc_bytes_156,
3203− QP_CONTEXT_QPC_BYTES_156_INITIATOR_DEPTH_M,
3204− QP_CONTEXT_QPC_BYTES_156_INITIATOR_DEPTH_S,
3205− ilog2((unsigned int)attr->max_rd_atomic));
3206− roce_set_field(context->qpc_bytes_156,
3207− QP_CONTEXT_QPC_BYTES_156_ACK_REQ_IND_M,
3208− QP_CONTEXT_QPC_BYTES_156_ACK_REQ_IND_S, 0);
3209− context->pkt_use_len = 0;
3210−
3211− roce_set_field(context->qpc_bytes_164,
3212− QP_CONTEXT_QPC_BYTES_164_SQ_PSN_M,
3213− QP_CONTEXT_QPC_BYTES_164_SQ_PSN_S, attr->sq_psn);
3214− roce_set_field(context->qpc_bytes_164,
3215− QP_CONTEXT_QPC_BYTES_164_IRRL_HEAD_M,
3216− QP_CONTEXT_QPC_BYTES_164_IRRL_HEAD_S, 0);
3217−
3218− roce_set_field(context->qpc_bytes_168,
3219− QP_CONTEXT_QPC_BYTES_168_RETRY_SQ_PSN_M,
3220− QP_CONTEXT_QPC_BYTES_168_RETRY_SQ_PSN_S,
3221− attr->sq_psn);
3222− roce_set_field(context->qpc_bytes_168,
3223− QP_CONTEXT_QPC_BYTES_168_SGE_USE_FLA_M,
3224− QP_CONTEXT_QPC_BYTES_168_SGE_USE_FLA_S, 0);
3225− roce_set_field(context->qpc_bytes_168,
3226− QP_CONTEXT_QPC_BYTES_168_DB_TYPE_M,
3227− QP_CONTEXT_QPC_BYTES_168_DB_TYPE_S, 0);
3228− roce_set_bit(context->qpc_bytes_168,
3229− QP_CONTEXT_QPC_BYTES_168_MSG_LP_IND_S, 0);
3230− roce_set_bit(context->qpc_bytes_168,
3231− QP_CONTEXT_QPC_BYTES_168_CSDB_LP_IND_S, 0);
3232− roce_set_bit(context->qpc_bytes_168,
3233− QP_CONTEXT_QPC_BYTES_168_QP_ERR_FLG_S, 0);
3234− context->sge_use_len = 0;
3235−
3236− roce_set_field(context->qpc_bytes_176,
3237− QP_CONTEXT_QPC_BYTES_176_DB_CUR_INDEX_M,
3238− QP_CONTEXT_QPC_BYTES_176_DB_CUR_INDEX_S, 0);
3239− roce_set_field(context->qpc_bytes_176,
3240− QP_CONTEXT_QPC_BYTES_176_RETRY_DB_CUR_INDEX_M,
3241− QP_CONTEXT_QPC_BYTES_176_RETRY_DB_CUR_INDEX_S,
3242− 0);
3243− roce_set_field(context->qpc_bytes_180,
3244− QP_CONTEXT_QPC_BYTES_180_SQ_CUR_INDEX_M,
3245− QP_CONTEXT_QPC_BYTES_180_SQ_CUR_INDEX_S, 0);
3246− roce_set_field(context->qpc_bytes_180,
3247− QP_CONTEXT_QPC_BYTES_180_SQ_HEAD_M,
3248− QP_CONTEXT_QPC_BYTES_180_SQ_HEAD_S, 0);
3249−
3250− context->tx_cur_sq_wqe_ba_l = cpu_to_le32(sq_ba);
3251−
3252− roce_set_field(context->qpc_bytes_188,
3253− QP_CONTEXT_QPC_BYTES_188_TX_CUR_SQ_WQE_BA_H_M,
3254− QP_CONTEXT_QPC_BYTES_188_TX_CUR_SQ_WQE_BA_H_S,
3255− upper_32_bits(sq_ba));
3256− roce_set_bit(context->qpc_bytes_188,
3257− QP_CONTEXT_QPC_BYTES_188_PKT_RETRY_FLG_S, 0);
3258− roce_set_field(context->qpc_bytes_188,
3259− QP_CONTEXT_QPC_BYTES_188_TX_RETRY_CUR_INDEX_M,
3260− QP_CONTEXT_QPC_BYTES_188_TX_RETRY_CUR_INDEX_S,
3261− 0);
3262− }
3263−
3264− /* Every status migrate must change state */
3265− roce_set_field(context->qpc_bytes_144,
3266− QP_CONTEXT_QPC_BYTES_144_QP_STATE_M,
3267− QP_CONTEXT_QPC_BYTES_144_QP_STATE_S, new_state);
3268−
3269− /* SW pass context to HW */
3270− ret = hns_roce_v1_qp_modify(hr_dev, to_hns_roce_state(cur_state),
3271− to_hns_roce_state(new_state), context,
3272− hr_qp);
3273− if (ret) {
3274− dev_err(dev, "hns_roce_qp_modify failed\n");
3275− goto out;
3276− }
3277−
3278− /*
3279− * Use rst2init to instead of init2init with drv,
3280− * need to hw to flash RQ HEAD by DB again
3281− */
3282− if (cur_state == IB_QPS_INIT && new_state == IB_QPS_INIT) {
3283− roce_set_field(doorbell[0], RQ_DOORBELL_U32_4_RQ_HEAD_M,
3284− RQ_DOORBELL_U32_4_RQ_HEAD_S, hr_qp->rq.head);
3285− roce_set_field(doorbell[1], RQ_DOORBELL_U32_8_QPN_M,
3286− RQ_DOORBELL_U32_8_QPN_S, hr_qp->qpn);
3287− roce_set_field(doorbell[1], RQ_DOORBELL_U32_8_CMD_M,
3288− RQ_DOORBELL_U32_8_CMD_S, 1);
3289− roce_set_bit(doorbell[1], RQ_DOORBELL_U32_8_HW_SYNC_S, 1);
3290−
3291− if (ibqp->uobject) {
3292− hr_qp->rq.db_reg = hr_dev->reg_base +
3293− hr_dev->odb_offset +
3294− DB_REG_OFFSET * hr_dev->priv_uar.index;
3295− }
3296−
3297− hns_roce_write64_k(doorbell, hr_qp->rq.db_reg);
3298− }
3299−
3300− hr_qp->state = new_state;
3301−
3302− if (attr_mask & IB_QP_MAX_DEST_RD_ATOMIC)
3303− hr_qp->resp_depth = attr->max_dest_rd_atomic;
3304− if (attr_mask & IB_QP_PORT) {
3305− hr_qp->port = attr->port_num - 1;
3306− hr_qp->phy_port = hr_dev->iboe.phy_port[hr_qp->port];
3307− }
3308−
3309− if (new_state == IB_QPS_RESET && !ibqp->uobject) {
3310− hns_roce_v1_cq_clean(to_hr_cq(ibqp->recv_cq), hr_qp->qpn,
3311− ibqp->srq ? to_hr_srq(ibqp->srq) : NULL);
3312− if (ibqp->send_cq != ibqp->recv_cq)
3313− hns_roce_v1_cq_clean(to_hr_cq(ibqp->send_cq),
3314− hr_qp->qpn, NULL);
3315−
3316− hr_qp->rq.head = 0;
3317− hr_qp->rq.tail = 0;
3318− hr_qp->sq.head = 0;
3319− hr_qp->sq.tail = 0;
3320− }
3321−out:
3322− kfree(context);
3323− return ret;
3324−}
3325−
3326−static int hns_roce_v1_modify_qp(struct ib_qp *ibqp,
3327− const struct ib_qp_attr *attr, int attr_mask,
3328− enum ib_qp_state cur_state,
3329− enum ib_qp_state new_state)
3330−{
3331− if (attr_mask & ~IB_QP_ATTR_STANDARD_BITS)
3332− return -EOPNOTSUPP;
3333−
3334− if (ibqp->qp_type == IB_QPT_GSI || ibqp->qp_type == IB_QPT_SMI)
3335− return hns_roce_v1_m_sqp(ibqp, attr, attr_mask, cur_state,
3336− new_state);
3337− else
3338− return hns_roce_v1_m_qp(ibqp, attr, attr_mask, cur_state,
3339− new_state);
3340−}
3341−
3342−static enum ib_qp_state to_ib_qp_state(enum hns_roce_qp_state state)
3343−{
3344− switch (state) {
3345− case HNS_ROCE_QP_STATE_RST:
3346− return IB_QPS_RESET;
3347− case HNS_ROCE_QP_STATE_INIT:
3348− return IB_QPS_INIT;
3349− case HNS_ROCE_QP_STATE_RTR:
3350− return IB_QPS_RTR;
3351− case HNS_ROCE_QP_STATE_RTS:
3352− return IB_QPS_RTS;
3353− case HNS_ROCE_QP_STATE_SQD:
3354− return IB_QPS_SQD;
3355− case HNS_ROCE_QP_STATE_ERR:
3356− return IB_QPS_ERR;
3357− default:
3358− return IB_QPS_ERR;
3359− }
3360−}
3361−
3362−static int hns_roce_v1_query_qpc(struct hns_roce_dev *hr_dev,
3363− struct hns_roce_qp *hr_qp,
3364− struct hns_roce_qp_context *hr_context)
3365−{
3366− struct hns_roce_cmd_mailbox *mailbox;
3367− int ret;
3368−
3369− mailbox = hns_roce_alloc_cmd_mailbox(hr_dev);
3370− if (IS_ERR(mailbox))
3371− return PTR_ERR(mailbox);
3372−
3373− ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, hr_qp->qpn, 0,
3374− HNS_ROCE_CMD_QUERY_QP,
3375− HNS_ROCE_CMD_TIMEOUT_MSECS);
3376− if (!ret)
3377− memcpy(hr_context, mailbox->buf, sizeof(*hr_context));
3378− else
3379− dev_err(&hr_dev->pdev->dev, "QUERY QP cmd process error\n");
3380−
3381− hns_roce_free_cmd_mailbox(hr_dev, mailbox);
3382−
3383− return ret;
3384−}
3385−
3386−static int hns_roce_v1_q_sqp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr,
3387− int qp_attr_mask,
3388− struct ib_qp_init_attr *qp_init_attr)
3389−{
3390− struct hns_roce_dev *hr_dev = to_hr_dev(ibqp->device);
3391− struct hns_roce_qp *hr_qp = to_hr_qp(ibqp);
3392− struct hns_roce_sqp_context context;
3393− u32 addr;
3394−
3395− mutex_lock(&hr_qp->mutex);
3396−
3397− if (hr_qp->state == IB_QPS_RESET) {
3398− qp_attr->qp_state = IB_QPS_RESET;
3399− goto done;
3400− }
3401−
3402− addr = ROCEE_QP1C_CFG0_0_REG +
3403− hr_qp->port * sizeof(struct hns_roce_sqp_context);
3404− context.qp1c_bytes_4 = cpu_to_le32(roce_read(hr_dev, addr));
3405− context.sq_rq_bt_l = cpu_to_le32(roce_read(hr_dev, addr + 1));
3406− context.qp1c_bytes_12 = cpu_to_le32(roce_read(hr_dev, addr + 2));
3407− context.qp1c_bytes_16 = cpu_to_le32(roce_read(hr_dev, addr + 3));
3408− context.qp1c_bytes_20 = cpu_to_le32(roce_read(hr_dev, addr + 4));
3409− context.cur_rq_wqe_ba_l = cpu_to_le32(roce_read(hr_dev, addr + 5));
3410− context.qp1c_bytes_28 = cpu_to_le32(roce_read(hr_dev, addr + 6));
3411− context.qp1c_bytes_32 = cpu_to_le32(roce_read(hr_dev, addr + 7));
3412− context.cur_sq_wqe_ba_l = cpu_to_le32(roce_read(hr_dev, addr + 8));
3413− context.qp1c_bytes_40 = cpu_to_le32(roce_read(hr_dev, addr + 9));
3414−
3415− hr_qp->state = roce_get_field(context.qp1c_bytes_4,
3416− QP1C_BYTES_4_QP_STATE_M,
3417− QP1C_BYTES_4_QP_STATE_S);
3418− qp_attr->qp_state = hr_qp->state;
3419− qp_attr->path_mtu = IB_MTU_256;
3420− qp_attr->path_mig_state = IB_MIG_ARMED;
3421− qp_attr->qkey = QKEY_VAL;
3422− qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;
3423− qp_attr->rq_psn = 0;
3424− qp_attr->sq_psn = 0;
3425− qp_attr->dest_qp_num = 1;
3426− qp_attr->qp_access_flags = 6;
3427−
3428− qp_attr->pkey_index = roce_get_field(context.qp1c_bytes_20,
3429− QP1C_BYTES_20_PKEY_IDX_M,
3430− QP1C_BYTES_20_PKEY_IDX_S);
3431− qp_attr->port_num = hr_qp->port + 1;
3432− qp_attr->sq_draining = 0;
3433− qp_attr->max_rd_atomic = 0;
3434− qp_attr->max_dest_rd_atomic = 0;
3435− qp_attr->min_rnr_timer = 0;
3436− qp_attr->timeout = 0;
3437− qp_attr->retry_cnt = 0;
3438− qp_attr->rnr_retry = 0;
3439− qp_attr->alt_timeout = 0;
3440−
3441−done:
3442− qp_attr->cur_qp_state = qp_attr->qp_state;
3443− qp_attr->cap.max_recv_wr = hr_qp->rq.wqe_cnt;
3444− qp_attr->cap.max_recv_sge = hr_qp->rq.max_gs;
3445− qp_attr->cap.max_send_wr = hr_qp->sq.wqe_cnt;
3446− qp_attr->cap.max_send_sge = hr_qp->sq.max_gs;
3447− qp_attr->cap.max_inline_data = 0;
3448− qp_init_attr->cap = qp_attr->cap;
3449− qp_init_attr->create_flags = 0;
3450−
3451− mutex_unlock(&hr_qp->mutex);
3452−
3453− return 0;
3454−}
3455−
3456−static int hns_roce_v1_q_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr,
3457− int qp_attr_mask,
3458− struct ib_qp_init_attr *qp_init_attr)
3459−{
3460− struct hns_roce_dev *hr_dev = to_hr_dev(ibqp->device);
3461− struct hns_roce_qp *hr_qp = to_hr_qp(ibqp);
3462− struct device *dev = &hr_dev->pdev->dev;
3463− struct hns_roce_qp_context *context;
3464− int tmp_qp_state;
3465− int ret = 0;
3466− int state;
3467−
3468− context = kzalloc(sizeof(*context), GFP_KERNEL);
3469− if (!context)
3470− return -ENOMEM;
3471−
3472− memset(qp_attr, 0, sizeof(*qp_attr));
3473− memset(qp_init_attr, 0, sizeof(*qp_init_attr));
3474−
3475− mutex_lock(&hr_qp->mutex);
3476−
3477− if (hr_qp->state == IB_QPS_RESET) {
3478− qp_attr->qp_state = IB_QPS_RESET;
3479− goto done;
3480− }
3481−
3482− ret = hns_roce_v1_query_qpc(hr_dev, hr_qp, context);
3483− if (ret) {
3484− dev_err(dev, "query qpc error\n");
3485− ret = -EINVAL;
3486− goto out;
3487− }
3488−
3489− state = roce_get_field(context->qpc_bytes_144,
3490− QP_CONTEXT_QPC_BYTES_144_QP_STATE_M,
3491− QP_CONTEXT_QPC_BYTES_144_QP_STATE_S);
3492− tmp_qp_state = (int)to_ib_qp_state((enum hns_roce_qp_state)state);
3493− if (tmp_qp_state == -1) {
3494− dev_err(dev, "to_ib_qp_state error\n");
3495− ret = -EINVAL;
3496− goto out;
3497− }
3498− hr_qp->state = (u8)tmp_qp_state;
3499− qp_attr->qp_state = (enum ib_qp_state)hr_qp->state;
3500− qp_attr->path_mtu = (enum ib_mtu)roce_get_field(context->qpc_bytes_48,
3501− QP_CONTEXT_QPC_BYTES_48_MTU_M,
3502− QP_CONTEXT_QPC_BYTES_48_MTU_S);
3503− qp_attr->path_mig_state = IB_MIG_ARMED;
3504− qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;
3505− if (hr_qp->ibqp.qp_type == IB_QPT_UD)
3506− qp_attr->qkey = QKEY_VAL;
3507−
3508− qp_attr->rq_psn = roce_get_field(context->qpc_bytes_88,
3509− QP_CONTEXT_QPC_BYTES_88_RX_REQ_EPSN_M,
3510− QP_CONTEXT_QPC_BYTES_88_RX_REQ_EPSN_S);
3511− qp_attr->sq_psn = (u32)roce_get_field(context->qpc_bytes_164,
3512− QP_CONTEXT_QPC_BYTES_164_SQ_PSN_M,
3513− QP_CONTEXT_QPC_BYTES_164_SQ_PSN_S);
3514− qp_attr->dest_qp_num = (u8)roce_get_field(context->qpc_bytes_36,
3515− QP_CONTEXT_QPC_BYTES_36_DEST_QP_M,
3516− QP_CONTEXT_QPC_BYTES_36_DEST_QP_S);
3517− qp_attr->qp_access_flags = ((roce_get_bit(context->qpc_bytes_4,
3518− QP_CONTEXT_QPC_BYTE_4_RDMA_READ_ENABLE_S)) << 2) |
3519− ((roce_get_bit(context->qpc_bytes_4,
3520− QP_CONTEXT_QPC_BYTE_4_RDMA_WRITE_ENABLE_S)) << 1) |
3521− ((roce_get_bit(context->qpc_bytes_4,
3522− QP_CONTEXT_QPC_BYTE_4_ATOMIC_OPERATION_ENABLE_S)) << 3);
3523−
3524− if (hr_qp->ibqp.qp_type == IB_QPT_RC) {
3525− struct ib_global_route *grh =
3526− rdma_ah_retrieve_grh(&qp_attr->ah_attr);
3527−
3528− rdma_ah_set_sl(&qp_attr->ah_attr,
3529− roce_get_field(context->qpc_bytes_156,
3530− QP_CONTEXT_QPC_BYTES_156_SL_M,
3531− QP_CONTEXT_QPC_BYTES_156_SL_S));
3532− rdma_ah_set_ah_flags(&qp_attr->ah_attr, IB_AH_GRH);
3533− grh->flow_label =
3534− roce_get_field(context->qpc_bytes_48,
3535− QP_CONTEXT_QPC_BYTES_48_FLOWLABEL_M,
3536− QP_CONTEXT_QPC_BYTES_48_FLOWLABEL_S);
3537− grh->sgid_index =
3538− roce_get_field(context->qpc_bytes_36,
3539− QP_CONTEXT_QPC_BYTES_36_SGID_INDEX_M,
3540− QP_CONTEXT_QPC_BYTES_36_SGID_INDEX_S);
3541− grh->hop_limit =
3542− roce_get_field(context->qpc_bytes_44,
3543− QP_CONTEXT_QPC_BYTES_44_HOPLMT_M,
3544− QP_CONTEXT_QPC_BYTES_44_HOPLMT_S);
3545− grh->traffic_class =
3546− roce_get_field(context->qpc_bytes_48,
3547− QP_CONTEXT_QPC_BYTES_48_TCLASS_M,
3548− QP_CONTEXT_QPC_BYTES_48_TCLASS_S);
3549−
3550− memcpy(grh->dgid.raw, context->dgid,
3551− sizeof(grh->dgid.raw));
3552− }
3553−
3554− qp_attr->pkey_index = roce_get_field(context->qpc_bytes_12,
3555− QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_M,
3556− QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_S);
3557− qp_attr->port_num = hr_qp->port + 1;
3558− qp_attr->sq_draining = 0;
3559− qp_attr->max_rd_atomic = 1 << roce_get_field(context->qpc_bytes_156,
3560− QP_CONTEXT_QPC_BYTES_156_INITIATOR_DEPTH_M,
3561− QP_CONTEXT_QPC_BYTES_156_INITIATOR_DEPTH_S);
3562− qp_attr->max_dest_rd_atomic = 1 << roce_get_field(context->qpc_bytes_32,
3563− QP_CONTEXT_QPC_BYTES_32_RESPONDER_RESOURCES_M,
3564− QP_CONTEXT_QPC_BYTES_32_RESPONDER_RESOURCES_S);
3565− qp_attr->min_rnr_timer = (u8)(roce_get_field(context->qpc_bytes_24,
3566− QP_CONTEXT_QPC_BYTES_24_MINIMUM_RNR_NAK_TIMER_M,
3567− QP_CONTEXT_QPC_BYTES_24_MINIMUM_RNR_NAK_TIMER_S));
3568− qp_attr->timeout = (u8)(roce_get_field(context->qpc_bytes_156,
3569− QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_M,
3570− QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_S));
3571− qp_attr->retry_cnt = roce_get_field(context->qpc_bytes_148,
3572− QP_CONTEXT_QPC_BYTES_148_RETRY_COUNT_M,
3573− QP_CONTEXT_QPC_BYTES_148_RETRY_COUNT_S);
3574− qp_attr->rnr_retry = (u8)le32_to_cpu(context->rnr_retry);
3575−
3576−done:
3577− qp_attr->cur_qp_state = qp_attr->qp_state;
3578− qp_attr->cap.max_recv_wr = hr_qp->rq.wqe_cnt;
3579− qp_attr->cap.max_recv_sge = hr_qp->rq.max_gs;
3580−
3581− if (!ibqp->uobject) {
3582− qp_attr->cap.max_send_wr = hr_qp->sq.wqe_cnt;
3583− qp_attr->cap.max_send_sge = hr_qp->sq.max_gs;
3584− } else {
3585− qp_attr->cap.max_send_wr = 0;
3586− qp_attr->cap.max_send_sge = 0;
3587− }
3588−
3589− qp_init_attr->cap = qp_attr->cap;
3590−
3591−out:
3592− mutex_unlock(&hr_qp->mutex);
3593− kfree(context);
3594− return ret;
3595−}
3596−
3597−static int hns_roce_v1_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr,
3598− int qp_attr_mask,
3599− struct ib_qp_init_attr *qp_init_attr)
3600−{
3601− struct hns_roce_qp *hr_qp = to_hr_qp(ibqp);
3602−
3603− return hr_qp->doorbell_qpn <= 1 ?
3604− hns_roce_v1_q_sqp(ibqp, qp_attr, qp_attr_mask, qp_init_attr) :
3605− hns_roce_v1_q_qp(ibqp, qp_attr, qp_attr_mask, qp_init_attr);
3606−}
3607−
3608−int hns_roce_v1_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata)
3609−{
3610− struct hns_roce_dev *hr_dev = to_hr_dev(ibqp->device);
3611− struct hns_roce_qp *hr_qp = to_hr_qp(ibqp);
3612− struct hns_roce_cq *send_cq, *recv_cq;
3613− int ret;
3614−
3615− ret = hns_roce_v1_modify_qp(ibqp, NULL, 0, hr_qp->state, IB_QPS_RESET);
3616− if (ret)
3617− return ret;
3618−
3619− send_cq = hr_qp->ibqp.send_cq ? to_hr_cq(hr_qp->ibqp.send_cq) : NULL;
3620− recv_cq = hr_qp->ibqp.recv_cq ? to_hr_cq(hr_qp->ibqp.recv_cq) : NULL;
3621−
3622− hns_roce_lock_cqs(send_cq, recv_cq);
3623− if (!udata) {
3624− if (recv_cq)
3625− __hns_roce_v1_cq_clean(recv_cq, hr_qp->qpn,
3626− (hr_qp->ibqp.srq ?
3627− to_hr_srq(hr_qp->ibqp.srq) :
3628− NULL));
3629−
3630− if (send_cq && send_cq != recv_cq)
3631− __hns_roce_v1_cq_clean(send_cq, hr_qp->qpn, NULL);
3632− }
3633− hns_roce_qp_remove(hr_dev, hr_qp);
3634− hns_roce_unlock_cqs(send_cq, recv_cq);
3635−
3636− hns_roce_qp_destroy(hr_dev, hr_qp, udata);
3637−
3638− return 0;
3639−}
3640−
3641−static int hns_roce_v1_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata)
3642−{
3643− struct hns_roce_dev *hr_dev = to_hr_dev(ibcq->device);
3644− struct hns_roce_cq *hr_cq = to_hr_cq(ibcq);
3645− struct device *dev = &hr_dev->pdev->dev;
3646− u32 cqe_cnt_ori;
3647− u32 cqe_cnt_cur;
3648− int wait_time = 0;
3649−
3650− /*
3651− * Before freeing cq buffer, we need to ensure that the outstanding CQE
3652− * have been written by checking the CQE counter.
3653− */
3654− cqe_cnt_ori = roce_read(hr_dev, ROCEE_SCAEP_WR_CQE_CNT);
3655− while (1) {
3656− if (roce_read(hr_dev, ROCEE_CAEP_CQE_WCMD_EMPTY) &
3657− HNS_ROCE_CQE_WCMD_EMPTY_BIT)
3658− break;
3659−
3660− cqe_cnt_cur = roce_read(hr_dev, ROCEE_SCAEP_WR_CQE_CNT);
3661− if ((cqe_cnt_cur - cqe_cnt_ori) >= HNS_ROCE_MIN_CQE_CNT)
3662− break;
3663−
3664− msleep(HNS_ROCE_EACH_FREE_CQ_WAIT_MSECS);
3665− if (wait_time > HNS_ROCE_MAX_FREE_CQ_WAIT_CNT) {
3666− dev_warn(dev, "Destroy cq 0x%lx timeout!\n",
3667− hr_cq->cqn);
3668− break;
3669− }
3670− wait_time++;
3671− }
3672− return 0;
3673−}
3674−
3675−static void set_eq_cons_index_v1(struct hns_roce_eq *eq, u32 req_not)
3676−{
3677− roce_raw_write((eq->cons_index & HNS_ROCE_V1_CONS_IDX_M) |
3678− (req_not << eq->log_entries), eq->db_reg);
3679−}
3680−
3681−static void hns_roce_v1_wq_catas_err_handle(struct hns_roce_dev *hr_dev,
3682− struct hns_roce_aeqe *aeqe, int qpn)
3683−{
3684− struct device *dev = &hr_dev->pdev->dev;
3685−
3686− dev_warn(dev, "Local Work Queue Catastrophic Error.\n");
3687− switch (roce_get_field(aeqe->asyn, HNS_ROCE_AEQE_U32_4_EVENT_SUB_TYPE_M,
3688− HNS_ROCE_AEQE_U32_4_EVENT_SUB_TYPE_S)) {
3689− case HNS_ROCE_LWQCE_QPC_ERROR:
3690− dev_warn(dev, "QP %d, QPC error.\n", qpn);
3691− break;
3692− case HNS_ROCE_LWQCE_MTU_ERROR:
3693− dev_warn(dev, "QP %d, MTU error.\n", qpn);
3694− break;
3695− case HNS_ROCE_LWQCE_WQE_BA_ADDR_ERROR:
3696− dev_warn(dev, "QP %d, WQE BA addr error.\n", qpn);
3697− break;
3698− case HNS_ROCE_LWQCE_WQE_ADDR_ERROR:
3699− dev_warn(dev, "QP %d, WQE addr error.\n", qpn);
3700− break;
3701− case HNS_ROCE_LWQCE_SQ_WQE_SHIFT_ERROR:
3702− dev_warn(dev, "QP %d, WQE shift error\n", qpn);
3703− break;
3704− case HNS_ROCE_LWQCE_SL_ERROR:
3705− dev_warn(dev, "QP %d, SL error.\n", qpn);
3706− break;
3707− case HNS_ROCE_LWQCE_PORT_ERROR:
3708− dev_warn(dev, "QP %d, port error.\n", qpn);
3709− break;
3710− default:
3711− break;
3712− }
3713−}
3714−
3715−static void hns_roce_v1_local_wq_access_err_handle(struct hns_roce_dev *hr_dev,
3716− struct hns_roce_aeqe *aeqe,
3717− int qpn)
3718−{
3719− struct device *dev = &hr_dev->pdev->dev;
3720−
3721− dev_warn(dev, "Local Access Violation Work Queue Error.\n");
3722− switch (roce_get_field(aeqe->asyn, HNS_ROCE_AEQE_U32_4_EVENT_SUB_TYPE_M,
3723− HNS_ROCE_AEQE_U32_4_EVENT_SUB_TYPE_S)) {
3724− case HNS_ROCE_LAVWQE_R_KEY_VIOLATION:
3725− dev_warn(dev, "QP %d, R_key violation.\n", qpn);
3726− break;
3727− case HNS_ROCE_LAVWQE_LENGTH_ERROR:
3728− dev_warn(dev, "QP %d, length error.\n", qpn);
3729− break;
3730− case HNS_ROCE_LAVWQE_VA_ERROR:
3731− dev_warn(dev, "QP %d, VA error.\n", qpn);
3732− break;
3733− case HNS_ROCE_LAVWQE_PD_ERROR:
3734− dev_err(dev, "QP %d, PD error.\n", qpn);
3735− break;
3736− case HNS_ROCE_LAVWQE_RW_ACC_ERROR:
3737− dev_warn(dev, "QP %d, rw acc error.\n", qpn);
3738− break;
3739− case HNS_ROCE_LAVWQE_KEY_STATE_ERROR:
3740− dev_warn(dev, "QP %d, key state error.\n", qpn);
3741− break;
3742− case HNS_ROCE_LAVWQE_MR_OPERATION_ERROR:
3743− dev_warn(dev, "QP %d, MR operation error.\n", qpn);
3744− break;
3745− default:
3746− break;
3747− }
3748−}
3749−
3750−static void hns_roce_v1_qp_err_handle(struct hns_roce_dev *hr_dev,
3751− struct hns_roce_aeqe *aeqe,
3752− int event_type)
3753−{
3754− struct device *dev = &hr_dev->pdev->dev;
3755− int phy_port;
3756− int qpn;
3757−
3758− qpn = roce_get_field(aeqe->event.queue_event.num,
3759− HNS_ROCE_AEQE_EVENT_QP_EVENT_QP_QPN_M,
3760− HNS_ROCE_AEQE_EVENT_QP_EVENT_QP_QPN_S);
3761− phy_port = roce_get_field(aeqe->event.queue_event.num,
3762− HNS_ROCE_AEQE_EVENT_QP_EVENT_PORT_NUM_M,
3763− HNS_ROCE_AEQE_EVENT_QP_EVENT_PORT_NUM_S);
3764− if (qpn <= 1)
3765− qpn = HNS_ROCE_MAX_PORTS * qpn + phy_port;
3766−
3767− switch (event_type) {
3768− case HNS_ROCE_EVENT_TYPE_INV_REQ_LOCAL_WQ_ERROR:
3769− dev_warn(dev, "Invalid Req Local Work Queue Error.\n"
3770− "QP %d, phy_port %d.\n", qpn, phy_port);
3771− break;
3772− case HNS_ROCE_EVENT_TYPE_WQ_CATAS_ERROR:
3773− hns_roce_v1_wq_catas_err_handle(hr_dev, aeqe, qpn);
3774− break;
3775− case HNS_ROCE_EVENT_TYPE_LOCAL_WQ_ACCESS_ERROR:
3776− hns_roce_v1_local_wq_access_err_handle(hr_dev, aeqe, qpn);
3777− break;
3778− default:
3779− break;
3780− }
3781−
3782− hns_roce_qp_event(hr_dev, qpn, event_type);
3783−}
3784−
3785−static void hns_roce_v1_cq_err_handle(struct hns_roce_dev *hr_dev,
3786− struct hns_roce_aeqe *aeqe,
3787− int event_type)
3788−{
3789− struct device *dev = &hr_dev->pdev->dev;
3790− u32 cqn;
3791−
3792− cqn = roce_get_field(aeqe->event.queue_event.num,
3793− HNS_ROCE_AEQE_EVENT_CQ_EVENT_CQ_CQN_M,
3794− HNS_ROCE_AEQE_EVENT_CQ_EVENT_CQ_CQN_S);
3795−
3796− switch (event_type) {
3797− case HNS_ROCE_EVENT_TYPE_CQ_ACCESS_ERROR:
3798− dev_warn(dev, "CQ 0x%x access err.\n", cqn);
3799− break;
3800− case HNS_ROCE_EVENT_TYPE_CQ_OVERFLOW:
3801− dev_warn(dev, "CQ 0x%x overflow\n", cqn);
3802− break;
3803− case HNS_ROCE_EVENT_TYPE_CQ_ID_INVALID:
3804− dev_warn(dev, "CQ 0x%x ID invalid.\n", cqn);
3805− break;
3806− default:
3807− break;
3808− }
3809−
3810− hns_roce_cq_event(hr_dev, cqn, event_type);
3811−}
3812−
3813−static void hns_roce_v1_db_overflow_handle(struct hns_roce_dev *hr_dev,
3814− struct hns_roce_aeqe *aeqe)
3815−{
3816− struct device *dev = &hr_dev->pdev->dev;
3817−
3818− switch (roce_get_field(aeqe->asyn, HNS_ROCE_AEQE_U32_4_EVENT_SUB_TYPE_M,
3819− HNS_ROCE_AEQE_U32_4_EVENT_SUB_TYPE_S)) {
3820− case HNS_ROCE_DB_SUBTYPE_SDB_OVF:
3821− dev_warn(dev, "SDB overflow.\n");
3822− break;
3823− case HNS_ROCE_DB_SUBTYPE_SDB_ALM_OVF:
3824− dev_warn(dev, "SDB almost overflow.\n");
3825− break;
3826− case HNS_ROCE_DB_SUBTYPE_SDB_ALM_EMP:
3827− dev_warn(dev, "SDB almost empty.\n");
3828− break;
3829− case HNS_ROCE_DB_SUBTYPE_ODB_OVF:
3830− dev_warn(dev, "ODB overflow.\n");
3831− break;
3832− case HNS_ROCE_DB_SUBTYPE_ODB_ALM_OVF:
3833− dev_warn(dev, "ODB almost overflow.\n");
3834− break;
3835− case HNS_ROCE_DB_SUBTYPE_ODB_ALM_EMP:
3836− dev_warn(dev, "SDB almost empty.\n");
3837− break;
3838− default:
3839− break;
3840− }
3841−}
3842−
3843−static struct hns_roce_aeqe *get_aeqe_v1(struct hns_roce_eq *eq, u32 entry)
3844−{
3845− unsigned long off = (entry & (eq->entries - 1)) * HNS_ROCE_AEQE_SIZE;
3846−
3847− return (struct hns_roce_aeqe *)((u8 *)
3848− (eq->buf_list[off / HNS_ROCE_BA_SIZE].buf) +
3849− off % HNS_ROCE_BA_SIZE);
3850−}
3851−
3852−static struct hns_roce_aeqe *next_aeqe_sw_v1(struct hns_roce_eq *eq)
3853−{
3854− struct hns_roce_aeqe *aeqe = get_aeqe_v1(eq, eq->cons_index);
3855−
3856− return (roce_get_bit(aeqe->asyn, HNS_ROCE_AEQE_U32_4_OWNER_S) ^
3857− !!(eq->cons_index & eq->entries)) ? aeqe : NULL;
3858−}
3859−
3860−static int hns_roce_v1_aeq_int(struct hns_roce_dev *hr_dev,
3861− struct hns_roce_eq *eq)
3862−{
3863− struct device *dev = &hr_dev->pdev->dev;
3864− struct hns_roce_aeqe *aeqe;
3865− int aeqes_found = 0;
3866− int event_type;
3867−
3868− while ((aeqe = next_aeqe_sw_v1(eq))) {
3869− /* Make sure we read the AEQ entry after we have checked the
3870− * ownership bit
3871− */
3872− dma_rmb();
3873−
3874− dev_dbg(dev, "aeqe = %pK, aeqe->asyn.event_type = 0x%lx\n",
3875− aeqe,
3876− roce_get_field(aeqe->asyn,
3877− HNS_ROCE_AEQE_U32_4_EVENT_TYPE_M,
3878− HNS_ROCE_AEQE_U32_4_EVENT_TYPE_S));
3879− event_type = roce_get_field(aeqe->asyn,
3880− HNS_ROCE_AEQE_U32_4_EVENT_TYPE_M,
3881− HNS_ROCE_AEQE_U32_4_EVENT_TYPE_S);
3882− switch (event_type) {
3883− case HNS_ROCE_EVENT_TYPE_PATH_MIG:
3884− dev_warn(dev, "PATH MIG not supported\n");
3885− break;
3886− case HNS_ROCE_EVENT_TYPE_COMM_EST:
3887− dev_warn(dev, "COMMUNICATION established\n");
3888− break;
3889− case HNS_ROCE_EVENT_TYPE_SQ_DRAINED:
3890− dev_warn(dev, "SQ DRAINED not supported\n");
3891− break;
3892− case HNS_ROCE_EVENT_TYPE_PATH_MIG_FAILED:
3893− dev_warn(dev, "PATH MIG failed\n");
3894− break;
3895− case HNS_ROCE_EVENT_TYPE_INV_REQ_LOCAL_WQ_ERROR:
3896− case HNS_ROCE_EVENT_TYPE_WQ_CATAS_ERROR:
3897− case HNS_ROCE_EVENT_TYPE_LOCAL_WQ_ACCESS_ERROR:
3898− hns_roce_v1_qp_err_handle(hr_dev, aeqe, event_type);
3899− break;
3900− case HNS_ROCE_EVENT_TYPE_SRQ_LIMIT_REACH:
3901− case HNS_ROCE_EVENT_TYPE_SRQ_CATAS_ERROR:
3902− case HNS_ROCE_EVENT_TYPE_SRQ_LAST_WQE_REACH:
3903− dev_warn(dev, "SRQ not support!\n");
3904− break;
3905− case HNS_ROCE_EVENT_TYPE_CQ_ACCESS_ERROR:
3906− case HNS_ROCE_EVENT_TYPE_CQ_OVERFLOW:
3907− case HNS_ROCE_EVENT_TYPE_CQ_ID_INVALID:
3908− hns_roce_v1_cq_err_handle(hr_dev, aeqe, event_type);
3909− break;
3910− case HNS_ROCE_EVENT_TYPE_PORT_CHANGE:
3911− dev_warn(dev, "port change.\n");
3912− break;
3913− case HNS_ROCE_EVENT_TYPE_MB:
3914− hns_roce_cmd_event(hr_dev,
3915− le16_to_cpu(aeqe->event.cmd.token),
3916− aeqe->event.cmd.status,
3917− le64_to_cpu(aeqe->event.cmd.out_param
3918− ));
3919− break;
3920− case HNS_ROCE_EVENT_TYPE_DB_OVERFLOW:
3921− hns_roce_v1_db_overflow_handle(hr_dev, aeqe);
3922− break;
3923− default:
3924− dev_warn(dev, "Unhandled event %d on EQ %d at idx %u.\n",
3925− event_type, eq->eqn, eq->cons_index);
3926− break;
3927− }
3928−
3929− eq->cons_index++;
3930− aeqes_found = 1;
3931−
3932− if (eq->cons_index > 2 * hr_dev->caps.aeqe_depth - 1)
3933− eq->cons_index = 0;
3934− }
3935−
3936− set_eq_cons_index_v1(eq, 0);
3937−
3938− return aeqes_found;
3939−}
3940−
3941−static struct hns_roce_ceqe *get_ceqe_v1(struct hns_roce_eq *eq, u32 entry)
3942−{
3943− unsigned long off = (entry & (eq->entries - 1)) * HNS_ROCE_CEQE_SIZE;
3944−
3945− return (struct hns_roce_ceqe *)((u8 *)
3946− (eq->buf_list[off / HNS_ROCE_BA_SIZE].buf) +
3947− off % HNS_ROCE_BA_SIZE);
3948−}
3949−
3950−static struct hns_roce_ceqe *next_ceqe_sw_v1(struct hns_roce_eq *eq)
3951−{
3952− struct hns_roce_ceqe *ceqe = get_ceqe_v1(eq, eq->cons_index);
3953−
3954− return (!!(roce_get_bit(ceqe->comp,
3955− HNS_ROCE_CEQE_CEQE_COMP_OWNER_S))) ^
3956− (!!(eq->cons_index & eq->entries)) ? ceqe : NULL;
3957−}
3958−
3959−static int hns_roce_v1_ceq_int(struct hns_roce_dev *hr_dev,
3960− struct hns_roce_eq *eq)
3961−{
3962− struct hns_roce_ceqe *ceqe;
3963− int ceqes_found = 0;
3964− u32 cqn;
3965−
3966− while ((ceqe = next_ceqe_sw_v1(eq))) {
3967− /* Make sure we read CEQ entry after we have checked the
3968− * ownership bit
3969− */
3970− dma_rmb();
3971−
3972− cqn = roce_get_field(ceqe->comp,
3973− HNS_ROCE_CEQE_CEQE_COMP_CQN_M,
3974− HNS_ROCE_CEQE_CEQE_COMP_CQN_S);
3975− hns_roce_cq_completion(hr_dev, cqn);
3976−
3977− ++eq->cons_index;
3978− ceqes_found = 1;
3979−
3980− if (eq->cons_index >
3981− EQ_DEPTH_COEFF * hr_dev->caps.ceqe_depth - 1)
3982− eq->cons_index = 0;
3983− }
3984−
3985− set_eq_cons_index_v1(eq, 0);
3986−
3987− return ceqes_found;
3988−}
3989−
3990−static irqreturn_t hns_roce_v1_msix_interrupt_eq(int irq, void *eq_ptr)
3991−{
3992− struct hns_roce_eq *eq = eq_ptr;
3993− struct hns_roce_dev *hr_dev = eq->hr_dev;
3994− int int_work;
3995−
3996− if (eq->type_flag == HNS_ROCE_CEQ)
3997− /* CEQ irq routine, CEQ is pulse irq, not clear */
3998− int_work = hns_roce_v1_ceq_int(hr_dev, eq);
3999− else
4000− /* AEQ irq routine, AEQ is pulse irq, not clear */
4001− int_work = hns_roce_v1_aeq_int(hr_dev, eq);
4002−
4003− return IRQ_RETVAL(int_work);
4004−}
4005−
4006−static irqreturn_t hns_roce_v1_msix_interrupt_abn(int irq, void *dev_id)
4007−{
4008− struct hns_roce_dev *hr_dev = dev_id;
4009− struct device *dev = &hr_dev->pdev->dev;
4010− int int_work = 0;
4011− u32 caepaemask_val;
4012− u32 cealmovf_val;
4013− u32 caepaest_val;
4014− u32 aeshift_val;
4015− u32 ceshift_val;
4016− u32 cemask_val;
4017− __le32 tmp;
4018− int i;
4019−
4020− /*
4021− * Abnormal interrupt:
4022− * AEQ overflow, ECC multi-bit err, CEQ overflow must clear
4023− * interrupt, mask irq, clear irq, cancel mask operation
4024− */
4025− aeshift_val = roce_read(hr_dev, ROCEE_CAEP_AEQC_AEQE_SHIFT_REG);
4026− tmp = cpu_to_le32(aeshift_val);
4027−
4028− /* AEQE overflow */
4029− if (roce_get_bit(tmp,
4030− ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQ_ALM_OVF_INT_ST_S) == 1) {
4031− dev_warn(dev, "AEQ overflow!\n");
4032−
4033− /* Set mask */
4034− caepaemask_val = roce_read(hr_dev, ROCEE_CAEP_AE_MASK_REG);
4035− tmp = cpu_to_le32(caepaemask_val);
4036− roce_set_bit(tmp, ROCEE_CAEP_AE_MASK_CAEP_AEQ_ALM_OVF_MASK_S,
4037− HNS_ROCE_INT_MASK_ENABLE);
4038− caepaemask_val = le32_to_cpu(tmp);
4039− roce_write(hr_dev, ROCEE_CAEP_AE_MASK_REG, caepaemask_val);
4040−
4041− /* Clear int state(INT_WC : write 1 clear) */
4042− caepaest_val = roce_read(hr_dev, ROCEE_CAEP_AE_ST_REG);
4043− tmp = cpu_to_le32(caepaest_val);
4044− roce_set_bit(tmp, ROCEE_CAEP_AE_ST_CAEP_AEQ_ALM_OVF_S, 1);
4045− caepaest_val = le32_to_cpu(tmp);
4046− roce_write(hr_dev, ROCEE_CAEP_AE_ST_REG, caepaest_val);
4047−
4048− /* Clear mask */
4049− caepaemask_val = roce_read(hr_dev, ROCEE_CAEP_AE_MASK_REG);
4050− tmp = cpu_to_le32(caepaemask_val);
4051− roce_set_bit(tmp, ROCEE_CAEP_AE_MASK_CAEP_AEQ_ALM_OVF_MASK_S,
4052− HNS_ROCE_INT_MASK_DISABLE);
4053− caepaemask_val = le32_to_cpu(tmp);
4054− roce_write(hr_dev, ROCEE_CAEP_AE_MASK_REG, caepaemask_val);
4055− }
4056−
4057− /* CEQ almost overflow */
4058− for (i = 0; i < hr_dev->caps.num_comp_vectors; i++) {
4059− ceshift_val = roce_read(hr_dev, ROCEE_CAEP_CEQC_SHIFT_0_REG +
4060− i * CEQ_REG_OFFSET);
4061− tmp = cpu_to_le32(ceshift_val);
4062−
4063− if (roce_get_bit(tmp,
4064− ROCEE_CAEP_CEQC_SHIFT_CAEP_CEQ_ALM_OVF_INT_ST_S) == 1) {
4065− dev_warn(dev, "CEQ[%d] almost overflow!\n", i);
4066− int_work++;
4067−
4068− /* Set mask */
4069− cemask_val = roce_read(hr_dev,
4070− ROCEE_CAEP_CE_IRQ_MASK_0_REG +
4071− i * CEQ_REG_OFFSET);
4072− tmp = cpu_to_le32(cemask_val);
4073− roce_set_bit(tmp,
4074− ROCEE_CAEP_CE_IRQ_MASK_CAEP_CEQ_ALM_OVF_MASK_S,
4075− HNS_ROCE_INT_MASK_ENABLE);
4076− cemask_val = le32_to_cpu(tmp);
4077− roce_write(hr_dev, ROCEE_CAEP_CE_IRQ_MASK_0_REG +
4078− i * CEQ_REG_OFFSET, cemask_val);
4079−
4080− /* Clear int state(INT_WC : write 1 clear) */
4081− cealmovf_val = roce_read(hr_dev,
4082− ROCEE_CAEP_CEQ_ALM_OVF_0_REG +
4083− i * CEQ_REG_OFFSET);
4084− tmp = cpu_to_le32(cealmovf_val);
4085− roce_set_bit(tmp,
4086− ROCEE_CAEP_CEQ_ALM_OVF_CAEP_CEQ_ALM_OVF_S,
4087− 1);
4088− cealmovf_val = le32_to_cpu(tmp);
4089− roce_write(hr_dev, ROCEE_CAEP_CEQ_ALM_OVF_0_REG +
4090− i * CEQ_REG_OFFSET, cealmovf_val);
4091−
4092− /* Clear mask */
4093− cemask_val = roce_read(hr_dev,
4094− ROCEE_CAEP_CE_IRQ_MASK_0_REG +
4095− i * CEQ_REG_OFFSET);
4096− tmp = cpu_to_le32(cemask_val);
4097− roce_set_bit(tmp,
4098− ROCEE_CAEP_CE_IRQ_MASK_CAEP_CEQ_ALM_OVF_MASK_S,
4099− HNS_ROCE_INT_MASK_DISABLE);
4100− cemask_val = le32_to_cpu(tmp);
4101− roce_write(hr_dev, ROCEE_CAEP_CE_IRQ_MASK_0_REG +
4102− i * CEQ_REG_OFFSET, cemask_val);
4103− }
4104− }
4105−
4106− /* ECC multi-bit error alarm */
4107− dev_warn(dev, "ECC UCERR ALARM: 0x%x, 0x%x, 0x%x\n",
4108− roce_read(hr_dev, ROCEE_ECC_UCERR_ALM0_REG),
4109− roce_read(hr_dev, ROCEE_ECC_UCERR_ALM1_REG),
4110− roce_read(hr_dev, ROCEE_ECC_UCERR_ALM2_REG));
4111−
4112− dev_warn(dev, "ECC CERR ALARM: 0x%x, 0x%x, 0x%x\n",
4113− roce_read(hr_dev, ROCEE_ECC_CERR_ALM0_REG),
4114− roce_read(hr_dev, ROCEE_ECC_CERR_ALM1_REG),
4115− roce_read(hr_dev, ROCEE_ECC_CERR_ALM2_REG));
4116−
4117− return IRQ_RETVAL(int_work);
4118−}
4119−
4120−static void hns_roce_v1_int_mask_enable(struct hns_roce_dev *hr_dev)
4121−{
4122− u32 aemask_val;
4123− int masken = 0;
4124− __le32 tmp;
4125− int i;
4126−
4127− /* AEQ INT */
4128− aemask_val = roce_read(hr_dev, ROCEE_CAEP_AE_MASK_REG);
4129− tmp = cpu_to_le32(aemask_val);
4130− roce_set_bit(tmp, ROCEE_CAEP_AE_MASK_CAEP_AEQ_ALM_OVF_MASK_S,
4131− masken);
4132− roce_set_bit(tmp, ROCEE_CAEP_AE_MASK_CAEP_AE_IRQ_MASK_S, masken);
4133− aemask_val = le32_to_cpu(tmp);
4134− roce_write(hr_dev, ROCEE_CAEP_AE_MASK_REG, aemask_val);
4135−
4136− /* CEQ INT */
4137− for (i = 0; i < hr_dev->caps.num_comp_vectors; i++) {
4138− /* IRQ mask */
4139− roce_write(hr_dev, ROCEE_CAEP_CE_IRQ_MASK_0_REG +
4140− i * CEQ_REG_OFFSET, masken);
4141− }
4142−}
4143−
4144−static void hns_roce_v1_free_eq(struct hns_roce_dev *hr_dev,
4145− struct hns_roce_eq *eq)
4146−{
4147− int npages = (PAGE_ALIGN(eq->eqe_size * eq->entries) +
4148− HNS_ROCE_BA_SIZE - 1) / HNS_ROCE_BA_SIZE;
4149− int i;
4150−
4151− if (!eq->buf_list)
4152− return;
4153−
4154− for (i = 0; i < npages; ++i)
4155− dma_free_coherent(&hr_dev->pdev->dev, HNS_ROCE_BA_SIZE,
4156− eq->buf_list[i].buf, eq->buf_list[i].map);
4157−
4158− kfree(eq->buf_list);
4159−}
4160−
4161−static void hns_roce_v1_enable_eq(struct hns_roce_dev *hr_dev, int eq_num,
4162− int enable_flag)
4163−{
4164− void __iomem *eqc = hr_dev->eq_table.eqc_base[eq_num];
4165− __le32 tmp;
4166− u32 val;
4167−
4168− val = readl(eqc);
4169− tmp = cpu_to_le32(val);
4170−
4171− if (enable_flag)
4172− roce_set_field(tmp,
4173− ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_STATE_M,
4174− ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_STATE_S,
4175− HNS_ROCE_EQ_STAT_VALID);
4176− else
4177− roce_set_field(tmp,
4178− ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_STATE_M,
4179− ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_STATE_S,
4180− HNS_ROCE_EQ_STAT_INVALID);
4181−
4182− val = le32_to_cpu(tmp);
4183− writel(val, eqc);
4184−}
4185−
4186−static int hns_roce_v1_create_eq(struct hns_roce_dev *hr_dev,
4187− struct hns_roce_eq *eq)
4188−{
4189− void __iomem *eqc = hr_dev->eq_table.eqc_base[eq->eqn];
4190− struct device *dev = &hr_dev->pdev->dev;
4191− dma_addr_t tmp_dma_addr;
4192− u32 eqcuridx_val;
4193− u32 eqconsindx_val;
4194− u32 eqshift_val;
4195− __le32 tmp2 = 0;
4196− __le32 tmp1 = 0;
4197− __le32 tmp = 0;
4198− int num_bas;
4199− int ret;
4200− int i;
4201−
4202− num_bas = (PAGE_ALIGN(eq->entries * eq->eqe_size) +
4203− HNS_ROCE_BA_SIZE - 1) / HNS_ROCE_BA_SIZE;
4204−
4205− if ((eq->entries * eq->eqe_size) > HNS_ROCE_BA_SIZE) {
4206− dev_err(dev, "[error]eq buf %d gt ba size(%d) need bas=%d\n",
4207− (eq->entries * eq->eqe_size), HNS_ROCE_BA_SIZE,
4208− num_bas);
4209− return -EINVAL;
4210− }
4211−
4212− eq->buf_list = kcalloc(num_bas, sizeof(*eq->buf_list), GFP_KERNEL);
4213− if (!eq->buf_list)
4214− return -ENOMEM;
4215−
4216− for (i = 0; i < num_bas; ++i) {
4217− eq->buf_list[i].buf = dma_alloc_coherent(dev, HNS_ROCE_BA_SIZE,
4218− &tmp_dma_addr,
4219− GFP_KERNEL);
4220− if (!eq->buf_list[i].buf) {
4221− ret = -ENOMEM;
4222− goto err_out_free_pages;
4223− }
4224−
4225− eq->buf_list[i].map = tmp_dma_addr;
4226− }
4227− eq->cons_index = 0;
4228− roce_set_field(tmp, ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_STATE_M,
4229− ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_STATE_S,
4230− HNS_ROCE_EQ_STAT_INVALID);
4231− roce_set_field(tmp, ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_AEQE_SHIFT_M,
4232− ROCEE_CAEP_AEQC_AEQE_SHIFT_CAEP_AEQC_AEQE_SHIFT_S,
4233− eq->log_entries);
4234− eqshift_val = le32_to_cpu(tmp);
4235− writel(eqshift_val, eqc);
4236−
4237− /* Configure eq extended address 12~44bit */
4238− writel((u32)(eq->buf_list[0].map >> 12), eqc + 4);
4239−
4240− /*
4241− * Configure eq extended address 45~49 bit.
4242− * 44 = 32 + 12, When evaluating addr to hardware, shift 12 because of
4243− * using 4K page, and shift more 32 because of
4244− * calculating the high 32 bit value evaluated to hardware.
4245− */
4246− roce_set_field(tmp1, ROCEE_CAEP_AEQE_CUR_IDX_CAEP_AEQ_BT_H_M,
4247− ROCEE_CAEP_AEQE_CUR_IDX_CAEP_AEQ_BT_H_S,
4248− eq->buf_list[0].map >> 44);
4249− roce_set_field(tmp1, ROCEE_CAEP_AEQE_CUR_IDX_CAEP_AEQE_CUR_IDX_M,
4250− ROCEE_CAEP_AEQE_CUR_IDX_CAEP_AEQE_CUR_IDX_S, 0);
4251− eqcuridx_val = le32_to_cpu(tmp1);
4252− writel(eqcuridx_val, eqc + 8);
4253−
4254− /* Configure eq consumer index */
4255− roce_set_field(tmp2, ROCEE_CAEP_AEQE_CONS_IDX_CAEP_AEQE_CONS_IDX_M,
4256− ROCEE_CAEP_AEQE_CONS_IDX_CAEP_AEQE_CONS_IDX_S, 0);
4257− eqconsindx_val = le32_to_cpu(tmp2);
4258− writel(eqconsindx_val, eqc + 0xc);
4259−
4260− return 0;
4261−
4262−err_out_free_pages:
4263− for (i -= 1; i >= 0; i--)
4264− dma_free_coherent(dev, HNS_ROCE_BA_SIZE, eq->buf_list[i].buf,
4265− eq->buf_list[i].map);
4266−
4267− kfree(eq->buf_list);
4268− return ret;
4269−}
4270−
4271−static int hns_roce_v1_init_eq_table(struct hns_roce_dev *hr_dev)
4272−{
4273− struct hns_roce_eq_table *eq_table = &hr_dev->eq_table;
4274− struct device *dev = &hr_dev->pdev->dev;
4275− struct hns_roce_eq *eq;
4276− int irq_num;
4277− int eq_num;
4278− int ret;
4279− int i, j;
4280−
4281− eq_num = hr_dev->caps.num_comp_vectors + hr_dev->caps.num_aeq_vectors;
4282− irq_num = eq_num + hr_dev->caps.num_other_vectors;
4283−
4284− eq_table->eq = kcalloc(eq_num, sizeof(*eq_table->eq), GFP_KERNEL);
4285− if (!eq_table->eq)
4286− return -ENOMEM;
4287−
4288− eq_table->eqc_base = kcalloc(eq_num, sizeof(*eq_table->eqc_base),
4289− GFP_KERNEL);
4290− if (!eq_table->eqc_base) {
4291− ret = -ENOMEM;
4292− goto err_eqc_base_alloc_fail;
4293− }
4294−
4295− for (i = 0; i < eq_num; i++) {
4296− eq = &eq_table->eq[i];
4297− eq->hr_dev = hr_dev;
4298− eq->eqn = i;
4299− eq->irq = hr_dev->irq[i];
4300− eq->log_page_size = PAGE_SHIFT;
4301−
4302− if (i < hr_dev->caps.num_comp_vectors) {
4303− /* CEQ */
4304− eq_table->eqc_base[i] = hr_dev->reg_base +
4305− ROCEE_CAEP_CEQC_SHIFT_0_REG +
4306− CEQ_REG_OFFSET * i;
4307− eq->type_flag = HNS_ROCE_CEQ;
4308− eq->db_reg = hr_dev->reg_base +
4309− ROCEE_CAEP_CEQC_CONS_IDX_0_REG +
4310− CEQ_REG_OFFSET * i;
4311− eq->entries = hr_dev->caps.ceqe_depth;
4312− eq->log_entries = ilog2(eq->entries);
4313− eq->eqe_size = HNS_ROCE_CEQE_SIZE;
4314− } else {
4315− /* AEQ */
4316− eq_table->eqc_base[i] = hr_dev->reg_base +
4317− ROCEE_CAEP_AEQC_AEQE_SHIFT_REG;
4318− eq->type_flag = HNS_ROCE_AEQ;
4319− eq->db_reg = hr_dev->reg_base +
4320− ROCEE_CAEP_AEQE_CONS_IDX_REG;
4321− eq->entries = hr_dev->caps.aeqe_depth;
4322− eq->log_entries = ilog2(eq->entries);
4323− eq->eqe_size = HNS_ROCE_AEQE_SIZE;
4324− }
4325− }
4326−
4327− /* Disable irq */
4328− hns_roce_v1_int_mask_enable(hr_dev);
4329−
4330− /* Configure ce int interval */
4331− roce_write(hr_dev, ROCEE_CAEP_CE_INTERVAL_CFG_REG,
4332− HNS_ROCE_CEQ_DEFAULT_INTERVAL);
4333−
4334− /* Configure ce int burst num */
4335− roce_write(hr_dev, ROCEE_CAEP_CE_BURST_NUM_CFG_REG,
4336− HNS_ROCE_CEQ_DEFAULT_BURST_NUM);
4337−
4338− for (i = 0; i < eq_num; i++) {
4339− ret = hns_roce_v1_create_eq(hr_dev, &eq_table->eq[i]);
4340− if (ret) {
4341− dev_err(dev, "eq create failed\n");
4342− goto err_create_eq_fail;
4343− }
4344− }
4345−
4346− for (j = 0; j < irq_num; j++) {
4347− if (j < eq_num)
4348− ret = request_irq(hr_dev->irq[j],
4349− hns_roce_v1_msix_interrupt_eq, 0,
4350− hr_dev->irq_names[j],
4351− &eq_table->eq[j]);
4352− else
4353− ret = request_irq(hr_dev->irq[j],
4354− hns_roce_v1_msix_interrupt_abn, 0,
4355− hr_dev->irq_names[j], hr_dev);
4356−
4357− if (ret) {
4358− dev_err(dev, "request irq error!\n");
4359− goto err_request_irq_fail;
4360− }
4361− }
4362−
4363− for (i = 0; i < eq_num; i++)
4364− hns_roce_v1_enable_eq(hr_dev, i, EQ_ENABLE);
4365−
4366− return 0;
4367−
4368−err_request_irq_fail:
4369− for (j -= 1; j >= 0; j--)
4370− free_irq(hr_dev->irq[j], &eq_table->eq[j]);
4371−
4372−err_create_eq_fail:
4373− for (i -= 1; i >= 0; i--)
4374− hns_roce_v1_free_eq(hr_dev, &eq_table->eq[i]);
4375−
4376− kfree(eq_table->eqc_base);
4377−
4378−err_eqc_base_alloc_fail:
4379− kfree(eq_table->eq);
4380−
4381− return ret;
4382−}
4383−
4384−static void hns_roce_v1_cleanup_eq_table(struct hns_roce_dev *hr_dev)
4385−{
4386− struct hns_roce_eq_table *eq_table = &hr_dev->eq_table;
4387− int irq_num;
4388− int eq_num;
4389− int i;
4390−
4391− eq_num = hr_dev->caps.num_comp_vectors + hr_dev->caps.num_aeq_vectors;
4392− irq_num = eq_num + hr_dev->caps.num_other_vectors;
4393− for (i = 0; i < eq_num; i++) {
4394− /* Disable EQ */
4395− hns_roce_v1_enable_eq(hr_dev, i, EQ_DISABLE);
4396−
4397− free_irq(hr_dev->irq[i], &eq_table->eq[i]);
4398−
4399− hns_roce_v1_free_eq(hr_dev, &eq_table->eq[i]);
4400− }
4401− for (i = eq_num; i < irq_num; i++)
4402− free_irq(hr_dev->irq[i], hr_dev);
4403−
4404− kfree(eq_table->eqc_base);
4405− kfree(eq_table->eq);
4406−}
4407−
4408−static const struct ib_device_ops hns_roce_v1_dev_ops = {
4409− .destroy_qp = hns_roce_v1_destroy_qp,
4410− .poll_cq = hns_roce_v1_poll_cq,
4411− .post_recv = hns_roce_v1_post_recv,
4412− .post_send = hns_roce_v1_post_send,
4413− .query_qp = hns_roce_v1_query_qp,
4414− .req_notify_cq = hns_roce_v1_req_notify_cq,
4415−};
4416−
4417−static const struct hns_roce_hw hns_roce_hw_v1 = {
4418− .reset = hns_roce_v1_reset,
4419− .hw_profile = hns_roce_v1_profile,
4420− .hw_init = hns_roce_v1_init,
4421− .hw_exit = hns_roce_v1_exit,
4422− .post_mbox = hns_roce_v1_post_mbox,
4423− .poll_mbox_done = hns_roce_v1_chk_mbox,
4424− .set_gid = hns_roce_v1_set_gid,
4425− .set_mac = hns_roce_v1_set_mac,
4426− .set_mtu = hns_roce_v1_set_mtu,
4427− .write_mtpt = hns_roce_v1_write_mtpt,
4428− .write_cqc = hns_roce_v1_write_cqc,
4429− .set_hem = hns_roce_v1_set_hem,
4430− .clear_hem = hns_roce_v1_clear_hem,
4431− .modify_qp = hns_roce_v1_modify_qp,
4432− .dereg_mr = hns_roce_v1_dereg_mr,
4433− .destroy_cq = hns_roce_v1_destroy_cq,
4434− .init_eq = hns_roce_v1_init_eq_table,
4435− .cleanup_eq = hns_roce_v1_cleanup_eq_table,
4436− .hns_roce_dev_ops = &hns_roce_v1_dev_ops,
4437−};
4438−
4439−static const struct of_device_id hns_roce_of_match[] = {
4440− { .compatible = "hisilicon,hns-roce-v1", .data = &hns_roce_hw_v1, },
4441− {},
4442−};
4443−MODULE_DEVICE_TABLE(of, hns_roce_of_match);
4444−
4445−static const struct acpi_device_id hns_roce_acpi_match[] = {
4446− { "HISI00D1", (kernel_ulong_t)&hns_roce_hw_v1 },
4447− {},
4448−};
4449−MODULE_DEVICE_TABLE(acpi, hns_roce_acpi_match);
4450−
4451−static struct
4452−platform_device *hns_roce_find_pdev(struct fwnode_handle *fwnode)
4453−{
4454− struct device *dev;
4455−
4456− /* get the 'device' corresponding to the matching 'fwnode' */
4457− dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
4458− /* get the platform device */
4459− return dev ? to_platform_device(dev) : NULL;
4460−}
4461−
4462−static int hns_roce_get_cfg(struct hns_roce_dev *hr_dev)
4463−{
4464− struct device *dev = &hr_dev->pdev->dev;
4465− struct platform_device *pdev = NULL;
4466− struct net_device *netdev = NULL;
4467− struct device_node *net_node;
4468− int port_cnt = 0;
4469− u8 phy_port;
4470− int ret;
4471− int i;
4472−
4473− /* check if we are compatible with the underlying SoC */
4474− if (dev_of_node(dev)) {
4475− const struct of_device_id *of_id;
4476−
4477− of_id = of_match_node(hns_roce_of_match, dev->of_node);
4478− if (!of_id) {
4479− dev_err(dev, "device is not compatible!\n");
4480− return -ENXIO;
4481− }
4482− hr_dev->hw = (const struct hns_roce_hw *)of_id->data;
4483− if (!hr_dev->hw) {
4484− dev_err(dev, "couldn't get H/W specific DT data!\n");
4485− return -ENXIO;
4486− }
4487− } else if (is_acpi_device_node(dev->fwnode)) {
4488− const struct acpi_device_id *acpi_id;
4489−
4490− acpi_id = acpi_match_device(hns_roce_acpi_match, dev);
4491− if (!acpi_id) {
4492− dev_err(dev, "device is not compatible!\n");
4493− return -ENXIO;
4494− }
4495− hr_dev->hw = (const struct hns_roce_hw *) acpi_id->driver_data;
4496− if (!hr_dev->hw) {
4497− dev_err(dev, "couldn't get H/W specific ACPI data!\n");
4498− return -ENXIO;
4499− }
4500− } else {
4501− dev_err(dev, "can't read compatibility data from DT or ACPI\n");
4502− return -ENXIO;
4503− }
4504−
4505− /* get the mapped register base address */
4506− hr_dev->reg_base = devm_platform_ioremap_resource(hr_dev->pdev, 0);
4507− if (IS_ERR(hr_dev->reg_base))
4508− return PTR_ERR(hr_dev->reg_base);
4509−
4510− /* read the node_guid of IB device from the DT or ACPI */
4511− ret = device_property_read_u8_array(dev, "node-guid",
4512− (u8 *)&hr_dev->ib_dev.node_guid,
4513− GUID_LEN);
4514− if (ret) {
4515− dev_err(dev, "couldn't get node_guid from DT or ACPI!\n");
4516− return ret;
4517− }
4518−
4519− /* get the RoCE associated ethernet ports or netdevices */
4520− for (i = 0; i < HNS_ROCE_MAX_PORTS; i++) {
4521− if (dev_of_node(dev)) {
4522− net_node = of_parse_phandle(dev->of_node, "eth-handle",
4523− i);
4524− if (!net_node)
4525− continue;
4526− pdev = of_find_device_by_node(net_node);
4527− } else if (is_acpi_device_node(dev->fwnode)) {
4528− struct fwnode_reference_args args;
4529−
4530− ret = acpi_node_get_property_reference(dev->fwnode,
4531− "eth-handle",
4532− i, &args);
4533− if (ret)
4534− continue;
4535− pdev = hns_roce_find_pdev(args.fwnode);
4536− } else {
4537− dev_err(dev, "cannot read data from DT or ACPI\n");
4538− return -ENXIO;
4539− }
4540−
4541− if (pdev) {
4542− netdev = platform_get_drvdata(pdev);
4543− phy_port = (u8)i;
4544− if (netdev) {
4545− hr_dev->iboe.netdevs[port_cnt] = netdev;
4546− hr_dev->iboe.phy_port[port_cnt] = phy_port;
4547− } else {
4548− dev_err(dev, "no netdev found with pdev %s\n",
4549− pdev->name);
4550− return -ENODEV;
4551− }
4552− port_cnt++;
4553− }
4554− }
4555−
4556− if (port_cnt == 0) {
4557− dev_err(dev, "unable to get eth-handle for available ports!\n");
4558− return -EINVAL;
4559− }
4560−
4561− hr_dev->caps.num_ports = port_cnt;
4562−
4563− /* cmd issue mode: 0 is poll, 1 is event */
4564− hr_dev->cmd_mod = 1;
4565− hr_dev->loop_idc = 0;
4566− hr_dev->sdb_offset = ROCEE_DB_SQ_L_0_REG;
4567− hr_dev->odb_offset = ROCEE_DB_OTHERS_L_0_REG;
4568−
4569− /* read the interrupt names from the DT or ACPI */
4570− ret = device_property_read_string_array(dev, "interrupt-names",
4571− hr_dev->irq_names,
4572− HNS_ROCE_V1_MAX_IRQ_NUM);
4573− if (ret < 0) {
4574− dev_err(dev, "couldn't get interrupt names from DT or ACPI!\n");
4575− return ret;
4576− }
4577−
4578− /* fetch the interrupt numbers */
4579− for (i = 0; i < HNS_ROCE_V1_MAX_IRQ_NUM; i++) {
4580− hr_dev->irq[i] = platform_get_irq(hr_dev->pdev, i);
4581− if (hr_dev->irq[i] <= 0)
4582− return -EINVAL;
4583− }
4584−
4585− return 0;
4586−}
4587−
4588−/**
4589− * hns_roce_probe - RoCE driver entrance
4590− * @pdev: pointer to platform device
4591− * Return : int
4592− *
4593− */
4594−static int hns_roce_probe(struct platform_device *pdev)
4595−{
4596− int ret;
4597− struct hns_roce_dev *hr_dev;
4598− struct device *dev = &pdev->dev;
4599−
4600− hr_dev = ib_alloc_device(hns_roce_dev, ib_dev);
4601− if (!hr_dev)
4602− return -ENOMEM;
4603−
4604− hr_dev->priv = kzalloc(sizeof(struct hns_roce_v1_priv), GFP_KERNEL);
4605− if (!hr_dev->priv) {
4606− ret = -ENOMEM;
4607− goto error_failed_kzalloc;
4608− }
4609−
4610− hr_dev->pdev = pdev;
4611− hr_dev->dev = dev;
4612− platform_set_drvdata(pdev, hr_dev);
4613−
4614− if (dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64ULL)) &&
4615− dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32ULL))) {
4616− dev_err(dev, "Not usable DMA addressing mode\n");
4617− ret = -EIO;
4618− goto error_failed_get_cfg;
4619− }
4620−
4621− ret = hns_roce_get_cfg(hr_dev);
4622− if (ret) {
4623− dev_err(dev, "Get Configuration failed!\n");
4624− goto error_failed_get_cfg;
4625− }
4626−
4627− ret = hns_roce_init(hr_dev);
4628− if (ret) {
4629− dev_err(dev, "RoCE engine init failed!\n");
4630− goto error_failed_get_cfg;
4631− }
4632−
4633− return 0;
4634−
4635−error_failed_get_cfg:
4636− kfree(hr_dev->priv);
4637−
4638−error_failed_kzalloc:
4639− ib_dealloc_device(&hr_dev->ib_dev);
4640−
4641− return ret;
4642−}
4643−
4644−/**
4645− * hns_roce_remove - remove RoCE device
4646− * @pdev: pointer to platform device
4647− */
4648−static int hns_roce_remove(struct platform_device *pdev)
4649−{
4650− struct hns_roce_dev *hr_dev = platform_get_drvdata(pdev);
4651−
4652− hns_roce_exit(hr_dev);
4653− kfree(hr_dev->priv);
4654− ib_dealloc_device(&hr_dev->ib_dev);
4655−
4656− return 0;
4657−}
4658−
4659−static struct platform_driver hns_roce_driver = {
4660− .probe = hns_roce_probe,
4661− .remove = hns_roce_remove,
4662− .driver = {
4663− .name = DRV_NAME,
4664− .of_match_table = hns_roce_of_match,
4665− .acpi_match_table = ACPI_PTR(hns_roce_acpi_match),
4666− },
4667−};
4668−
4669−module_platform_driver(hns_roce_driver);
4670−
4671−MODULE_LICENSE("Dual BSD/GPL");
4672−MODULE_AUTHOR("Wei Hu <xavier.huwei@huawei.com>");
4673−MODULE_AUTHOR("Nenglong Zhao <zhaonenglong@hisilicon.com>");
4674−MODULE_AUTHOR("Lijun Ou <oulijun@huawei.com>");
4675−MODULE_DESCRIPTION("Hisilicon Hip06 Family RoCE Driver");
drivers/infiniband/hw/hns/hns_roce_hw_v1.h+0−1147
@@ -1,1147 +0,0 @@
1−/*
2− * Copyright (c) 2016 Hisilicon Limited.
3− *
4− * This software is available to you under a choice of one of two
5− * licenses. You may choose to be licensed under the terms of the GNU
6− * General Public License (GPL) Version 2, available from the file
7− * COPYING in the main directory of this source tree, or the
8− * OpenIB.org BSD license below:
9− *
10− * Redistribution and use in source and binary forms, with or
11− * without modification, are permitted provided that the following
12− * conditions are met:
13− *
14− * - Redistributions of source code must retain the above
15− * copyright notice, this list of conditions and the following
16− * disclaimer.
17− *
18− * - Redistributions in binary form must reproduce the above
19− * copyright notice, this list of conditions and the following
20− * disclaimer in the documentation and/or other materials
21− * provided with the distribution.
22− *
23− * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24− * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25− * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26− * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27− * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28− * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29− * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30− * SOFTWARE.
31− */
32−
33−#ifndef _HNS_ROCE_HW_V1_H
34−#define _HNS_ROCE_HW_V1_H
35−
36−#define CQ_STATE_VALID 2
37−
38−#define HNS_ROCE_V1_MAX_PD_NUM 0x8000
39−#define HNS_ROCE_V1_MAX_CQ_NUM 0x10000
40−#define HNS_ROCE_V1_MAX_CQE_NUM 0x8000
41−
42−#define HNS_ROCE_V1_MAX_QP_NUM 0x40000
43−#define HNS_ROCE_V1_MAX_WQE_NUM 0x4000
44−
45−#define HNS_ROCE_V1_MAX_MTPT_NUM 0x80000
46−
47−#define HNS_ROCE_V1_MAX_MTT_SEGS 0x100000
48−
49−#define HNS_ROCE_V1_MAX_QP_INIT_RDMA 128
50−#define HNS_ROCE_V1_MAX_QP_DEST_RDMA 128
51−
52−#define HNS_ROCE_V1_MAX_SQ_DESC_SZ 64
53−#define HNS_ROCE_V1_MAX_RQ_DESC_SZ 64
54−#define HNS_ROCE_V1_SG_NUM 2
55−#define HNS_ROCE_V1_INLINE_SIZE 32
56−
57−#define HNS_ROCE_V1_UAR_NUM 256
58−#define HNS_ROCE_V1_PHY_UAR_NUM 8
59−
60−#define HNS_ROCE_V1_GID_NUM 16
61−#define HNS_ROCE_V1_RESV_QP 8
62−
63−#define HNS_ROCE_V1_MAX_IRQ_NUM 34
64−#define HNS_ROCE_V1_COMP_VEC_NUM 32
65−#define HNS_ROCE_V1_AEQE_VEC_NUM 1
66−#define HNS_ROCE_V1_ABNORMAL_VEC_NUM 1
67−
68−#define HNS_ROCE_V1_COMP_EQE_NUM 0x8000
69−#define HNS_ROCE_V1_ASYNC_EQE_NUM 0x400
70−
71−#define HNS_ROCE_V1_QPC_SIZE 256
72−#define HNS_ROCE_V1_IRRL_ENTRY_SIZE 8
73−#define HNS_ROCE_V1_CQC_ENTRY_SIZE 64
74−#define HNS_ROCE_V1_MTPT_ENTRY_SIZE 64
75−#define HNS_ROCE_V1_MTT_ENTRY_SIZE 64
76−
77−#define HNS_ROCE_V1_CQE_SIZE 32
78−#define HNS_ROCE_V1_PAGE_SIZE_SUPPORT 0xFFFFF000
79−
80−#define HNS_ROCE_V1_TABLE_CHUNK_SIZE (1 << 17)
81−
82−#define HNS_ROCE_V1_EXT_RAQ_WF 8
83−#define HNS_ROCE_V1_RAQ_ENTRY 64
84−#define HNS_ROCE_V1_RAQ_DEPTH 32768
85−#define HNS_ROCE_V1_RAQ_SIZE (HNS_ROCE_V1_RAQ_ENTRY * HNS_ROCE_V1_RAQ_DEPTH)
86−
87−#define HNS_ROCE_V1_SDB_DEPTH 0x400
88−#define HNS_ROCE_V1_ODB_DEPTH 0x400
89−
90−#define HNS_ROCE_V1_DB_RSVD 0x80
91−
92−#define HNS_ROCE_V1_SDB_ALEPT HNS_ROCE_V1_DB_RSVD
93−#define HNS_ROCE_V1_SDB_ALFUL (HNS_ROCE_V1_SDB_DEPTH - HNS_ROCE_V1_DB_RSVD)
94−#define HNS_ROCE_V1_ODB_ALEPT HNS_ROCE_V1_DB_RSVD
95−#define HNS_ROCE_V1_ODB_ALFUL (HNS_ROCE_V1_ODB_DEPTH - HNS_ROCE_V1_DB_RSVD)
96−
97−#define HNS_ROCE_V1_EXT_SDB_DEPTH 0x4000
98−#define HNS_ROCE_V1_EXT_ODB_DEPTH 0x4000
99−#define HNS_ROCE_V1_EXT_SDB_ENTRY 16
100−#define HNS_ROCE_V1_EXT_ODB_ENTRY 16
101−#define HNS_ROCE_V1_EXT_SDB_SIZE \
102− (HNS_ROCE_V1_EXT_SDB_DEPTH * HNS_ROCE_V1_EXT_SDB_ENTRY)
103−#define HNS_ROCE_V1_EXT_ODB_SIZE \
104− (HNS_ROCE_V1_EXT_ODB_DEPTH * HNS_ROCE_V1_EXT_ODB_ENTRY)
105−
106−#define HNS_ROCE_V1_EXT_SDB_ALEPT HNS_ROCE_V1_DB_RSVD
107−#define HNS_ROCE_V1_EXT_SDB_ALFUL \
108− (HNS_ROCE_V1_EXT_SDB_DEPTH - HNS_ROCE_V1_DB_RSVD)
109−#define HNS_ROCE_V1_EXT_ODB_ALEPT HNS_ROCE_V1_DB_RSVD
110−#define HNS_ROCE_V1_EXT_ODB_ALFUL \
111− (HNS_ROCE_V1_EXT_ODB_DEPTH - HNS_ROCE_V1_DB_RSVD)
112−
113−#define HNS_ROCE_V1_FREE_MR_TIMEOUT_MSECS 50000
114−#define HNS_ROCE_V1_RECREATE_LP_QP_TIMEOUT_MSECS 10000
115−#define HNS_ROCE_V1_FREE_MR_WAIT_VALUE 5
116−#define HNS_ROCE_V1_RECREATE_LP_QP_WAIT_VALUE 20
117−
118−#define HNS_ROCE_BT_RSV_BUF_SIZE (1 << 17)
119−
120−#define HNS_ROCE_V1_TPTR_ENTRY_SIZE 2
121−#define HNS_ROCE_V1_TPTR_BUF_SIZE \
122− (HNS_ROCE_V1_TPTR_ENTRY_SIZE * HNS_ROCE_V1_MAX_CQ_NUM)
123−
124−#define HNS_ROCE_ODB_POLL_MODE 0
125−
126−#define HNS_ROCE_SDB_NORMAL_MODE 0
127−#define HNS_ROCE_SDB_EXTEND_MODE 1
128−
129−#define HNS_ROCE_ODB_EXTEND_MODE 1
130−
131−#define KEY_VALID 0x02
132−
133−#define HNS_ROCE_CQE_QPN_MASK 0x3ffff
134−#define HNS_ROCE_CQE_STATUS_MASK 0x1f
135−#define HNS_ROCE_CQE_OPCODE_MASK 0xf
136−
137−#define HNS_ROCE_CQE_SUCCESS 0x00
138−#define HNS_ROCE_CQE_SYNDROME_LOCAL_LENGTH_ERR 0x01
139−#define HNS_ROCE_CQE_SYNDROME_LOCAL_QP_OP_ERR 0x02
140−#define HNS_ROCE_CQE_SYNDROME_LOCAL_PROT_ERR 0x03
141−#define HNS_ROCE_CQE_SYNDROME_WR_FLUSH_ERR 0x04
142−#define HNS_ROCE_CQE_SYNDROME_MEM_MANAGE_OPERATE_ERR 0x05
143−#define HNS_ROCE_CQE_SYNDROME_BAD_RESP_ERR 0x06
144−#define HNS_ROCE_CQE_SYNDROME_LOCAL_ACCESS_ERR 0x07
145−#define HNS_ROCE_CQE_SYNDROME_REMOTE_INVAL_REQ_ERR 0x08
146−#define HNS_ROCE_CQE_SYNDROME_REMOTE_ACCESS_ERR 0x09
147−#define HNS_ROCE_CQE_SYNDROME_REMOTE_OP_ERR 0x0a
148−#define HNS_ROCE_CQE_SYNDROME_TRANSPORT_RETRY_EXC_ERR 0x0b
149−#define HNS_ROCE_CQE_SYNDROME_RNR_RETRY_EXC_ERR 0x0c
150−
151−#define QP1C_CFGN_OFFSET 0x28
152−#define PHY_PORT_OFFSET 0x8
153−#define MTPT_IDX_SHIFT 16
154−#define ALL_PORT_VAL_OPEN 0x3f
155−#define POL_TIME_INTERVAL_VAL 0x80
156−#define SLEEP_TIME_INTERVAL 20
157−#define SQ_PSN_SHIFT 8
158−#define QKEY_VAL 0x80010000
159−#define SDB_INV_CNT_OFFSET 8
160−
161−#define HNS_ROCE_CEQ_DEFAULT_INTERVAL 0x10
162−#define HNS_ROCE_CEQ_DEFAULT_BURST_NUM 0x10
163−
164−#define HNS_ROCE_INT_MASK_DISABLE 0
165−#define HNS_ROCE_INT_MASK_ENABLE 1
166−
167−#define CEQ_REG_OFFSET 0x18
168−
169−#define HNS_ROCE_CEQE_CEQE_COMP_OWNER_S 0
170−
171−#define HNS_ROCE_V1_CONS_IDX_M GENMASK(15, 0)
172−
173−#define HNS_ROCE_CEQE_CEQE_COMP_CQN_S 16
174−#define HNS_ROCE_CEQE_CEQE_COMP_CQN_M GENMASK(31, 16)
175−
176−#define HNS_ROCE_AEQE_U32_4_EVENT_TYPE_S 16
177−#define HNS_ROCE_AEQE_U32_4_EVENT_TYPE_M GENMASK(23, 16)
178−
179−#define HNS_ROCE_AEQE_U32_4_EVENT_SUB_TYPE_S 24
180−#define HNS_ROCE_AEQE_U32_4_EVENT_SUB_TYPE_M GENMASK(30, 24)
181−
182−#define HNS_ROCE_AEQE_U32_4_OWNER_S 31
183−
184−#define HNS_ROCE_AEQE_EVENT_QP_EVENT_QP_QPN_S 0
185−#define HNS_ROCE_AEQE_EVENT_QP_EVENT_QP_QPN_M GENMASK(23, 0)
186−
187−#define HNS_ROCE_AEQE_EVENT_QP_EVENT_PORT_NUM_S 25
188−#define HNS_ROCE_AEQE_EVENT_QP_EVENT_PORT_NUM_M GENMASK(27, 25)
189−
190−#define HNS_ROCE_AEQE_EVENT_CQ_EVENT_CQ_CQN_S 0
191−#define HNS_ROCE_AEQE_EVENT_CQ_EVENT_CQ_CQN_M GENMASK(15, 0)
192−
193−#define HNS_ROCE_AEQE_EVENT_CE_EVENT_CEQE_CEQN_S 0
194−#define HNS_ROCE_AEQE_EVENT_CE_EVENT_CEQE_CEQN_M GENMASK(4, 0)
195−
196−/* Local Work Queue Catastrophic Error,SUBTYPE 0x5 */
197−enum {
198− HNS_ROCE_LWQCE_QPC_ERROR = 1,
199− HNS_ROCE_LWQCE_MTU_ERROR,
200− HNS_ROCE_LWQCE_WQE_BA_ADDR_ERROR,
201− HNS_ROCE_LWQCE_WQE_ADDR_ERROR,
202− HNS_ROCE_LWQCE_SQ_WQE_SHIFT_ERROR,
203− HNS_ROCE_LWQCE_SL_ERROR,
204− HNS_ROCE_LWQCE_PORT_ERROR,
205−};
206−
207−/* Local Access Violation Work Queue Error,SUBTYPE 0x7 */
208−enum {
209− HNS_ROCE_LAVWQE_R_KEY_VIOLATION = 1,
210− HNS_ROCE_LAVWQE_LENGTH_ERROR,
211− HNS_ROCE_LAVWQE_VA_ERROR,
212− HNS_ROCE_LAVWQE_PD_ERROR,
213− HNS_ROCE_LAVWQE_RW_ACC_ERROR,
214− HNS_ROCE_LAVWQE_KEY_STATE_ERROR,
215− HNS_ROCE_LAVWQE_MR_OPERATION_ERROR,
216−};
217−
218−/* DOORBELL overflow subtype */
219−enum {
220− HNS_ROCE_DB_SUBTYPE_SDB_OVF = 1,
221− HNS_ROCE_DB_SUBTYPE_SDB_ALM_OVF,
222− HNS_ROCE_DB_SUBTYPE_ODB_OVF,
223− HNS_ROCE_DB_SUBTYPE_ODB_ALM_OVF,
224− HNS_ROCE_DB_SUBTYPE_SDB_ALM_EMP,
225− HNS_ROCE_DB_SUBTYPE_ODB_ALM_EMP,
226−};
227−
228−enum {
229− /* RQ&SRQ related operations */
230− HNS_ROCE_OPCODE_SEND_DATA_RECEIVE = 0x06,
231− HNS_ROCE_OPCODE_RDMA_WITH_IMM_RECEIVE,
232−};
233−
234−enum {
235− HNS_ROCE_PORT_DOWN = 0,
236− HNS_ROCE_PORT_UP,
237−};
238−
239−struct hns_roce_cq_context {
240− __le32 cqc_byte_4;
241− __le32 cq_bt_l;
242− __le32 cqc_byte_12;
243− __le32 cur_cqe_ba0_l;
244− __le32 cqc_byte_20;
245− __le32 cqe_tptr_addr_l;
246− __le32 cur_cqe_ba1_l;
247− __le32 cqc_byte_32;
248−};
249−
250−#define CQ_CONTEXT_CQC_BYTE_4_CQC_STATE_S 0
251−#define CQ_CONTEXT_CQC_BYTE_4_CQC_STATE_M \
252− (((1UL << 2) - 1) << CQ_CONTEXT_CQC_BYTE_4_CQC_STATE_S)
253−
254−#define CQ_CONTEXT_CQC_BYTE_4_CQN_S 16
255−#define CQ_CONTEXT_CQC_BYTE_4_CQN_M \
256− (((1UL << 16) - 1) << CQ_CONTEXT_CQC_BYTE_4_CQN_S)
257−
258−#define CQ_CONTEXT_CQC_BYTE_12_CQ_BT_H_S 0
259−#define CQ_CONTEXT_CQC_BYTE_12_CQ_BT_H_M \
260− (((1UL << 17) - 1) << CQ_CONTEXT_CQC_BYTE_12_CQ_BT_H_S)
261−
262−#define CQ_CONTEXT_CQC_BYTE_12_CQ_CQE_SHIFT_S 20
263−#define CQ_CONTEXT_CQC_BYTE_12_CQ_CQE_SHIFT_M \
264− (((1UL << 4) - 1) << CQ_CONTEXT_CQC_BYTE_12_CQ_CQE_SHIFT_S)
265−
266−#define CQ_CONTEXT_CQC_BYTE_12_CEQN_S 24
267−#define CQ_CONTEXT_CQC_BYTE_12_CEQN_M \
268− (((1UL << 5) - 1) << CQ_CONTEXT_CQC_BYTE_12_CEQN_S)
269−
270−#define CQ_CONTEXT_CQC_BYTE_20_CUR_CQE_BA0_H_S 0
271−#define CQ_CONTEXT_CQC_BYTE_20_CUR_CQE_BA0_H_M \
272− (((1UL << 5) - 1) << CQ_CONTEXT_CQC_BYTE_20_CUR_CQE_BA0_H_S)
273−
274−#define CQ_CONTEXT_CQC_BYTE_20_CQ_CUR_INDEX_S 16
275−#define CQ_CONTEXT_CQC_BYTE_20_CQ_CUR_INDEX_M \
276− (((1UL << 16) - 1) << CQ_CONTEXT_CQC_BYTE_20_CQ_CUR_INDEX_S)
277−
278−#define CQ_CONTEXT_CQC_BYTE_20_CQE_TPTR_ADDR_H_S 8
279−#define CQ_CONTEXT_CQC_BYTE_20_CQE_TPTR_ADDR_H_M \
280− (((1UL << 5) - 1) << CQ_CONTEXT_CQC_BYTE_20_CQE_TPTR_ADDR_H_S)
281−
282−#define CQ_CONTEXT_CQC_BYTE_32_CUR_CQE_BA1_H_S 0
283−#define CQ_CONTEXT_CQC_BYTE_32_CUR_CQE_BA1_H_M \
284− (((1UL << 5) - 1) << CQ_CONTEXT_CQC_BYTE_32_CUR_CQE_BA1_H_S)
285−
286−#define CQ_CONTEXT_CQC_BYTE_32_SE_FLAG_S 9
287−
288−#define CQ_CONTEXT_CQC_BYTE_32_CE_FLAG_S 8
289−#define CQ_CONTEXT_CQC_BYTE_32_NOTIFICATION_FLAG_S 14
290−#define CQ_CQNTEXT_CQC_BYTE_32_TYPE_OF_COMPLETION_NOTIFICATION_S 15
291−
292−#define CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_S 16
293−#define CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_M \
294− (((1UL << 16) - 1) << CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_S)
295−
296−struct hns_roce_cqe {
297− __le32 cqe_byte_4;
298− union {
299− __le32 r_key;
300− __le32 immediate_data;
301− };
302− __le32 byte_cnt;
303− __le32 cqe_byte_16;
304− __le32 cqe_byte_20;
305− __le32 s_mac_l;
306− __le32 cqe_byte_28;
307− __le32 reserved;
308−};
309−
310−#define CQE_BYTE_4_OWNER_S 7
311−#define CQE_BYTE_4_SQ_RQ_FLAG_S 14
312−
313−#define CQE_BYTE_4_STATUS_OF_THE_OPERATION_S 8
314−#define CQE_BYTE_4_STATUS_OF_THE_OPERATION_M \
315− (((1UL << 5) - 1) << CQE_BYTE_4_STATUS_OF_THE_OPERATION_S)
316−
317−#define CQE_BYTE_4_WQE_INDEX_S 16
318−#define CQE_BYTE_4_WQE_INDEX_M (((1UL << 14) - 1) << CQE_BYTE_4_WQE_INDEX_S)
319−
320−#define CQE_BYTE_4_OPERATION_TYPE_S 0
321−#define CQE_BYTE_4_OPERATION_TYPE_M \
322− (((1UL << 4) - 1) << CQE_BYTE_4_OPERATION_TYPE_S)
323−
324−#define CQE_BYTE_4_IMM_INDICATOR_S 15
325−
326−#define CQE_BYTE_16_LOCAL_QPN_S 0
327−#define CQE_BYTE_16_LOCAL_QPN_M (((1UL << 24) - 1) << CQE_BYTE_16_LOCAL_QPN_S)
328−
329−#define CQE_BYTE_20_PORT_NUM_S 26
330−#define CQE_BYTE_20_PORT_NUM_M (((1UL << 3) - 1) << CQE_BYTE_20_PORT_NUM_S)
331−
332−#define CQE_BYTE_20_SL_S 24
333−#define CQE_BYTE_20_SL_M (((1UL << 2) - 1) << CQE_BYTE_20_SL_S)
334−
335−#define CQE_BYTE_20_REMOTE_QPN_S 0
336−#define CQE_BYTE_20_REMOTE_QPN_M \
337− (((1UL << 24) - 1) << CQE_BYTE_20_REMOTE_QPN_S)
338−
339−#define CQE_BYTE_20_GRH_PRESENT_S 29
340−
341−#define CQE_BYTE_28_P_KEY_IDX_S 16
342−#define CQE_BYTE_28_P_KEY_IDX_M (((1UL << 16) - 1) << CQE_BYTE_28_P_KEY_IDX_S)
343−
344−#define CQ_DB_REQ_NOT_SOL 0
345−#define CQ_DB_REQ_NOT (1 << 16)
346−
347−struct hns_roce_v1_mpt_entry {
348− __le32 mpt_byte_4;
349− __le32 pbl_addr_l;
350− __le32 mpt_byte_12;
351− __le32 virt_addr_l;
352− __le32 virt_addr_h;
353− __le32 length;
354− __le32 mpt_byte_28;
355− __le32 pa0_l;
356− __le32 mpt_byte_36;
357− __le32 mpt_byte_40;
358− __le32 mpt_byte_44;
359− __le32 mpt_byte_48;
360− __le32 pa4_l;
361− __le32 mpt_byte_56;
362− __le32 mpt_byte_60;
363− __le32 mpt_byte_64;
364−};
365−
366−#define MPT_BYTE_4_KEY_STATE_S 0
367−#define MPT_BYTE_4_KEY_STATE_M (((1UL << 2) - 1) << MPT_BYTE_4_KEY_STATE_S)
368−
369−#define MPT_BYTE_4_KEY_S 8
370−#define MPT_BYTE_4_KEY_M (((1UL << 8) - 1) << MPT_BYTE_4_KEY_S)
371−
372−#define MPT_BYTE_4_PAGE_SIZE_S 16
373−#define MPT_BYTE_4_PAGE_SIZE_M (((1UL << 2) - 1) << MPT_BYTE_4_PAGE_SIZE_S)
374−
375−#define MPT_BYTE_4_MW_TYPE_S 20
376−
377−#define MPT_BYTE_4_MW_BIND_ENABLE_S 21
378−
379−#define MPT_BYTE_4_OWN_S 22
380−
381−#define MPT_BYTE_4_MEMORY_LOCATION_TYPE_S 24
382−#define MPT_BYTE_4_MEMORY_LOCATION_TYPE_M \
383− (((1UL << 2) - 1) << MPT_BYTE_4_MEMORY_LOCATION_TYPE_S)
384−
385−#define MPT_BYTE_4_REMOTE_ATOMIC_S 26
386−#define MPT_BYTE_4_LOCAL_WRITE_S 27
387−#define MPT_BYTE_4_REMOTE_WRITE_S 28
388−#define MPT_BYTE_4_REMOTE_READ_S 29
389−#define MPT_BYTE_4_REMOTE_INVAL_ENABLE_S 30
390−#define MPT_BYTE_4_ADDRESS_TYPE_S 31
391−
392−#define MPT_BYTE_12_PBL_ADDR_H_S 0
393−#define MPT_BYTE_12_PBL_ADDR_H_M \
394− (((1UL << 17) - 1) << MPT_BYTE_12_PBL_ADDR_H_S)
395−
396−#define MPT_BYTE_12_MW_BIND_COUNTER_S 17
397−#define MPT_BYTE_12_MW_BIND_COUNTER_M \
398− (((1UL << 15) - 1) << MPT_BYTE_12_MW_BIND_COUNTER_S)
399−
400−#define MPT_BYTE_28_PD_S 0
401−#define MPT_BYTE_28_PD_M (((1UL << 16) - 1) << MPT_BYTE_28_PD_S)
402−
403−#define MPT_BYTE_28_L_KEY_IDX_L_S 16
404−#define MPT_BYTE_28_L_KEY_IDX_L_M \
405− (((1UL << 16) - 1) << MPT_BYTE_28_L_KEY_IDX_L_S)
406−
407−#define MPT_BYTE_36_PA0_H_S 0
408−#define MPT_BYTE_36_PA0_H_M (((1UL << 5) - 1) << MPT_BYTE_36_PA0_H_S)
409−
410−#define MPT_BYTE_36_PA1_L_S 8
411−#define MPT_BYTE_36_PA1_L_M (((1UL << 24) - 1) << MPT_BYTE_36_PA1_L_S)
412−
413−#define MPT_BYTE_40_PA1_H_S 0
414−#define MPT_BYTE_40_PA1_H_M (((1UL << 13) - 1) << MPT_BYTE_40_PA1_H_S)
415−
416−#define MPT_BYTE_40_PA2_L_S 16
417−#define MPT_BYTE_40_PA2_L_M (((1UL << 16) - 1) << MPT_BYTE_40_PA2_L_S)
418−
419−#define MPT_BYTE_44_PA2_H_S 0
420−#define MPT_BYTE_44_PA2_H_M (((1UL << 21) - 1) << MPT_BYTE_44_PA2_H_S)
421−
422−#define MPT_BYTE_44_PA3_L_S 24
423−#define MPT_BYTE_44_PA3_L_M (((1UL << 8) - 1) << MPT_BYTE_44_PA3_L_S)
424−
425−#define MPT_BYTE_48_PA3_H_S 0
426−#define MPT_BYTE_48_PA3_H_M (((1UL << 29) - 1) << MPT_BYTE_48_PA3_H_S)
427−
428−#define MPT_BYTE_56_PA4_H_S 0
429−#define MPT_BYTE_56_PA4_H_M (((1UL << 5) - 1) << MPT_BYTE_56_PA4_H_S)
430−
431−#define MPT_BYTE_56_PA5_L_S 8
432−#define MPT_BYTE_56_PA5_L_M (((1UL << 24) - 1) << MPT_BYTE_56_PA5_L_S)
433−
434−#define MPT_BYTE_60_PA5_H_S 0
435−#define MPT_BYTE_60_PA5_H_M (((1UL << 13) - 1) << MPT_BYTE_60_PA5_H_S)
436−
437−#define MPT_BYTE_60_PA6_L_S 16
438−#define MPT_BYTE_60_PA6_L_M (((1UL << 16) - 1) << MPT_BYTE_60_PA6_L_S)
439−
440−#define MPT_BYTE_64_PA6_H_S 0
441−#define MPT_BYTE_64_PA6_H_M (((1UL << 21) - 1) << MPT_BYTE_64_PA6_H_S)
442−
443−#define MPT_BYTE_64_L_KEY_IDX_H_S 24
444−#define MPT_BYTE_64_L_KEY_IDX_H_M \
445− (((1UL << 8) - 1) << MPT_BYTE_64_L_KEY_IDX_H_S)
446−
447−struct hns_roce_wqe_ctrl_seg {
448− __le32 sgl_pa_h;
449− __le32 flag;
450− union {
451− __be32 imm_data;
452− __le32 inv_key;
453− };
454− __le32 msg_length;
455−};
456−
457−struct hns_roce_wqe_data_seg {
458− __le64 addr;
459− __le32 lkey;
460− __le32 len;
461−};
462−
463−struct hns_roce_wqe_raddr_seg {
464− __le32 rkey;
465− __le32 len; /* reserved */
466− __le64 raddr;
467−};
468−
469−struct hns_roce_rq_wqe_ctrl {
470− __le32 rwqe_byte_4;
471− __le32 rocee_sgl_ba_l;
472− __le32 rwqe_byte_12;
473− __le32 reserved[5];
474−};
475−
476−#define RQ_WQE_CTRL_RWQE_BYTE_12_RWQE_SGE_NUM_S 16
477−#define RQ_WQE_CTRL_RWQE_BYTE_12_RWQE_SGE_NUM_M \
478− (((1UL << 6) - 1) << RQ_WQE_CTRL_RWQE_BYTE_12_RWQE_SGE_NUM_S)
479−
480−#define HNS_ROCE_QP_DESTROY_TIMEOUT_MSECS 10000
481−
482−#define GID_LEN 16
483−
484−struct hns_roce_ud_send_wqe {
485− __le32 dmac_h;
486− __le32 u32_8;
487− __le32 immediate_data;
488−
489− __le32 u32_16;
490− union {
491− unsigned char dgid[GID_LEN];
492− struct {
493− __le32 u32_20;
494− __le32 u32_24;
495− __le32 u32_28;
496− __le32 u32_32;
497− };
498− };
499−
500− __le32 u32_36;
501− __le32 u32_40;
502−
503− __le32 va0_l;
504− __le32 va0_h;
505− __le32 l_key0;
506−
507− __le32 va1_l;
508− __le32 va1_h;
509− __le32 l_key1;
510−};
511−
512−#define UD_SEND_WQE_U32_4_DMAC_0_S 0
513−#define UD_SEND_WQE_U32_4_DMAC_0_M \
514− (((1UL << 8) - 1) << UD_SEND_WQE_U32_4_DMAC_0_S)
515−
516−#define UD_SEND_WQE_U32_4_DMAC_1_S 8
517−#define UD_SEND_WQE_U32_4_DMAC_1_M \
518− (((1UL << 8) - 1) << UD_SEND_WQE_U32_4_DMAC_1_S)
519−
520−#define UD_SEND_WQE_U32_4_DMAC_2_S 16
521−#define UD_SEND_WQE_U32_4_DMAC_2_M \
522− (((1UL << 8) - 1) << UD_SEND_WQE_U32_4_DMAC_2_S)
523−
524−#define UD_SEND_WQE_U32_4_DMAC_3_S 24
525−#define UD_SEND_WQE_U32_4_DMAC_3_M \
526− (((1UL << 8) - 1) << UD_SEND_WQE_U32_4_DMAC_3_S)
527−
528−#define UD_SEND_WQE_U32_8_DMAC_4_S 0
529−#define UD_SEND_WQE_U32_8_DMAC_4_M \
530− (((1UL << 8) - 1) << UD_SEND_WQE_U32_8_DMAC_4_S)
531−
532−#define UD_SEND_WQE_U32_8_DMAC_5_S 8
533−#define UD_SEND_WQE_U32_8_DMAC_5_M \
534− (((1UL << 8) - 1) << UD_SEND_WQE_U32_8_DMAC_5_S)
535−
536−#define UD_SEND_WQE_U32_8_LOOPBACK_INDICATOR_S 22
537−
538−#define UD_SEND_WQE_U32_8_OPERATION_TYPE_S 16
539−#define UD_SEND_WQE_U32_8_OPERATION_TYPE_M \
540− (((1UL << 4) - 1) << UD_SEND_WQE_U32_8_OPERATION_TYPE_S)
541−
542−#define UD_SEND_WQE_U32_8_NUMBER_OF_DATA_SEG_S 24
543−#define UD_SEND_WQE_U32_8_NUMBER_OF_DATA_SEG_M \
544− (((1UL << 6) - 1) << UD_SEND_WQE_U32_8_NUMBER_OF_DATA_SEG_S)
545−
546−#define UD_SEND_WQE_U32_8_SEND_GL_ROUTING_HDR_FLAG_S 31
547−
548−#define UD_SEND_WQE_U32_16_DEST_QP_S 0
549−#define UD_SEND_WQE_U32_16_DEST_QP_M \
550− (((1UL << 24) - 1) << UD_SEND_WQE_U32_16_DEST_QP_S)
551−
552−#define UD_SEND_WQE_U32_16_MAX_STATIC_RATE_S 24
553−#define UD_SEND_WQE_U32_16_MAX_STATIC_RATE_M \
554− (((1UL << 8) - 1) << UD_SEND_WQE_U32_16_MAX_STATIC_RATE_S)
555−
556−#define UD_SEND_WQE_U32_36_FLOW_LABEL_S 0
557−#define UD_SEND_WQE_U32_36_FLOW_LABEL_M \
558− (((1UL << 20) - 1) << UD_SEND_WQE_U32_36_FLOW_LABEL_S)
559−
560−#define UD_SEND_WQE_U32_36_PRIORITY_S 20
561−#define UD_SEND_WQE_U32_36_PRIORITY_M \
562− (((1UL << 4) - 1) << UD_SEND_WQE_U32_36_PRIORITY_S)
563−
564−#define UD_SEND_WQE_U32_36_SGID_INDEX_S 24
565−#define UD_SEND_WQE_U32_36_SGID_INDEX_M \
566− (((1UL << 8) - 1) << UD_SEND_WQE_U32_36_SGID_INDEX_S)
567−
568−#define UD_SEND_WQE_U32_40_HOP_LIMIT_S 0
569−#define UD_SEND_WQE_U32_40_HOP_LIMIT_M \
570− (((1UL << 8) - 1) << UD_SEND_WQE_U32_40_HOP_LIMIT_S)
571−
572−#define UD_SEND_WQE_U32_40_TRAFFIC_CLASS_S 8
573−#define UD_SEND_WQE_U32_40_TRAFFIC_CLASS_M \
574− (((1UL << 8) - 1) << UD_SEND_WQE_U32_40_TRAFFIC_CLASS_S)
575−
576−struct hns_roce_sqp_context {
577− __le32 qp1c_bytes_4;
578− __le32 sq_rq_bt_l;
579− __le32 qp1c_bytes_12;
580− __le32 qp1c_bytes_16;
581− __le32 qp1c_bytes_20;
582− __le32 cur_rq_wqe_ba_l;
583− __le32 qp1c_bytes_28;
584− __le32 qp1c_bytes_32;
585− __le32 cur_sq_wqe_ba_l;
586− __le32 qp1c_bytes_40;
587−};
588−
589−#define QP1C_BYTES_4_QP_STATE_S 0
590−#define QP1C_BYTES_4_QP_STATE_M \
591− (((1UL << 3) - 1) << QP1C_BYTES_4_QP_STATE_S)
592−
593−#define QP1C_BYTES_4_SQ_WQE_SHIFT_S 8
594−#define QP1C_BYTES_4_SQ_WQE_SHIFT_M \
595− (((1UL << 4) - 1) << QP1C_BYTES_4_SQ_WQE_SHIFT_S)
596−
597−#define QP1C_BYTES_4_RQ_WQE_SHIFT_S 12
598−#define QP1C_BYTES_4_RQ_WQE_SHIFT_M \
599− (((1UL << 4) - 1) << QP1C_BYTES_4_RQ_WQE_SHIFT_S)
600−
601−#define QP1C_BYTES_4_PD_S 16
602−#define QP1C_BYTES_4_PD_M (((1UL << 16) - 1) << QP1C_BYTES_4_PD_S)
603−
604−#define QP1C_BYTES_12_SQ_RQ_BT_H_S 0
605−#define QP1C_BYTES_12_SQ_RQ_BT_H_M \
606− (((1UL << 17) - 1) << QP1C_BYTES_12_SQ_RQ_BT_H_S)
607−
608−#define QP1C_BYTES_16_RQ_HEAD_S 0
609−#define QP1C_BYTES_16_RQ_HEAD_M (((1UL << 15) - 1) << QP1C_BYTES_16_RQ_HEAD_S)
610−
611−#define QP1C_BYTES_16_PORT_NUM_S 16
612−#define QP1C_BYTES_16_PORT_NUM_M \
613− (((1UL << 3) - 1) << QP1C_BYTES_16_PORT_NUM_S)
614−
615−#define QP1C_BYTES_16_SIGNALING_TYPE_S 27
616−#define QP1C_BYTES_16_LOCAL_ENABLE_E2E_CREDIT_S 28
617−#define QP1C_BYTES_16_RQ_BA_FLG_S 29
618−#define QP1C_BYTES_16_SQ_BA_FLG_S 30
619−#define QP1C_BYTES_16_QP1_ERR_S 31
620−
621−#define QP1C_BYTES_20_SQ_HEAD_S 0
622−#define QP1C_BYTES_20_SQ_HEAD_M (((1UL << 15) - 1) << QP1C_BYTES_20_SQ_HEAD_S)
623−
624−#define QP1C_BYTES_20_PKEY_IDX_S 16
625−#define QP1C_BYTES_20_PKEY_IDX_M \
626− (((1UL << 16) - 1) << QP1C_BYTES_20_PKEY_IDX_S)
627−
628−#define QP1C_BYTES_28_CUR_RQ_WQE_BA_H_S 0
629−#define QP1C_BYTES_28_CUR_RQ_WQE_BA_H_M \
630− (((1UL << 5) - 1) << QP1C_BYTES_28_CUR_RQ_WQE_BA_H_S)
631−
632−#define QP1C_BYTES_28_RQ_CUR_IDX_S 16
633−#define QP1C_BYTES_28_RQ_CUR_IDX_M \
634− (((1UL << 15) - 1) << QP1C_BYTES_28_RQ_CUR_IDX_S)
635−
636−#define QP1C_BYTES_32_TX_CQ_NUM_S 0
637−#define QP1C_BYTES_32_TX_CQ_NUM_M \
638− (((1UL << 16) - 1) << QP1C_BYTES_32_TX_CQ_NUM_S)
639−
640−#define QP1C_BYTES_32_RX_CQ_NUM_S 16
641−#define QP1C_BYTES_32_RX_CQ_NUM_M \
642− (((1UL << 16) - 1) << QP1C_BYTES_32_RX_CQ_NUM_S)
643−
644−#define QP1C_BYTES_40_CUR_SQ_WQE_BA_H_S 0
645−#define QP1C_BYTES_40_CUR_SQ_WQE_BA_H_M \
646− (((1UL << 5) - 1) << QP1C_BYTES_40_CUR_SQ_WQE_BA_H_S)
647−
648−#define QP1C_BYTES_40_SQ_CUR_IDX_S 16
649−#define QP1C_BYTES_40_SQ_CUR_IDX_M \
650− (((1UL << 15) - 1) << QP1C_BYTES_40_SQ_CUR_IDX_S)
651−
652−#define HNS_ROCE_WQE_INLINE (1UL<<31)
653−#define HNS_ROCE_WQE_SE (1UL<<30)
654−
655−#define HNS_ROCE_WQE_SGE_NUM_BIT 24
656−#define HNS_ROCE_WQE_IMM (1UL<<23)
657−#define HNS_ROCE_WQE_FENCE (1UL<<21)
658−#define HNS_ROCE_WQE_CQ_NOTIFY (1UL<<20)
659−
660−#define HNS_ROCE_WQE_OPCODE_SEND (0<<16)
661−#define HNS_ROCE_WQE_OPCODE_RDMA_READ (1<<16)
662−#define HNS_ROCE_WQE_OPCODE_RDMA_WRITE (2<<16)
663−#define HNS_ROCE_WQE_OPCODE_LOCAL_INV (4<<16)
664−#define HNS_ROCE_WQE_OPCODE_UD_SEND (7<<16)
665−#define HNS_ROCE_WQE_OPCODE_MASK (15<<16)
666−
667−struct hns_roce_qp_context {
668− __le32 qpc_bytes_4;
669− __le32 qpc_bytes_8;
670− __le32 qpc_bytes_12;
671− __le32 qpc_bytes_16;
672− __le32 sq_rq_bt_l;
673− __le32 qpc_bytes_24;
674− __le32 irrl_ba_l;
675− __le32 qpc_bytes_32;
676− __le32 qpc_bytes_36;
677− __le32 dmac_l;
678− __le32 qpc_bytes_44;
679− __le32 qpc_bytes_48;
680− u8 dgid[16];
681− __le32 qpc_bytes_68;
682− __le32 cur_rq_wqe_ba_l;
683− __le32 qpc_bytes_76;
684− __le32 rx_rnr_time;
685− __le32 qpc_bytes_84;
686− __le32 qpc_bytes_88;
687− union {
688− __le32 rx_sge_len;
689− __le32 dma_length;
690− };
691− union {
692− __le32 rx_sge_num;
693− __le32 rx_send_pktn;
694− __le32 r_key;
695− };
696− __le32 va_l;
697− __le32 va_h;
698− __le32 qpc_bytes_108;
699− __le32 qpc_bytes_112;
700− __le32 rx_cur_sq_wqe_ba_l;
701− __le32 qpc_bytes_120;
702− __le32 qpc_bytes_124;
703− __le32 qpc_bytes_128;
704− __le32 qpc_bytes_132;
705− __le32 qpc_bytes_136;
706− __le32 qpc_bytes_140;
707− __le32 qpc_bytes_144;
708− __le32 qpc_bytes_148;
709− union {
710− __le32 rnr_retry;
711− __le32 ack_time;
712− };
713− __le32 qpc_bytes_156;
714− __le32 pkt_use_len;
715− __le32 qpc_bytes_164;
716− __le32 qpc_bytes_168;
717− union {
718− __le32 sge_use_len;
719− __le32 pa_use_len;
720− };
721− __le32 qpc_bytes_176;
722− __le32 qpc_bytes_180;
723− __le32 tx_cur_sq_wqe_ba_l;
724− __le32 qpc_bytes_188;
725− __le32 rvd21;
726−};
727−
728−#define QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_S 0
729−#define QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_M \
730− (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_S)
731−
732−#define QP_CONTEXT_QPC_BYTE_4_ENABLE_FPMR_S 3
733−#define QP_CONTEXT_QPC_BYTE_4_RDMA_READ_ENABLE_S 4
734−#define QP_CONTEXT_QPC_BYTE_4_RDMA_WRITE_ENABLE_S 5
735−#define QP_CONTEXT_QPC_BYTE_4_ATOMIC_OPERATION_ENABLE_S 6
736−#define QP_CONTEXT_QPC_BYTE_4_RDMAR_USE_S 7
737−
738−#define QP_CONTEXT_QPC_BYTES_4_SQ_WQE_SHIFT_S 8
739−#define QP_CONTEXT_QPC_BYTES_4_SQ_WQE_SHIFT_M \
740− (((1UL << 4) - 1) << QP_CONTEXT_QPC_BYTES_4_SQ_WQE_SHIFT_S)
741−
742−#define QP_CONTEXT_QPC_BYTES_4_RQ_WQE_SHIFT_S 12
743−#define QP_CONTEXT_QPC_BYTES_4_RQ_WQE_SHIFT_M \
744− (((1UL << 4) - 1) << QP_CONTEXT_QPC_BYTES_4_RQ_WQE_SHIFT_S)
745−
746−#define QP_CONTEXT_QPC_BYTES_4_PD_S 16
747−#define QP_CONTEXT_QPC_BYTES_4_PD_M \
748− (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_4_PD_S)
749−
750−#define QP_CONTEXT_QPC_BYTES_8_TX_COMPLETION_S 0
751−#define QP_CONTEXT_QPC_BYTES_8_TX_COMPLETION_M \
752− (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_8_TX_COMPLETION_S)
753−
754−#define QP_CONTEXT_QPC_BYTES_8_RX_COMPLETION_S 16
755−#define QP_CONTEXT_QPC_BYTES_8_RX_COMPLETION_M \
756− (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_8_RX_COMPLETION_S)
757−
758−#define QP_CONTEXT_QPC_BYTES_12_SRQ_NUMBER_S 0
759−#define QP_CONTEXT_QPC_BYTES_12_SRQ_NUMBER_M \
760− (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_12_SRQ_NUMBER_S)
761−
762−#define QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_S 16
763−#define QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_M \
764− (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_S)
765−
766−#define QP_CONTEXT_QPC_BYTES_16_QP_NUM_S 0
767−#define QP_CONTEXT_QPC_BYTES_16_QP_NUM_M \
768− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_16_QP_NUM_S)
769−
770−#define QP_CONTEXT_QPC_BYTES_24_SQ_RQ_BT_H_S 0
771−#define QP_CONTEXT_QPC_BYTES_24_SQ_RQ_BT_H_M \
772− (((1UL << 17) - 1) << QP_CONTEXT_QPC_BYTES_24_SQ_RQ_BT_H_S)
773−
774−#define QP_CONTEXT_QPC_BYTES_24_MINIMUM_RNR_NAK_TIMER_S 18
775−#define QP_CONTEXT_QPC_BYTES_24_MINIMUM_RNR_NAK_TIMER_M \
776− (((1UL << 5) - 1) << QP_CONTEXT_QPC_BYTES_24_MINIMUM_RNR_NAK_TIMER_S)
777−
778−#define QP_CONTEXT_QPC_BYTE_24_REMOTE_ENABLE_E2E_CREDITS_S 23
779−
780−#define QP_CONTEXT_QPC_BYTES_32_IRRL_BA_H_S 0
781−#define QP_CONTEXT_QPC_BYTES_32_IRRL_BA_H_M \
782− (((1UL << 17) - 1) << QP_CONTEXT_QPC_BYTES_32_IRRL_BA_H_S)
783−
784−#define QP_CONTEXT_QPC_BYTES_32_MIG_STATE_S 18
785−#define QP_CONTEXT_QPC_BYTES_32_MIG_STATE_M \
786− (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_32_MIG_STATE_S)
787−
788−#define QP_CONTEXT_QPC_BYTE_32_LOCAL_ENABLE_E2E_CREDITS_S 20
789−#define QP_CONTEXT_QPC_BYTE_32_SIGNALING_TYPE_S 21
790−#define QP_CONTEXT_QPC_BYTE_32_LOOPBACK_INDICATOR_S 22
791−#define QP_CONTEXT_QPC_BYTE_32_GLOBAL_HEADER_S 23
792−
793−#define QP_CONTEXT_QPC_BYTES_32_RESPONDER_RESOURCES_S 24
794−#define QP_CONTEXT_QPC_BYTES_32_RESPONDER_RESOURCES_M \
795− (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_32_RESPONDER_RESOURCES_S)
796−
797−#define QP_CONTEXT_QPC_BYTES_36_DEST_QP_S 0
798−#define QP_CONTEXT_QPC_BYTES_36_DEST_QP_M \
799− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_36_DEST_QP_S)
800−
801−#define QP_CONTEXT_QPC_BYTES_36_SGID_INDEX_S 24
802−#define QP_CONTEXT_QPC_BYTES_36_SGID_INDEX_M \
803− (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_36_SGID_INDEX_S)
804−
805−#define QP_CONTEXT_QPC_BYTES_44_DMAC_H_S 0
806−#define QP_CONTEXT_QPC_BYTES_44_DMAC_H_M \
807− (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_44_DMAC_H_S)
808−
809−#define QP_CONTEXT_QPC_BYTES_44_MAXIMUM_STATIC_RATE_S 16
810−#define QP_CONTEXT_QPC_BYTES_44_MAXIMUM_STATIC_RATE_M \
811− (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_44_MAXIMUM_STATIC_RATE_S)
812−
813−#define QP_CONTEXT_QPC_BYTES_44_HOPLMT_S 24
814−#define QP_CONTEXT_QPC_BYTES_44_HOPLMT_M \
815− (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_44_HOPLMT_S)
816−
817−#define QP_CONTEXT_QPC_BYTES_48_FLOWLABEL_S 0
818−#define QP_CONTEXT_QPC_BYTES_48_FLOWLABEL_M \
819− (((1UL << 20) - 1) << QP_CONTEXT_QPC_BYTES_48_FLOWLABEL_S)
820−
821−#define QP_CONTEXT_QPC_BYTES_48_TCLASS_S 20
822−#define QP_CONTEXT_QPC_BYTES_48_TCLASS_M \
823− (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_48_TCLASS_S)
824−
825−#define QP_CONTEXT_QPC_BYTES_48_MTU_S 28
826−#define QP_CONTEXT_QPC_BYTES_48_MTU_M \
827− (((1UL << 4) - 1) << QP_CONTEXT_QPC_BYTES_48_MTU_S)
828−
829−#define QP_CONTEXT_QPC_BYTES_68_RQ_HEAD_S 0
830−#define QP_CONTEXT_QPC_BYTES_68_RQ_HEAD_M \
831− (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_68_RQ_HEAD_S)
832−
833−#define QP_CONTEXT_QPC_BYTES_68_RQ_CUR_INDEX_S 16
834−#define QP_CONTEXT_QPC_BYTES_68_RQ_CUR_INDEX_M \
835− (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_68_RQ_CUR_INDEX_S)
836−
837−#define QP_CONTEXT_QPC_BYTES_76_CUR_RQ_WQE_BA_H_S 0
838−#define QP_CONTEXT_QPC_BYTES_76_CUR_RQ_WQE_BA_H_M \
839− (((1UL << 5) - 1) << QP_CONTEXT_QPC_BYTES_76_CUR_RQ_WQE_BA_H_S)
840−
841−#define QP_CONTEXT_QPC_BYTES_76_RX_REQ_MSN_S 8
842−#define QP_CONTEXT_QPC_BYTES_76_RX_REQ_MSN_M \
843− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_76_RX_REQ_MSN_S)
844−
845−#define QP_CONTEXT_QPC_BYTES_84_LAST_ACK_PSN_S 0
846−#define QP_CONTEXT_QPC_BYTES_84_LAST_ACK_PSN_M \
847− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_84_LAST_ACK_PSN_S)
848−
849−#define QP_CONTEXT_QPC_BYTES_84_TRRL_HEAD_S 24
850−#define QP_CONTEXT_QPC_BYTES_84_TRRL_HEAD_M \
851− (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_84_TRRL_HEAD_S)
852−
853−#define QP_CONTEXT_QPC_BYTES_88_RX_REQ_EPSN_S 0
854−#define QP_CONTEXT_QPC_BYTES_88_RX_REQ_EPSN_M \
855− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_88_RX_REQ_EPSN_S)
856−
857−#define QP_CONTEXT_QPC_BYTES_88_RX_REQ_PSN_ERR_FLAG_S 24
858−#define QP_CONTEXT_QPC_BYTES_88_RX_LAST_OPCODE_FLG_S 25
859−
860−#define QP_CONTEXT_QPC_BYTES_88_RQ_REQ_LAST_OPERATION_TYPE_S 26
861−#define QP_CONTEXT_QPC_BYTES_88_RQ_REQ_LAST_OPERATION_TYPE_M \
862− (((1UL << 2) - 1) << \
863− QP_CONTEXT_QPC_BYTES_88_RQ_REQ_LAST_OPERATION_TYPE_S)
864−
865−#define QP_CONTEXT_QPC_BYTES_88_RQ_REQ_RDMA_WR_FLAG_S 29
866−#define QP_CONTEXT_QPC_BYTES_88_RQ_REQ_RDMA_WR_FLAG_M \
867− (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_88_RQ_REQ_RDMA_WR_FLAG_S)
868−
869−#define QP_CONTEXT_QPC_BYTES_108_TRRL_SDB_PSN_S 0
870−#define QP_CONTEXT_QPC_BYTES_108_TRRL_SDB_PSN_M \
871− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_108_TRRL_SDB_PSN_S)
872−
873−#define QP_CONTEXT_QPC_BYTES_108_TRRL_SDB_PSN_FLG_S 24
874−#define QP_CONTEXT_QPC_BYTES_108_TRRL_TDB_PSN_FLG_S 25
875−
876−#define QP_CONTEXT_QPC_BYTES_112_TRRL_TDB_PSN_S 0
877−#define QP_CONTEXT_QPC_BYTES_112_TRRL_TDB_PSN_M \
878− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_112_TRRL_TDB_PSN_S)
879−
880−#define QP_CONTEXT_QPC_BYTES_112_TRRL_TAIL_S 24
881−#define QP_CONTEXT_QPC_BYTES_112_TRRL_TAIL_M \
882− (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_112_TRRL_TAIL_S)
883−
884−#define QP_CONTEXT_QPC_BYTES_120_RX_CUR_SQ_WQE_BA_H_S 0
885−#define QP_CONTEXT_QPC_BYTES_120_RX_CUR_SQ_WQE_BA_H_M \
886− (((1UL << 5) - 1) << QP_CONTEXT_QPC_BYTES_120_RX_CUR_SQ_WQE_BA_H_S)
887−
888−#define QP_CONTEXT_QPC_BYTES_124_RX_ACK_MSN_S 0
889−#define QP_CONTEXT_QPC_BYTES_124_RX_ACK_MSN_M \
890− (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_124_RX_ACK_MSN_S)
891−
892−#define QP_CONTEXT_QPC_BYTES_124_IRRL_MSG_IDX_S 16
893−#define QP_CONTEXT_QPC_BYTES_124_IRRL_MSG_IDX_M \
894− (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_124_IRRL_MSG_IDX_S)
895−
896−#define QP_CONTEXT_QPC_BYTES_128_RX_ACK_EPSN_S 0
897−#define QP_CONTEXT_QPC_BYTES_128_RX_ACK_EPSN_M \
898− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_128_RX_ACK_EPSN_S)
899−
900−#define QP_CONTEXT_QPC_BYTES_128_RX_ACK_PSN_ERR_FLG_S 24
901−
902−#define QP_CONTEXT_QPC_BYTES_128_ACK_LAST_OPERATION_TYPE_S 25
903−#define QP_CONTEXT_QPC_BYTES_128_ACK_LAST_OPERATION_TYPE_M \
904− (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_128_ACK_LAST_OPERATION_TYPE_S)
905−
906−#define QP_CONTEXT_QPC_BYTES_128_IRRL_PSN_VLD_FLG_S 27
907−
908−#define QP_CONTEXT_QPC_BYTES_132_IRRL_PSN_S 0
909−#define QP_CONTEXT_QPC_BYTES_132_IRRL_PSN_M \
910− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_132_IRRL_PSN_S)
911−
912−#define QP_CONTEXT_QPC_BYTES_132_IRRL_TAIL_S 24
913−#define QP_CONTEXT_QPC_BYTES_132_IRRL_TAIL_M \
914− (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_132_IRRL_TAIL_S)
915−
916−#define QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_PSN_S 0
917−#define QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_PSN_M \
918− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_PSN_S)
919−
920−#define QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_FPKT_PSN_L_S 24
921−#define QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_FPKT_PSN_L_M \
922− (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_FPKT_PSN_L_S)
923−
924−#define QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_FPKT_PSN_H_S 0
925−#define QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_FPKT_PSN_H_M \
926− (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_FPKT_PSN_H_S)
927−
928−#define QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_MSN_S 16
929−#define QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_MSN_M \
930− (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_MSN_S)
931−
932−#define QP_CONTEXT_QPC_BYTES_140_RNR_RETRY_FLG_S 31
933−
934−#define QP_CONTEXT_QPC_BYTES_144_QP_STATE_S 0
935−#define QP_CONTEXT_QPC_BYTES_144_QP_STATE_M \
936− (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_144_QP_STATE_S)
937−
938−#define QP_CONTEXT_QPC_BYTES_148_CHECK_FLAG_S 0
939−#define QP_CONTEXT_QPC_BYTES_148_CHECK_FLAG_M \
940− (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_148_CHECK_FLAG_S)
941−
942−#define QP_CONTEXT_QPC_BYTES_148_RETRY_COUNT_S 2
943−#define QP_CONTEXT_QPC_BYTES_148_RETRY_COUNT_M \
944− (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_148_RETRY_COUNT_S)
945−
946−#define QP_CONTEXT_QPC_BYTES_148_RNR_RETRY_COUNT_S 5
947−#define QP_CONTEXT_QPC_BYTES_148_RNR_RETRY_COUNT_M \
948− (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_148_RNR_RETRY_COUNT_S)
949−
950−#define QP_CONTEXT_QPC_BYTES_148_LSN_S 8
951−#define QP_CONTEXT_QPC_BYTES_148_LSN_M \
952− (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_148_LSN_S)
953−
954−#define QP_CONTEXT_QPC_BYTES_156_RETRY_COUNT_INIT_S 0
955−#define QP_CONTEXT_QPC_BYTES_156_RETRY_COUNT_INIT_M \
956− (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_156_RETRY_COUNT_INIT_S)
957−
958−#define QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_S 3
959−#define QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_M \
960− (((1UL << 5) - 1) << QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_S)
961−
962−#define QP_CONTEXT_QPC_BYTES_156_RNR_RETRY_COUNT_INIT_S 8
963−#define QP_CONTEXT_QPC_BYTES_156_RNR_RETRY_COUNT_INIT_M \
964− (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_156_RNR_RETRY_COUNT_INIT_S)
965−
966−#define QP_CONTEXT_QPC_BYTES_156_PORT_NUM_S 11
967−#define QP_CONTEXT_QPC_BYTES_156_PORT_NUM_M \
968− (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_156_PORT_NUM_S)
969−
970−#define QP_CONTEXT_QPC_BYTES_156_SL_S 14
971−#define QP_CONTEXT_QPC_BYTES_156_SL_M \
972− (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_156_SL_S)
973−
974−#define QP_CONTEXT_QPC_BYTES_156_INITIATOR_DEPTH_S 16
975−#define QP_CONTEXT_QPC_BYTES_156_INITIATOR_DEPTH_M \
976− (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_156_INITIATOR_DEPTH_S)
977−
978−#define QP_CONTEXT_QPC_BYTES_156_ACK_REQ_IND_S 24
979−#define QP_CONTEXT_QPC_BYTES_156_ACK_REQ_IND_M \
980− (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_156_ACK_REQ_IND_S)
981−
982−#define QP_CONTEXT_QPC_BYTES_164_SQ_PSN_S 0
983−#define QP_CONTEXT_QPC_BYTES_164_SQ_PSN_M \
984− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_164_SQ_PSN_S)
985−
986−#define QP_CONTEXT_QPC_BYTES_164_IRRL_HEAD_S 24
987−#define QP_CONTEXT_QPC_BYTES_164_IRRL_HEAD_M \
988− (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_164_IRRL_HEAD_S)
989−
990−#define QP_CONTEXT_QPC_BYTES_168_RETRY_SQ_PSN_S 0
991−#define QP_CONTEXT_QPC_BYTES_168_RETRY_SQ_PSN_M \
992− (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_168_RETRY_SQ_PSN_S)
993−
994−#define QP_CONTEXT_QPC_BYTES_168_SGE_USE_FLA_S 24
995−#define QP_CONTEXT_QPC_BYTES_168_SGE_USE_FLA_M \
996− (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_168_SGE_USE_FLA_S)
997−
998−#define QP_CONTEXT_QPC_BYTES_168_DB_TYPE_S 26
999−#define QP_CONTEXT_QPC_BYTES_168_DB_TYPE_M \
1000− (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_168_DB_TYPE_S)
1001−
1002−#define QP_CONTEXT_QPC_BYTES_168_MSG_LP_IND_S 28
1003−#define QP_CONTEXT_QPC_BYTES_168_CSDB_LP_IND_S 29
1004−#define QP_CONTEXT_QPC_BYTES_168_QP_ERR_FLG_S 30
1005−
1006−#define QP_CONTEXT_QPC_BYTES_176_DB_CUR_INDEX_S 0
1007−#define QP_CONTEXT_QPC_BYTES_176_DB_CUR_INDEX_M \
1008− (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_176_DB_CUR_INDEX_S)
1009−
1010−#define QP_CONTEXT_QPC_BYTES_176_RETRY_DB_CUR_INDEX_S 16
1011−#define QP_CONTEXT_QPC_BYTES_176_RETRY_DB_CUR_INDEX_M \
1012− (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_176_RETRY_DB_CUR_INDEX_S)
1013−
1014−#define QP_CONTEXT_QPC_BYTES_180_SQ_HEAD_S 0
1015−#define QP_CONTEXT_QPC_BYTES_180_SQ_HEAD_M \
1016− (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_180_SQ_HEAD_S)
1017−
1018−#define QP_CONTEXT_QPC_BYTES_180_SQ_CUR_INDEX_S 16
1019−#define QP_CONTEXT_QPC_BYTES_180_SQ_CUR_INDEX_M \
1020− (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_180_SQ_CUR_INDEX_S)
1021−
1022−#define QP_CONTEXT_QPC_BYTES_188_TX_CUR_SQ_WQE_BA_H_S 0
1023−#define QP_CONTEXT_QPC_BYTES_188_TX_CUR_SQ_WQE_BA_H_M \
1024− (((1UL << 5) - 1) << QP_CONTEXT_QPC_BYTES_188_TX_CUR_SQ_WQE_BA_H_S)
1025−
1026−#define QP_CONTEXT_QPC_BYTES_188_PKT_RETRY_FLG_S 8
1027−
1028−#define QP_CONTEXT_QPC_BYTES_188_TX_RETRY_CUR_INDEX_S 16
1029−#define QP_CONTEXT_QPC_BYTES_188_TX_RETRY_CUR_INDEX_M \
1030− (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_188_TX_RETRY_CUR_INDEX_S)
1031−
1032−#define STATUS_MASK 0xff
1033−#define GO_BIT_TIMEOUT_MSECS 10000
1034−#define HCR_STATUS_OFFSET 0x18
1035−#define HCR_GO_BIT 15
1036−
1037−struct hns_roce_rq_db {
1038− __le32 u32_4;
1039− __le32 u32_8;
1040−};
1041−
1042−#define RQ_DOORBELL_U32_4_RQ_HEAD_S 0
1043−#define RQ_DOORBELL_U32_4_RQ_HEAD_M \
1044− (((1UL << 15) - 1) << RQ_DOORBELL_U32_4_RQ_HEAD_S)
1045−
1046−#define RQ_DOORBELL_U32_8_QPN_S 0
1047−#define RQ_DOORBELL_U32_8_QPN_M (((1UL << 24) - 1) << RQ_DOORBELL_U32_8_QPN_S)
1048−
1049−#define RQ_DOORBELL_U32_8_CMD_S 28
1050−#define RQ_DOORBELL_U32_8_CMD_M (((1UL << 3) - 1) << RQ_DOORBELL_U32_8_CMD_S)
1051−
1052−#define RQ_DOORBELL_U32_8_HW_SYNC_S 31
1053−
1054−struct hns_roce_sq_db {
1055− __le32 u32_4;
1056− __le32 u32_8;
1057−};
1058−
1059−#define SQ_DOORBELL_U32_4_SQ_HEAD_S 0
1060−#define SQ_DOORBELL_U32_4_SQ_HEAD_M \
1061− (((1UL << 15) - 1) << SQ_DOORBELL_U32_4_SQ_HEAD_S)
1062−
1063−#define SQ_DOORBELL_U32_4_SL_S 16
1064−#define SQ_DOORBELL_U32_4_SL_M \
1065− (((1UL << 2) - 1) << SQ_DOORBELL_U32_4_SL_S)
1066−
1067−#define SQ_DOORBELL_U32_4_PORT_S 18
1068−#define SQ_DOORBELL_U32_4_PORT_M (((1UL << 3) - 1) << SQ_DOORBELL_U32_4_PORT_S)
1069−
1070−#define SQ_DOORBELL_U32_8_QPN_S 0
1071−#define SQ_DOORBELL_U32_8_QPN_M (((1UL << 24) - 1) << SQ_DOORBELL_U32_8_QPN_S)
1072−
1073−#define SQ_DOORBELL_HW_SYNC_S 31
1074−
1075−struct hns_roce_ext_db {
1076− int esdb_dep;
1077− int eodb_dep;
1078− struct hns_roce_buf_list *sdb_buf_list;
1079− struct hns_roce_buf_list *odb_buf_list;
1080−};
1081−
1082−struct hns_roce_db_table {
1083− int sdb_ext_mod;
1084− int odb_ext_mod;
1085− struct hns_roce_ext_db *ext_db;
1086−};
1087−
1088−#define HW_SYNC_SLEEP_TIME_INTERVAL 20
1089−#define HW_SYNC_TIMEOUT_MSECS (25 * HW_SYNC_SLEEP_TIME_INTERVAL)
1090−#define BT_CMD_SYNC_SHIFT 31
1091−#define HNS_ROCE_BA_SIZE (32 * 4096)
1092−
1093−struct hns_roce_bt_table {
1094− struct hns_roce_buf_list qpc_buf;
1095− struct hns_roce_buf_list mtpt_buf;
1096− struct hns_roce_buf_list cqc_buf;
1097−};
1098−
1099−struct hns_roce_tptr_table {
1100− struct hns_roce_buf_list tptr_buf;
1101−};
1102−
1103−struct hns_roce_qp_work {
1104− struct work_struct work;
1105− struct ib_device *ib_dev;
1106− struct hns_roce_qp *qp;
1107− u32 db_wait_stage;
1108− u32 sdb_issue_ptr;
1109− u32 sdb_inv_cnt;
1110− u32 sche_cnt;
1111−};
1112−
1113−struct hns_roce_mr_free_work {
1114− struct work_struct work;
1115− struct ib_device *ib_dev;
1116− struct completion *comp;
1117− int comp_flag;
1118− void *mr;
1119−};
1120−
1121−struct hns_roce_recreate_lp_qp_work {
1122− struct work_struct work;
1123− struct ib_device *ib_dev;
1124− struct completion *comp;
1125− int comp_flag;
1126−};
1127−
1128−struct hns_roce_free_mr {
1129− struct workqueue_struct *free_mr_wq;
1130− struct hns_roce_qp *mr_free_qp[HNS_ROCE_V1_RESV_QP];
1131− struct hns_roce_cq *mr_free_cq;
1132− struct hns_roce_pd *mr_free_pd;
1133−};
1134−
1135−struct hns_roce_v1_priv {
1136− struct hns_roce_db_table db_table;
1137− struct hns_roce_raq_table raq_table;
1138− struct hns_roce_bt_table bt_table;
1139− struct hns_roce_tptr_table tptr_table;
1140− struct hns_roce_free_mr free_mr;
1141−};
1142−
1143−int hns_dsaf_roce_reset(struct fwnode_handle *dsaf_fwnode, bool dereset);
1144−int hns_roce_v1_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc);
1145−int hns_roce_v1_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata);
1146−
1147−#endif
drivers/infiniband/hw/hns/hns_roce_hw_v2.c+23−26
@@ -678,6 +678,7 @@ static void hns_roce_write512(struct hns_roce_dev *hr_dev, u64 *val, · 677 unmodified lines
678678 static void write_dwqe(struct hns_roce_dev *hr_dev, struct hns_roce_qp *qp,
679679 void *wqe)
680680 {
681+#define HNS_ROCE_SL_SHIFT 2
681682 struct hns_roce_v2_rc_send_wqe *rc_sq_wqe = wqe;
682683
683684 /* All kinds of DirectWQE have the same header field layout */
@@ -685,7 +686,8 @@ static void write_dwqe(struct hns_roce_dev *hr_dev, struct hns_roce_qp *qp, · 1 unmodified line
685686 roce_set_field(rc_sq_wqe->byte_4, V2_RC_SEND_WQE_BYTE_4_DB_SL_L_M,
686687 V2_RC_SEND_WQE_BYTE_4_DB_SL_L_S, qp->sl);
687688 roce_set_field(rc_sq_wqe->byte_4, V2_RC_SEND_WQE_BYTE_4_DB_SL_H_M,
688− V2_RC_SEND_WQE_BYTE_4_DB_SL_H_S, qp->sl >> 2);
689+ V2_RC_SEND_WQE_BYTE_4_DB_SL_H_S,
690+ qp->sl >> HNS_ROCE_SL_SHIFT);
689691 roce_set_field(rc_sq_wqe->byte_4, V2_RC_SEND_WQE_BYTE_4_WQE_INDEX_M,
690692 V2_RC_SEND_WQE_BYTE_4_WQE_INDEX_S, qp->sq.head);
691693
@@ -1305,14 +1307,14 @@ static int __hns_roce_cmq_send(struct hns_roce_dev *hr_dev, · 613 unmodified lines
13051307 continue;
13061308
13071309 dev_err_ratelimited(hr_dev->dev,
1308− "Cmdq IO error, opcode = %x, return = %x\n",
1310+ "Cmdq IO error, opcode = 0x%x, return = 0x%x.\n",
13091311 desc->opcode, desc_ret);
13101312 ret = -EIO;
13111313 }
13121314 } else {
13131315 /* FW/HW reset or incorrect number of desc */
13141316 tail = roce_read(hr_dev, ROCEE_TX_CMQ_CI_REG);
1315− dev_warn(hr_dev->dev, "CMDQ move tail from %d to %d\n",
1317+ dev_warn(hr_dev->dev, "CMDQ move tail from %u to %u.\n",
13161318 csq->head, tail);
13171319 csq->head = tail;
13181320
@@ -1571,7 +1573,7 @@ static int hns_roce_query_func_info(struct hns_roce_dev *hr_dev) · 252 unmodified lines
15711573 struct hns_roce_cmq_desc desc;
15721574 int ret;
15731575
1574− if (hr_dev->pci_dev->revision < PCI_REVISION_ID_HIP09) {
1576+ if (hr_dev->pci_dev->revision == PCI_REVISION_ID_HIP08) {
15751577 hr_dev->func_num = 1;
15761578 return 0;
15771579 }
@@ -2003,7 +2005,8 @@ static void set_default_caps(struct hns_roce_dev *hr_dev) · 425 unmodified lines
20032005 caps->gid_table_len[0] = HNS_ROCE_V2_GID_INDEX_NUM;
20042006
20052007 if (hr_dev->pci_dev->revision >= PCI_REVISION_ID_HIP09) {
2006− caps->flags |= HNS_ROCE_CAP_FLAG_STASH;
2008+ caps->flags |= HNS_ROCE_CAP_FLAG_STASH |
2009+ HNS_ROCE_CAP_FLAG_DIRECT_WQE;
20072010 caps->max_sq_inline = HNS_ROCE_V3_MAX_SQ_INLINE;
20082011 } else {
20092012 caps->max_sq_inline = HNS_ROCE_V2_MAX_SQ_INLINE;
@@ -2144,7 +2147,6 @@ static void apply_func_caps(struct hns_roce_dev *hr_dev) · 134 unmodified lines
21442147 caps->cqc_timer_entry_sz = HNS_ROCE_V2_CQC_TIMER_ENTRY_SZ;
21452148 caps->mtt_entry_sz = HNS_ROCE_V2_MTT_ENTRY_SZ;
21462149
2147− caps->eqe_hop_num = HNS_ROCE_EQE_HOP_NUM;
21482150 caps->pbl_hop_num = HNS_ROCE_PBL_HOP_NUM;
21492151 caps->qpc_timer_hop_num = HNS_ROCE_HOP_NUM_0;
21502152 caps->cqc_timer_hop_num = HNS_ROCE_HOP_NUM_0;
@@ -2161,6 +2163,7 @@ static void apply_func_caps(struct hns_roce_dev *hr_dev) · 10 unmodified lines
21612163 (u32)priv->handle->rinfo.num_vectors - 2);
21622164
21632165 if (hr_dev->pci_dev->revision >= PCI_REVISION_ID_HIP09) {
2166+ caps->eqe_hop_num = HNS_ROCE_V3_EQE_HOP_NUM;
21642167 caps->ceqe_size = HNS_ROCE_V3_EQE_SIZE;
21652168 caps->aeqe_size = HNS_ROCE_V3_EQE_SIZE;
21662169
@@ -2181,6 +2184,7 @@ static void apply_func_caps(struct hns_roce_dev *hr_dev) · 14 unmodified lines
21812184 } else {
21822185 u32 func_num = max_t(u32, 1, hr_dev->func_num);
21832186
2187+ caps->eqe_hop_num = HNS_ROCE_V2_EQE_HOP_NUM;
21842188 caps->ceqe_size = HNS_ROCE_CEQE_SIZE;
21852189 caps->aeqe_size = HNS_ROCE_AEQE_SIZE;
21862190 caps->gid_table_len[0] /= func_num;
@@ -2393,7 +2397,7 @@ static int hns_roce_config_entry_size(struct hns_roce_dev *hr_dev) · 206 unmodified lines
23932397 struct hns_roce_caps *caps = &hr_dev->caps;
23942398 int ret;
23952399
2396− if (hr_dev->pci_dev->revision < PCI_REVISION_ID_HIP09)
2400+ if (hr_dev->pci_dev->revision == PCI_REVISION_ID_HIP08)
23972401 return 0;
23982402
23992403 ret = config_hem_entry_size(hr_dev, HNS_ROCE_CFG_QPC_SIZE,
@@ -2967,8 +2971,8 @@ static int config_gmv_table(struct hns_roce_dev *hr_dev, · 567 unmodified lines
29672971 return hns_roce_cmq_send(hr_dev, desc, 2);
29682972 }
29692973
2970−static int hns_roce_v2_set_gid(struct hns_roce_dev *hr_dev, u32 port,
2971− int gid_index, const union ib_gid *gid,
2974+static int hns_roce_v2_set_gid(struct hns_roce_dev *hr_dev, int gid_index,
2975+ const union ib_gid *gid,
29722976 const struct ib_gid_attr *attr)
29732977 {
29742978 enum hns_roce_sgid_type sgid_type = GID_TYPE_FLAG_ROCE_V1;
@@ -3063,8 +3067,7 @@ static int set_mtpt_pbl(struct hns_roce_dev *hr_dev, · 88 unmodified lines
30633067 }
30643068
30653069 static int hns_roce_v2_write_mtpt(struct hns_roce_dev *hr_dev,
3066− void *mb_buf, struct hns_roce_mr *mr,
3067− unsigned long mtpt_idx)
3070+ void *mb_buf, struct hns_roce_mr *mr)
30683071 {
30693072 struct hns_roce_v2_mpt_entry *mpt_entry;
30703073 int ret;
@@ -4488,14 +4491,6 @@ static int modify_qp_rtr_to_rts(struct ib_qp *ibqp, · 1417 unmodified lines
44884491 return 0;
44894492 }
44904493
4491−static inline u16 get_udp_sport(u32 fl, u32 lqpn, u32 rqpn)
4492−{
4493− if (!fl)
4494− fl = rdma_calc_flow_label(lqpn, rqpn);
4495−
4496− return rdma_flow_label_to_udp_sport(fl);
4497−}
4498−
44994494 static int get_dip_ctx_idx(struct ib_qp *ibqp, const struct ib_qp_attr *attr,
45004495 u32 *dip_idx)
45014496 {
@@ -4712,8 +4707,9 @@ static int hns_roce_v2_set_path(struct ib_qp *ibqp, · 210 unmodified lines
47124707 }
47134708
47144709 hr_reg_write(context, QPC_UDPSPN,
4715− is_udp ? get_udp_sport(grh->flow_label, ibqp->qp_num,
4716− attr->dest_qp_num) : 0);
4710+ is_udp ? rdma_get_udp_sport(grh->flow_label, ibqp->qp_num,
4711+ attr->dest_qp_num) :
4712+ 0);
47174713
47184714 hr_reg_clear(qpc_mask, QPC_UDPSPN);
47194715
@@ -4739,7 +4735,7 @@ static int hns_roce_v2_set_path(struct ib_qp *ibqp, · 19 unmodified lines
47394735 hr_qp->sl = rdma_ah_get_sl(&attr->ah_attr);
47404736 if (unlikely(hr_qp->sl > MAX_SERVICE_LEVEL)) {
47414737 ibdev_err(ibdev,
4742− "failed to fill QPC, sl (%d) shouldn't be larger than %d.\n",
4738+ "failed to fill QPC, sl (%u) shouldn't be larger than %d.\n",
47434739 hr_qp->sl, MAX_SERVICE_LEVEL);
47444740 return -EINVAL;
47454741 }
@@ -4768,7 +4764,8 @@ static bool check_qp_state(enum ib_qp_state cur_state, · 22 unmodified lines
47684764 [IB_QPS_ERR] = true },
47694765 [IB_QPS_SQD] = {},
47704766 [IB_QPS_SQE] = {},
4771− [IB_QPS_ERR] = { [IB_QPS_RESET] = true, [IB_QPS_ERR] = true }
4767+ [IB_QPS_ERR] = { [IB_QPS_RESET] = true,
4768+ [IB_QPS_ERR] = true }
47724769 };
47734770
47744771 return sm[cur_state][new_state];
@@ -5868,7 +5865,7 @@ static void hns_roce_v2_int_mask_enable(struct hns_roce_dev *hr_dev, · 1093 unmodified lines
58685865 roce_write(hr_dev, ROCEE_VF_ABN_INT_CFG_REG, enable_flag);
58695866 }
58705867
5871−static void hns_roce_v2_destroy_eqc(struct hns_roce_dev *hr_dev, int eqn)
5868+static void hns_roce_v2_destroy_eqc(struct hns_roce_dev *hr_dev, u32 eqn)
58725869 {
58735870 struct device *dev = hr_dev->dev;
58745871 int ret;
@@ -5882,7 +5879,7 @@ static void hns_roce_v2_destroy_eqc(struct hns_roce_dev *hr_dev, int eqn) · 7 unmodified lines
58825879 0, HNS_ROCE_CMD_DESTROY_AEQC,
58835880 HNS_ROCE_CMD_TIMEOUT_MSECS);
58845881 if (ret)
5885− dev_err(dev, "[mailbox cmd] destroy eqc(%d) failed.\n", eqn);
5882+ dev_err(dev, "[mailbox cmd] destroy eqc(%u) failed.\n", eqn);
58865883 }
58875884
58885885 static void free_eq_buf(struct hns_roce_dev *hr_dev, struct hns_roce_eq *eq)
@@ -6394,7 +6391,7 @@ static int hns_roce_hw_v2_init_instance(struct hnae3_handle *handle) · 505 unmodified lines
63946391 if (!id)
63956392 return 0;
63966393
6397− if (id->driver_data && handle->pdev->revision < PCI_REVISION_ID_HIP09)
6394+ if (id->driver_data && handle->pdev->revision == PCI_REVISION_ID_HIP08)
63986395 return 0;
63996396
64006397 ret = __hns_roce_hw_v2_init_instance(handle);
drivers/infiniband/hw/hns/hns_roce_hw_v2.h+4−18
@@ -35,26 +35,15 @@ · 34 unmodified lines
3535
3636 #include <linux/bitops.h>
3737
38−#define HNS_ROCE_VF_QPC_BT_NUM 256
39−#define HNS_ROCE_VF_SCCC_BT_NUM 64
40−#define HNS_ROCE_VF_SRQC_BT_NUM 64
41−#define HNS_ROCE_VF_CQC_BT_NUM 64
42−#define HNS_ROCE_VF_MPT_BT_NUM 64
43−#define HNS_ROCE_VF_SMAC_NUM 32
44−#define HNS_ROCE_VF_SL_NUM 8
45−#define HNS_ROCE_VF_GMV_BT_NUM 256
46−
4738 #define HNS_ROCE_V2_MAX_QP_NUM 0x1000
4839 #define HNS_ROCE_V2_MAX_QPC_TIMER_NUM 0x200
4940 #define HNS_ROCE_V2_MAX_WQE_NUM 0x8000
50−#define HNS_ROCE_V2_MAX_SRQ 0x100000
5141 #define HNS_ROCE_V2_MAX_SRQ_WR 0x8000
5242 #define HNS_ROCE_V2_MAX_SRQ_SGE 64
5343 #define HNS_ROCE_V2_MAX_CQ_NUM 0x100000
5444 #define HNS_ROCE_V2_MAX_CQC_TIMER_NUM 0x100
5545 #define HNS_ROCE_V2_MAX_SRQ_NUM 0x100000
5646 #define HNS_ROCE_V2_MAX_CQE_NUM 0x400000
57−#define HNS_ROCE_V2_MAX_SRQWQE_NUM 0x8000
5847 #define HNS_ROCE_V2_MAX_RQ_SGE_NUM 64
5948 #define HNS_ROCE_V2_MAX_SQ_SGE_NUM 64
6049 #define HNS_ROCE_V2_MAX_EXTEND_SGE_NUM 0x200000
@@ -63,13 +52,10 @@ · 2 unmodified lines
6352 #define HNS_ROCE_V2_MAX_RC_INL_INN_SZ 32
6453 #define HNS_ROCE_V2_UAR_NUM 256
6554 #define HNS_ROCE_V2_PHY_UAR_NUM 1
66−#define HNS_ROCE_V2_MAX_IRQ_NUM 65
67−#define HNS_ROCE_V2_COMP_VEC_NUM 63
6855 #define HNS_ROCE_V2_AEQE_VEC_NUM 1
6956 #define HNS_ROCE_V2_ABNORMAL_VEC_NUM 1
7057 #define HNS_ROCE_V2_MAX_MTPT_NUM 0x100000
7158 #define HNS_ROCE_V2_MAX_MTT_SEGS 0x1000000
72−#define HNS_ROCE_V2_MAX_CQE_SEGS 0x1000000
7359 #define HNS_ROCE_V2_MAX_SRQWQE_SEGS 0x1000000
7460 #define HNS_ROCE_V2_MAX_IDX_SEGS 0x1000000
7561 #define HNS_ROCE_V2_MAX_PD_NUM 0x1000000
@@ -81,7 +67,6 @@ · 5 unmodified lines
8167 #define HNS_ROCE_V2_MAX_RQ_DESC_SZ 16
8268 #define HNS_ROCE_V2_MAX_SRQ_DESC_SZ 64
8369 #define HNS_ROCE_V2_IRRL_ENTRY_SZ 64
84−#define HNS_ROCE_V2_TRRL_ENTRY_SZ 48
8570 #define HNS_ROCE_V2_EXT_ATOMIC_TRRL_ENTRY_SZ 100
8671 #define HNS_ROCE_V2_CQC_ENTRY_SZ 64
8772 #define HNS_ROCE_V2_SRQC_ENTRY_SZ 64
@@ -103,7 +88,6 @@ · 15 unmodified lines
10388 #define HNS_ROCE_INVALID_LKEY 0x0
10489 #define HNS_ROCE_INVALID_SGE_LENGTH 0x80000000
10590 #define HNS_ROCE_CMQ_TX_TIMEOUT 30000
106−#define HNS_ROCE_V2_UC_RC_SGE_NUM_IN_WQE 2
10791 #define HNS_ROCE_V2_RSV_QPS 8
10892
10993 #define HNS_ROCE_V2_HW_RST_TIMEOUT 1000
@@ -117,12 +101,14 @@ · 7 unmodified lines
117101 #define HNS_ROCE_CQE_HOP_NUM 1
118102 #define HNS_ROCE_SRQWQE_HOP_NUM 1
119103 #define HNS_ROCE_PBL_HOP_NUM 2
120−#define HNS_ROCE_EQE_HOP_NUM 2
121104 #define HNS_ROCE_IDX_HOP_NUM 1
122105 #define HNS_ROCE_SQWQE_HOP_NUM 2
123106 #define HNS_ROCE_EXT_SGE_HOP_NUM 1
124107 #define HNS_ROCE_RQWQE_HOP_NUM 2
125108
109+#define HNS_ROCE_V2_EQE_HOP_NUM 2
110+#define HNS_ROCE_V3_EQE_HOP_NUM 1
111+
126112 #define HNS_ROCE_BA_PG_SZ_SUPPORTED_256K 6
127113 #define HNS_ROCE_BA_PG_SZ_SUPPORTED_16K 2
128114 #define HNS_ROCE_V2_GID_INDEX_NUM 16
@@ -1441,7 +1427,7 @@ struct hns_roce_v2_priv { · 1312 unmodified lines
14411427 struct hns_roce_dip {
14421428 u8 dgid[GID_LEN_V2];
14431429 u32 dip_idx;
1444− struct list_head node; /* all dips are on a list */
1430+ struct list_head node; /* all dips are on a list */
14451431 };
14461432
14471433 /* only for RNR timeout issue of HIP08 */
drivers/infiniband/hw/hns/hns_roce_main.c+30−55
@@ -31,7 +31,6 @@ · 30 unmodified lines
3131 * SOFTWARE.
3232 */
3333 #include <linux/acpi.h>
34−#include <linux/of_platform.h>
3534 #include <linux/module.h>
3635 #include <linux/pci.h>
3736 #include <rdma/ib_addr.h>
@@ -70,7 +69,7 @@ static int hns_roce_add_gid(const struct ib_gid_attr *attr, void **context) · 32 unmodified lines
7069 if (port >= hr_dev->caps.num_ports)
7170 return -EINVAL;
7271
73− ret = hr_dev->hw->set_gid(hr_dev, port, attr->index, &attr->gid, attr);
72+ ret = hr_dev->hw->set_gid(hr_dev, attr->index, &attr->gid, attr);
7473
7574 return ret;
7675 }
@@ -84,7 +83,7 @@ static int hns_roce_del_gid(const struct ib_gid_attr *attr, void **context) · 7 unmodified lines
8483 if (port >= hr_dev->caps.num_ports)
8584 return -EINVAL;
8685
87− ret = hr_dev->hw->set_gid(hr_dev, port, attr->index, NULL, NULL);
86+ ret = hr_dev->hw->set_gid(hr_dev, attr->index, NULL, NULL);
8887
8988 return ret;
9089 }
@@ -152,9 +151,6 @@ static int hns_roce_setup_mtu_mac(struct hns_roce_dev *hr_dev) · 61 unmodified lines
152151 u8 i;
153152
154153 for (i = 0; i < hr_dev->caps.num_ports; i++) {
155− if (hr_dev->hw->set_mtu)
156− hr_dev->hw->set_mtu(hr_dev, hr_dev->iboe.phy_port[i],
157− hr_dev->caps.max_mtu);
158154 ret = hns_roce_set_mac(hr_dev, i,
159155 hr_dev->iboe.netdevs[i]->dev_addr);
160156 if (ret)
@@ -270,6 +266,9 @@ static enum rdma_link_layer hns_roce_get_link_layer(struct ib_device *device, · 109 unmodified lines
270266 static int hns_roce_query_pkey(struct ib_device *ib_dev, u32 port, u16 index,
271267 u16 *pkey)
272268 {
269+ if (index > 0)
270+ return -EINVAL;
271+
273272 *pkey = PKEY_ID;
274273
275274 return 0;
@@ -307,9 +306,22 @@ hns_roce_user_mmap_entry_insert(struct ib_ucontext *ucontext, u64 address, · 31 unmodified lines
307306 entry->address = address;
308307 entry->mmap_type = mmap_type;
309308
310− ret = rdma_user_mmap_entry_insert_exact(
311− ucontext, &entry->rdma_entry, length,
312− mmap_type == HNS_ROCE_MMAP_TYPE_DB ? 0 : 1);
309+ switch (mmap_type) {
310+ /* pgoff 0 must be used by DB for compatibility */
311+ case HNS_ROCE_MMAP_TYPE_DB:
312+ ret = rdma_user_mmap_entry_insert_exact(
313+ ucontext, &entry->rdma_entry, length, 0);
314+ break;
315+ case HNS_ROCE_MMAP_TYPE_DWQE:
316+ ret = rdma_user_mmap_entry_insert_range(
317+ ucontext, &entry->rdma_entry, length, 1,
318+ U32_MAX);
319+ break;
320+ default:
321+ ret = -EINVAL;
322+ break;
323+ }
324+
313325 if (ret) {
314326 kfree(entry);
315327 return NULL;
@@ -323,18 +335,12 @@ static void hns_roce_dealloc_uar_entry(struct hns_roce_ucontext *context) · 7 unmodified lines
323335 if (context->db_mmap_entry)
324336 rdma_user_mmap_entry_remove(
325337 &context->db_mmap_entry->rdma_entry);
326−
327− if (context->tptr_mmap_entry)
328− rdma_user_mmap_entry_remove(
329− &context->tptr_mmap_entry->rdma_entry);
330338 }
331339
332340 static int hns_roce_alloc_uar_entry(struct ib_ucontext *uctx)
333341 {
334342 struct hns_roce_ucontext *context = to_hr_ucontext(uctx);
335− struct hns_roce_dev *hr_dev = to_hr_dev(uctx->device);
336343 u64 address;
337− int ret;
338344
339345 address = context->uar.pfn << PAGE_SHIFT;
340346 context->db_mmap_entry = hns_roce_user_mmap_entry_insert(
@@ -342,27 +348,7 @@ static int hns_roce_alloc_uar_entry(struct ib_ucontext *uctx) · 1 unmodified line
342348 if (!context->db_mmap_entry)
343349 return -ENOMEM;
344350
345− if (!hr_dev->tptr_dma_addr || !hr_dev->tptr_size)
346− return 0;
347−
348− /*
349− * FIXME: using io_remap_pfn_range on the dma address returned
350− * by dma_alloc_coherent is totally wrong.
351− */
352− context->tptr_mmap_entry =
353− hns_roce_user_mmap_entry_insert(uctx, hr_dev->tptr_dma_addr,
354− hr_dev->tptr_size,
355− HNS_ROCE_MMAP_TYPE_TPTR);
356− if (!context->tptr_mmap_entry) {
357− ret = -ENOMEM;
358− goto err;
359− }
360−
361351 return 0;
362−
363−err:
364− hns_roce_dealloc_uar_entry(context);
365− return ret;
366352 }
367353
368354 static int hns_roce_alloc_ucontext(struct ib_ucontext *uctx,
@@ -436,10 +422,15 @@ static int hns_roce_mmap(struct ib_ucontext *uctx, struct vm_area_struct *vma) · 67 unmodified lines
436422
437423 entry = to_hns_mmap(rdma_entry);
438424 pfn = entry->address >> PAGE_SHIFT;
439− prot = vma->vm_page_prot;
440425
441− if (entry->mmap_type != HNS_ROCE_MMAP_TYPE_TPTR)
442− prot = pgprot_noncached(prot);
426+ switch (entry->mmap_type) {
427+ case HNS_ROCE_MMAP_TYPE_DB:
428+ case HNS_ROCE_MMAP_TYPE_DWQE:
429+ prot = pgprot_device(vma->vm_page_prot);
430+ break;
431+ default:
432+ return -EINVAL;
433+ }
443434
444435 ret = rdma_user_mmap_io(uctx, vma, pfn, rdma_entry->npages * PAGE_SIZE,
445436 prot, rdma_entry);
@@ -816,7 +807,6 @@ static int hns_roce_setup_hca(struct hns_roce_dev *hr_dev) · 370 unmodified lines
816807 int ret;
817808
818809 spin_lock_init(&hr_dev->sm_lock);
819− spin_lock_init(&hr_dev->bt_cmd_lock);
820810
821811 if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_CQ_RECORD_DB ||
822812 hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_QP_RECORD_DB) {
@@ -907,20 +897,13 @@ int hns_roce_init(struct hns_roce_dev *hr_dev) · 84 unmodified lines
907897 struct device *dev = hr_dev->dev;
908898 int ret;
909899
910− if (hr_dev->hw->reset) {
911− ret = hr_dev->hw->reset(hr_dev, true);
912− if (ret) {
913− dev_err(dev, "Reset RoCE engine failed!\n");
914− return ret;
915− }
916− }
917900 hr_dev->is_reset = false;
918901
919902 if (hr_dev->hw->cmq_init) {
920903 ret = hr_dev->hw->cmq_init(hr_dev);
921904 if (ret) {
922905 dev_err(dev, "Init RoCE Command Queue failed!\n");
923− goto error_failed_cmq_init;
906+ return ret;
924907 }
925908 }
926909
@@ -1003,12 +986,6 @@ error_failed_cmd_init: · 76 unmodified lines
1003986 if (hr_dev->hw->cmq_exit)
1004987 hr_dev->hw->cmq_exit(hr_dev);
1005988
1006−error_failed_cmq_init:
1007− if (hr_dev->hw->reset) {
1008− if (hr_dev->hw->reset(hr_dev, false))
1009− dev_err(dev, "Dereset RoCE engine failed!\n");
1010− }
1011−
1012989 return ret;
1013990 }
1014991
@@ -1028,8 +1005,6 @@ void hns_roce_exit(struct hns_roce_dev *hr_dev) · 13 unmodified lines
10281005 hns_roce_cmd_cleanup(hr_dev);
10291006 if (hr_dev->hw->cmq_exit)
10301007 hr_dev->hw->cmq_exit(hr_dev);
1031− if (hr_dev->hw->reset)
1032− hr_dev->hw->reset(hr_dev, false);
10331008 }
10341009
10351010 MODULE_LICENSE("Dual BSD/GPL");
drivers/infiniband/hw/hns/hns_roce_mr.c+10−22
@@ -31,7 +31,6 @@ · 30 unmodified lines
3131 * SOFTWARE.
3232 */
3333
34−#include <linux/platform_device.h>
3534 #include <linux/vmalloc.h>
3635 #include <rdma/ib_umem.h>
3736 #include "hns_roce_device.h"
@@ -81,7 +80,7 @@ static int alloc_mr_key(struct hns_roce_dev *hr_dev, struct hns_roce_mr *mr) · 43 unmodified lines
8180 return -ENOMEM;
8281 }
8382
84− mr->key = hw_index_to_key(id); /* MR key */
83+ mr->key = hw_index_to_key(id); /* MR key */
8584
8685 err = hns_roce_table_get(hr_dev, &hr_dev->mr_table.mtpt_table,
8786 (unsigned long)id);
@@ -173,8 +172,7 @@ static int hns_roce_mr_enable(struct hns_roce_dev *hr_dev, · 85 unmodified lines
173172 }
174173
175174 if (mr->type != MR_TYPE_FRMR)
176− ret = hr_dev->hw->write_mtpt(hr_dev, mailbox->buf, mr,
177− mtpt_idx);
175+ ret = hr_dev->hw->write_mtpt(hr_dev, mailbox->buf, mr);
178176 else
179177 ret = hr_dev->hw->frmr_write_mtpt(hr_dev, mailbox->buf, mr);
180178 if (ret) {
@@ -363,12 +361,8 @@ int hns_roce_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata) · 182 unmodified lines
363361 struct hns_roce_mr *mr = to_hr_mr(ibmr);
364362 int ret = 0;
365363
366− if (hr_dev->hw->dereg_mr) {
367− ret = hr_dev->hw->dereg_mr(hr_dev, mr, udata);
368− } else {
369− hns_roce_mr_free(hr_dev, mr);
370− kfree(mr);
371− }
364+ hns_roce_mr_free(hr_dev, mr);
365+ kfree(mr);
372366
373367 return ret;
374368 }
@@ -614,10 +608,7 @@ static int mtr_map_region(struct hns_roce_dev *hr_dev, struct hns_roce_mtr *mtr, · 239 unmodified lines
614608 return -ENOBUFS;
615609
616610 for (i = 0; i < count && npage < max_count; i++) {
617− if (hr_dev->hw_rev == HNS_ROCE_HW_VER1)
618− addr = to_hr_hw_page_addr(pages[npage]);
619− else
620− addr = pages[npage];
611+ addr = pages[npage];
621612
622613 mtts[i] = cpu_to_le64(addr);
623614 npage++;
@@ -824,11 +815,11 @@ int hns_roce_mtr_map(struct hns_roce_dev *hr_dev, struct hns_roce_mtr *mtr, · 200 unmodified lines
824815 }
825816
826817 int hns_roce_mtr_find(struct hns_roce_dev *hr_dev, struct hns_roce_mtr *mtr,
827− int offset, u64 *mtt_buf, int mtt_max, u64 *base_addr)
818+ u32 offset, u64 *mtt_buf, int mtt_max, u64 *base_addr)
828819 {
829820 struct hns_roce_hem_cfg *cfg = &mtr->hem_cfg;
830821 int mtt_count, left;
831− int start_index;
822+ u32 start_index;
832823 int total = 0;
833824 __le64 *mtts;
834825 u32 npage;
@@ -847,10 +838,7 @@ int hns_roce_mtr_find(struct hns_roce_dev *hr_dev, struct hns_roce_mtr *mtr, · 12 unmodified lines
847838 continue;
848839
849840 addr = cfg->root_ba + (npage << HNS_HW_PAGE_SHIFT);
850− if (hr_dev->hw_rev == HNS_ROCE_HW_VER1)
851− mtt_buf[total] = to_hr_hw_page_addr(addr);
852− else
853− mtt_buf[total] = addr;
841+ mtt_buf[total] = addr;
854842
855843 total++;
856844 }
@@ -884,10 +872,10 @@ done: · 27 unmodified lines
884872 static int mtr_init_buf_cfg(struct hns_roce_dev *hr_dev,
885873 struct hns_roce_buf_attr *attr,
886874 struct hns_roce_hem_cfg *cfg,
887− unsigned int *buf_page_shift, int unalinged_size)
875+ unsigned int *buf_page_shift, u64 unalinged_size)
888876 {
889877 struct hns_roce_buf_region *r;
890− int first_region_padding;
878+ u64 first_region_padding;
891879 int page_cnt, region_cnt;
892880 unsigned int page_shift;
893881 size_t buf_size;
drivers/infiniband/hw/hns/hns_roce_pd.c+3−14
@@ -30,7 +30,6 @@ · 29 unmodified lines
3030 * SOFTWARE.
3131 */
3232
33−#include <linux/platform_device.h>
3433 #include <linux/pci.h>
3534 #include "hns_roce_device.h"
3635
@@ -86,7 +85,6 @@ int hns_roce_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata) · 49 unmodified lines
8685 int hns_roce_uar_alloc(struct hns_roce_dev *hr_dev, struct hns_roce_uar *uar)
8786 {
8887 struct hns_roce_ida *uar_ida = &hr_dev->uar_ida;
89− struct resource *res;
9088 int id;
9189
9290 /* Using bitmap to manager UAR index */
@@ -104,18 +102,9 @@ int hns_roce_uar_alloc(struct hns_roce_dev *hr_dev, struct hns_roce_uar *uar) · 11 unmodified lines
104102 else
105103 uar->index = 0;
106104
107− if (!dev_is_pci(hr_dev->dev)) {
108− res = platform_get_resource(hr_dev->pdev, IORESOURCE_MEM, 0);
109− if (!res) {
110− ida_free(&uar_ida->ida, id);
111− dev_err(&hr_dev->pdev->dev, "memory resource not found!\n");
112− return -EINVAL;
113− }
114− uar->pfn = ((res->start) >> PAGE_SHIFT) + uar->index;
115− } else {
116− uar->pfn = ((pci_resource_start(hr_dev->pci_dev, 2))
117− >> PAGE_SHIFT);
118− }
105+ uar->pfn = ((pci_resource_start(hr_dev->pci_dev, 2)) >> PAGE_SHIFT);
106+ if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_DIRECT_WQE)
107+ hr_dev->dwqe_page = pci_resource_start(hr_dev->pci_dev, 4);
119108
120109 return 0;
121110 }
drivers/infiniband/hw/hns/hns_roce_qp.c+61−32
@@ -32,7 +32,6 @@ · 31 unmodified lines
3232 */
3333
3434 #include <linux/pci.h>
35−#include <linux/platform_device.h>
3635 #include <rdma/ib_addr.h>
3736 #include <rdma/ib_umem.h>
3837 #include <rdma/uverbs_ioctl.h>
@@ -110,12 +109,11 @@ void hns_roce_qp_event(struct hns_roce_dev *hr_dev, u32 qpn, int event_type) · 71 unmodified lines
110109 return;
111110 }
112111
113− if (hr_dev->hw_rev != HNS_ROCE_HW_VER1 &&
114− (event_type == HNS_ROCE_EVENT_TYPE_WQ_CATAS_ERROR ||
115− event_type == HNS_ROCE_EVENT_TYPE_INV_REQ_LOCAL_WQ_ERROR ||
116− event_type == HNS_ROCE_EVENT_TYPE_LOCAL_WQ_ACCESS_ERROR ||
117− event_type == HNS_ROCE_EVENT_TYPE_XRCD_VIOLATION ||
118− event_type == HNS_ROCE_EVENT_TYPE_INVALID_XRCETH)) {
112+ if (event_type == HNS_ROCE_EVENT_TYPE_WQ_CATAS_ERROR ||
113+ event_type == HNS_ROCE_EVENT_TYPE_INV_REQ_LOCAL_WQ_ERROR ||
114+ event_type == HNS_ROCE_EVENT_TYPE_LOCAL_WQ_ACCESS_ERROR ||
115+ event_type == HNS_ROCE_EVENT_TYPE_XRCD_VIOLATION ||
116+ event_type == HNS_ROCE_EVENT_TYPE_INVALID_XRCETH) {
119117 qp->state = IB_QPS_ERR;
120118
121119 flush_cqe(hr_dev, qp);
@@ -219,13 +217,7 @@ static int alloc_qpn(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp) · 97 unmodified lines
219217 int ret;
220218
221219 if (hr_qp->ibqp.qp_type == IB_QPT_GSI) {
222− /* when hw version is v1, the sqpn is allocated */
223− if (hr_dev->hw_rev == HNS_ROCE_HW_VER1)
224− num = HNS_ROCE_MAX_PORTS +
225− hr_dev->iboe.phy_port[hr_qp->port];
226− else
227− num = 1;
228−
220+ num = 1;
229221 hr_qp->doorbell_qpn = 1;
230222 } else {
231223 mutex_lock(&qp_table->bank_mutex);
@@ -324,11 +316,6 @@ static int alloc_qpc(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp) · 92 unmodified lines
324316 if (!hr_qp->qpn)
325317 return -EINVAL;
326318
327− /* In v1 engine, GSI QP context is saved in the RoCE hw's register */
328− if (hr_qp->ibqp.qp_type == IB_QPT_GSI &&
329− hr_dev->hw_rev == HNS_ROCE_HW_VER1)
330− return 0;
331−
332319 /* Alloc memory for QPC */
333320 ret = hns_roce_table_get(hr_dev, &qp_table->qp_table, hr_qp->qpn);
334321 if (ret) {
@@ -379,6 +366,11 @@ err_out: · 44 unmodified lines
379366 return ret;
380367 }
381368
369+static void qp_user_mmap_entry_remove(struct hns_roce_qp *hr_qp)
370+{
371+ rdma_user_mmap_entry_remove(&hr_qp->dwqe_mmap_entry->rdma_entry);
372+}
373+
382374 void hns_roce_qp_remove(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp)
383375 {
384376 struct xarray *xa = &hr_dev->qp_table_xa;
@@ -402,11 +394,6 @@ static void free_qpc(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp) · 17 unmodified lines
402394 {
403395 struct hns_roce_qp_table *qp_table = &hr_dev->qp_table;
404396
405− /* In v1 engine, GSI QP context is saved in the RoCE hw's register */
406− if (hr_qp->ibqp.qp_type == IB_QPT_GSI &&
407− hr_dev->hw_rev == HNS_ROCE_HW_VER1)
408− return;
409−
410397 if (hr_dev->caps.trrl_entry_sz)
411398 hns_roce_table_put(hr_dev, &qp_table->trrl_table, hr_qp->qpn);
412399 hns_roce_table_put(hr_dev, &qp_table->irrl_table, hr_qp->qpn);
@@ -535,11 +522,6 @@ static void set_ext_sge_param(struct hns_roce_dev *hr_dev, u32 sq_wqe_cnt, · 122 unmodified lines
535522
536523 hr_qp->sge.sge_shift = HNS_ROCE_SGE_SHIFT;
537524
538− if (hr_dev->hw_rev == HNS_ROCE_HW_VER1) {
539− hr_qp->sq.max_gs = HNS_ROCE_SGE_IN_WQE;
540− return;
541− }
542−
543525 hr_qp->sq.max_gs = max(1U, cap->max_send_sge);
544526
545527 wqe_sge_cnt = get_wqe_ext_sge_cnt(hr_qp);
@@ -780,7 +762,11 @@ static int alloc_qp_buf(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp, · 234 unmodified lines
780762 goto err_inline;
781763 }
782764
765+ if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_DIRECT_WQE)
766+ hr_qp->en_flags |= HNS_ROCE_QP_CAP_DIRECT_WQE;
767+
783768 return 0;
769+
784770 err_inline:
785771 free_rq_inline_buf(hr_qp);
786772
@@ -822,6 +808,35 @@ static inline bool kernel_qp_has_rdb(struct hns_roce_dev *hr_dev, · 35 unmodified lines
822808 hns_roce_qp_has_rq(init_attr));
823809 }
824810
811+static int qp_mmap_entry(struct hns_roce_qp *hr_qp,
812+ struct hns_roce_dev *hr_dev,
813+ struct ib_udata *udata,
814+ struct hns_roce_ib_create_qp_resp *resp)
815+{
816+ struct hns_roce_ucontext *uctx =
817+ rdma_udata_to_drv_context(udata,
818+ struct hns_roce_ucontext, ibucontext);
819+ struct rdma_user_mmap_entry *rdma_entry;
820+ u64 address;
821+
822+ address = hr_dev->dwqe_page + hr_qp->qpn * HNS_ROCE_DWQE_SIZE;
823+
824+ hr_qp->dwqe_mmap_entry =
825+ hns_roce_user_mmap_entry_insert(&uctx->ibucontext, address,
826+ HNS_ROCE_DWQE_SIZE,
827+ HNS_ROCE_MMAP_TYPE_DWQE);
828+
829+ if (!hr_qp->dwqe_mmap_entry) {
830+ ibdev_err(&hr_dev->ib_dev, "failed to get dwqe mmap entry.\n");
831+ return -ENOMEM;
832+ }
833+
834+ rdma_entry = &hr_qp->dwqe_mmap_entry->rdma_entry;
835+ resp->dwqe_mmap_key = rdma_user_mmap_get_offset(rdma_entry);
836+
837+ return 0;
838+}
839+
825840 static int alloc_user_qp_db(struct hns_roce_dev *hr_dev,
826841 struct hns_roce_qp *hr_qp,
827842 struct ib_qp_init_attr *init_attr,
@@ -909,10 +924,16 @@ static int alloc_qp_db(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp, · 81 unmodified lines
909924 hr_qp->en_flags |= HNS_ROCE_QP_CAP_OWNER_DB;
910925
911926 if (udata) {
927+ if (hr_qp->en_flags & HNS_ROCE_QP_CAP_DIRECT_WQE) {
928+ ret = qp_mmap_entry(hr_qp, hr_dev, udata, resp);
929+ if (ret)
930+ return ret;
931+ }
932+
912933 ret = alloc_user_qp_db(hr_dev, hr_qp, init_attr, udata, ucmd,
913934 resp);
914935 if (ret)
915− return ret;
936+ goto err_remove_qp;
916937 } else {
917938 ret = alloc_kernel_qp_db(hr_dev, hr_qp, init_attr);
918939 if (ret)
@@ -920,6 +941,12 @@ static int alloc_qp_db(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp, · 1 unmodified line
920941 }
921942
922943 return 0;
944+
945+err_remove_qp:
946+ if (hr_qp->en_flags & HNS_ROCE_QP_CAP_DIRECT_WQE)
947+ qp_user_mmap_entry_remove(hr_qp);
948+
949+ return ret;
923950 }
924951
925952 static void free_qp_db(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp,
@@ -933,6 +960,8 @@ static void free_qp_db(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp, · 7 unmodified lines
933960 hns_roce_db_unmap_user(uctx, &hr_qp->rdb);
934961 if (hr_qp->en_flags & HNS_ROCE_QP_CAP_SQ_RECORD_DB)
935962 hns_roce_db_unmap_user(uctx, &hr_qp->sdb);
963+ if (hr_qp->en_flags & HNS_ROCE_QP_CAP_DIRECT_WQE)
964+ qp_user_mmap_entry_remove(hr_qp);
936965 } else {
937966 if (hr_qp->en_flags & HNS_ROCE_QP_CAP_RQ_RECORD_DB)
938967 hns_roce_free_db(hr_dev, &hr_qp->rdb);
@@ -1158,7 +1187,7 @@ static int check_qp_type(struct hns_roce_dev *hr_dev, enum ib_qp_type type, · 219 unmodified lines
11581187 goto out;
11591188 break;
11601189 case IB_QPT_UD:
1161− if (hr_dev->pci_dev->revision <= PCI_REVISION_ID_HIP08 &&
1190+ if (hr_dev->pci_dev->revision == PCI_REVISION_ID_HIP08 &&
11621191 is_user)
11631192 goto out;
11641193 break;
@@ -1391,7 +1420,7 @@ void hns_roce_unlock_cqs(struct hns_roce_cq *send_cq, · 226 unmodified lines
13911420 }
13921421 }
13931422
1394−static inline void *get_wqe(struct hns_roce_qp *hr_qp, int offset)
1423+static inline void *get_wqe(struct hns_roce_qp *hr_qp, u32 offset)
13951424 {
13961425 return hns_roce_buf_offset(hr_qp->mtr.kmem, offset);
13971426 }
drivers/infiniband/hw/irdma/i40iw_if.c+1−1
@@ -198,7 +198,7 @@ static void i40iw_remove(struct auxiliary_device *aux_dev) · 197 unmodified lines
198198 aux_dev);
199199 struct i40e_info *cdev_info = i40e_adev->ldev;
200200
201− return i40e_client_device_unregister(cdev_info);
201+ i40e_client_device_unregister(cdev_info);
202202 }
203203
204204 static const struct auxiliary_device_id i40iw_auxiliary_id_table[] = {
drivers/infiniband/hw/irdma/pble.h+1−1
@@ -69,7 +69,7 @@ struct irdma_add_page_info { · 68 unmodified lines
6969 struct irdma_chunk {
7070 struct list_head list;
7171 struct irdma_dma_info dmainfo;
72− void *bitmapbuf;
72+ unsigned long *bitmapbuf;
7373
7474 u32 sizeofbitmap;
7575 u64 size;
drivers/infiniband/hw/irdma/verbs.c+10−21
@@ -21,7 +21,8 @@ static int irdma_query_device(struct ib_device *ibdev, · 20 unmodified lines
2121 return -EINVAL;
2222
2323 memset(props, 0, sizeof(*props));
24− ether_addr_copy((u8 *)&props->sys_image_guid, iwdev->netdev->dev_addr);
24+ addrconf_addr_eui48((u8 *)&props->sys_image_guid,
25+ iwdev->netdev->dev_addr);
2526 props->fw_ver = (u64)irdma_fw_major_ver(&rf->sc_dev) << 32 |
2627 irdma_fw_minor_ver(&rf->sc_dev);
2728 props->device_cap_flags = iwdev->device_cap_flags;
@@ -1170,6 +1171,10 @@ int irdma_modify_qp_roce(struct ib_qp *ibqp, struct ib_qp_attr *attr, · 1142 unmodified lines
11701171 udp_info->ttl = attr->ah_attr.grh.hop_limit;
11711172 udp_info->flow_label = attr->ah_attr.grh.flow_label;
11721173 udp_info->tos = attr->ah_attr.grh.traffic_class;
1174+ udp_info->src_port =
1175+ rdma_get_udp_sport(udp_info->flow_label,
1176+ ibqp->qp_num,
1177+ roce_info->dest_qp);
11731178 irdma_qp_rem_qos(&iwqp->sc_qp);
11741179 dev->ws_remove(iwqp->sc_qp.vsi, ctx_info->user_pri);
11751180 ctx_info->user_pri = rt_tos2priority(udp_info->tos);
@@ -4321,24 +4326,6 @@ static enum rdma_link_layer irdma_get_link_layer(struct ib_device *ibdev, · 3145 unmodified lines
43214326 return IB_LINK_LAYER_ETHERNET;
43224327 }
43234328
4324−static __be64 irdma_mac_to_guid(struct net_device *ndev)
4325−{
4326− const unsigned char *mac = ndev->dev_addr;
4327− __be64 guid;
4328− unsigned char *dst = (unsigned char *)&guid;
4329−
4330− dst[0] = mac[0] ^ 2;
4331− dst[1] = mac[1];
4332− dst[2] = mac[2];
4333− dst[3] = 0xff;
4334− dst[4] = 0xfe;
4335− dst[5] = mac[3];
4336− dst[6] = mac[4];
4337− dst[7] = mac[5];
4338−
4339− return guid;
4340−}
4341−
43424329 static const struct ib_device_ops irdma_roce_dev_ops = {
43434330 .attach_mcast = irdma_attach_mcast,
43444331 .create_ah = irdma_create_ah,
@@ -4408,7 +4395,8 @@ static const struct ib_device_ops irdma_dev_ops = { · 63 unmodified lines
44084395 static void irdma_init_roce_device(struct irdma_device *iwdev)
44094396 {
44104397 iwdev->ibdev.node_type = RDMA_NODE_IB_CA;
4411− iwdev->ibdev.node_guid = irdma_mac_to_guid(iwdev->netdev);
4398+ addrconf_addr_eui48((u8 *)&iwdev->ibdev.node_guid,
4399+ iwdev->netdev->dev_addr);
44124400 ib_set_device_ops(&iwdev->ibdev, &irdma_roce_dev_ops);
44134401 }
44144402
@@ -4421,7 +4409,8 @@ static int irdma_init_iw_device(struct irdma_device *iwdev) · 6 unmodified lines
44214409 struct net_device *netdev = iwdev->netdev;
44224410
44234411 iwdev->ibdev.node_type = RDMA_NODE_RNIC;
4424− ether_addr_copy((u8 *)&iwdev->ibdev.node_guid, netdev->dev_addr);
4412+ addrconf_addr_eui48((u8 *)&iwdev->ibdev.node_guid,
4413+ netdev->dev_addr);
44254414 iwdev->ibdev.ops.iw_add_ref = irdma_qp_add_ref;
44264415 iwdev->ibdev.ops.iw_rem_ref = irdma_qp_rem_ref;
44274416 iwdev->ibdev.ops.iw_get_qp = irdma_get_qp;
drivers/infiniband/hw/mlx4/main.c+12−22
@@ -85,14 +85,6 @@ static enum rdma_link_layer mlx4_ib_port_link_layer(struct ib_device *device, · 84 unmodified lines
8585
8686 static struct workqueue_struct *wq;
8787
88−static void init_query_mad(struct ib_smp *mad)
89−{
90− mad->base_version = 1;
91− mad->mgmt_class = IB_MGMT_CLASS_SUBN_LID_ROUTED;
92− mad->class_version = 1;
93− mad->method = IB_MGMT_METHOD_GET;
94−}
95−
9688 static int check_flow_steering_support(struct mlx4_dev *dev)
9789 {
9890 int eth_num_ports = 0;
@@ -471,7 +463,7 @@ static int mlx4_ib_query_device(struct ib_device *ibdev, · 372 unmodified lines
471463 if (!in_mad || !out_mad)
472464 goto out;
473465
474− init_query_mad(in_mad);
466+ ib_init_query_mad(in_mad);
475467 in_mad->attr_id = IB_SMP_ATTR_NODE_INFO;
476468
477469 err = mlx4_MAD_IFC(to_mdev(ibdev), MLX4_MAD_IFC_IGNORE_KEYS,
@@ -669,7 +661,7 @@ static int ib_link_query_port(struct ib_device *ibdev, u32 port, · 191 unmodified lines
669661 if (!in_mad || !out_mad)
670662 goto out;
671663
672− init_query_mad(in_mad);
664+ ib_init_query_mad(in_mad);
673665 in_mad->attr_id = IB_SMP_ATTR_PORT_INFO;
674666 in_mad->attr_mod = cpu_to_be32(port);
675667
@@ -721,7 +713,7 @@ static int ib_link_query_port(struct ib_device *ibdev, u32 port, · 45 unmodified lines
721713
722714 /* If reported active speed is QDR, check if is FDR-10 */
723715 if (props->active_speed == IB_SPEED_QDR) {
724− init_query_mad(in_mad);
716+ ib_init_query_mad(in_mad);
725717 in_mad->attr_id = MLX4_ATTR_EXTENDED_PORT_INFO;
726718 in_mad->attr_mod = cpu_to_be32(port);
727719
@@ -848,7 +840,7 @@ int __mlx4_ib_query_gid(struct ib_device *ibdev, u32 port, int index, · 120 unmodified lines
848840 if (!in_mad || !out_mad)
849841 goto out;
850842
851− init_query_mad(in_mad);
843+ ib_init_query_mad(in_mad);
852844 in_mad->attr_id = IB_SMP_ATTR_PORT_INFO;
853845 in_mad->attr_mod = cpu_to_be32(port);
854846
@@ -870,7 +862,7 @@ int __mlx4_ib_query_gid(struct ib_device *ibdev, u32 port, int index, · 15 unmodified lines
870862 }
871863 }
872864
873− init_query_mad(in_mad);
865+ ib_init_query_mad(in_mad);
874866 in_mad->attr_id = IB_SMP_ATTR_GUID_INFO;
875867 in_mad->attr_mod = cpu_to_be32(index / 8);
876868
@@ -917,7 +909,7 @@ static int mlx4_ib_query_sl2vl(struct ib_device *ibdev, u32 port, · 40 unmodified lines
917909 if (!in_mad || !out_mad)
918910 goto out;
919911
920− init_query_mad(in_mad);
912+ ib_init_query_mad(in_mad);
921913 in_mad->attr_id = IB_SMP_ATTR_SL_TO_VL_TABLE;
922914 in_mad->attr_mod = 0;
923915
@@ -971,7 +963,7 @@ int __mlx4_ib_query_pkey(struct ib_device *ibdev, u32 port, u16 index, · 47 unmodified lines
971963 if (!in_mad || !out_mad)
972964 goto out;
973965
974− init_query_mad(in_mad);
966+ ib_init_query_mad(in_mad);
975967 in_mad->attr_id = IB_SMP_ATTR_PKEY_TABLE;
976968 in_mad->attr_mod = cpu_to_be32(index / 32);
977969
@@ -1990,7 +1982,7 @@ static int init_node_data(struct mlx4_ib_dev *dev) · 1012 unmodified lines
19901982 if (!in_mad || !out_mad)
19911983 goto out;
19921984
1993− init_query_mad(in_mad);
1985+ ib_init_query_mad(in_mad);
19941986 in_mad->attr_id = IB_SMP_ATTR_NODE_DESC;
19951987 if (mlx4_is_master(dev->dev))
19961988 mad_ifc_flags |= MLX4_MAD_IFC_NET_VIEW;
@@ -2784,10 +2776,8 @@ static void *mlx4_ib_add(struct mlx4_dev *dev) · 787 unmodified lines
27842776 if (err)
27852777 goto err_counter;
27862778
2787− ibdev->ib_uc_qpns_bitmap =
2788− kmalloc_array(BITS_TO_LONGS(ibdev->steer_qpn_count),
2789− sizeof(long),
2790− GFP_KERNEL);
2779+ ibdev->ib_uc_qpns_bitmap = bitmap_alloc(ibdev->steer_qpn_count,
2780+ GFP_KERNEL);
27912781 if (!ibdev->ib_uc_qpns_bitmap)
27922782 goto err_steer_qp_release;
27932783
@@ -2875,7 +2865,7 @@ err_diag_counters: · 81 unmodified lines
28752865 mlx4_ib_diag_cleanup(ibdev);
28762866
28772867 err_steer_free_bitmap:
2878− kfree(ibdev->ib_uc_qpns_bitmap);
2868+ bitmap_free(ibdev->ib_uc_qpns_bitmap);
28792869
28802870 err_steer_qp_release:
28812871 mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
@@ -2988,7 +2978,7 @@ static void mlx4_ib_remove(struct mlx4_dev *dev, void *ibdev_ptr) · 106 unmodified lines
29882978
29892979 mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
29902980 ibdev->steer_qpn_count);
2991− kfree(ibdev->ib_uc_qpns_bitmap);
2981+ bitmap_free(ibdev->ib_uc_qpns_bitmap);
29922982
29932983 iounmap(ibdev->uar_map);
29942984 for (p = 0; p < ibdev->num_ports; ++p)
drivers/infiniband/hw/mlx5/cq.c+4−1
@@ -328,8 +328,11 @@ static void mlx5_handle_error_cqe(struct mlx5_ib_dev *dev, · 327 unmodified lines
328328 }
329329
330330 wc->vendor_err = cqe->vendor_err_synd;
331− if (dump)
331+ if (dump) {
332+ mlx5_ib_warn(dev, "WC error: %d, Message: %s\n", wc->status,
333+ ib_wc_status_msg(wc->status));
332334 dump_cqe(dev, cqe);
335+ }
333336 }
334337
335338 static void handle_atomics(struct mlx5_ib_qp *qp, struct mlx5_cqe64 *cqe64,
drivers/infiniband/hw/mlx5/mad.c+14−9
@@ -291,7 +291,7 @@ int mlx5_query_ext_port_caps(struct mlx5_ib_dev *dev, unsigned int port) · 290 unmodified lines
291291 if (!in_mad || !out_mad)
292292 goto out;
293293
294− init_query_mad(in_mad);
294+ ib_init_query_mad(in_mad);
295295 in_mad->attr_id = MLX5_ATTR_EXTENDED_PORT_INFO;
296296 in_mad->attr_mod = cpu_to_be32(port);
297297
@@ -318,7 +318,7 @@ static int mlx5_query_mad_ifc_smp_attr_node_info(struct ib_device *ibdev, · 20 unmodified lines
318318 if (!in_mad)
319319 return -ENOMEM;
320320
321− init_query_mad(in_mad);
321+ ib_init_query_mad(in_mad);
322322 in_mad->attr_id = IB_SMP_ATTR_NODE_INFO;
323323
324324 err = mlx5_MAD_IFC(to_mdev(ibdev), 1, 1, 1, NULL, NULL, in_mad,
@@ -405,7 +405,7 @@ int mlx5_query_mad_ifc_node_desc(struct mlx5_ib_dev *dev, char *node_desc) · 80 unmodified lines
405405 if (!in_mad || !out_mad)
406406 goto out;
407407
408− init_query_mad(in_mad);
408+ ib_init_query_mad(in_mad);
409409 in_mad->attr_id = IB_SMP_ATTR_NODE_DESC;
410410
411411 err = mlx5_MAD_IFC(dev, 1, 1, 1, NULL, NULL, in_mad, out_mad);
@@ -430,7 +430,7 @@ int mlx5_query_mad_ifc_node_guid(struct mlx5_ib_dev *dev, __be64 *node_guid) · 18 unmodified lines
430430 if (!in_mad || !out_mad)
431431 goto out;
432432
433− init_query_mad(in_mad);
433+ ib_init_query_mad(in_mad);
434434 in_mad->attr_id = IB_SMP_ATTR_NODE_INFO;
435435
436436 err = mlx5_MAD_IFC(dev, 1, 1, 1, NULL, NULL, in_mad, out_mad);
@@ -456,7 +456,7 @@ int mlx5_query_mad_ifc_pkey(struct ib_device *ibdev, u32 port, u16 index, · 19 unmodified lines
456456 if (!in_mad || !out_mad)
457457 goto out;
458458
459− init_query_mad(in_mad);
459+ ib_init_query_mad(in_mad);
460460 in_mad->attr_id = IB_SMP_ATTR_PKEY_TABLE;
461461 in_mad->attr_mod = cpu_to_be32(index / 32);
462462
@@ -485,7 +485,7 @@ int mlx5_query_mad_ifc_gids(struct ib_device *ibdev, u32 port, int index, · 22 unmodified lines
485485 if (!in_mad || !out_mad)
486486 goto out;
487487
488− init_query_mad(in_mad);
488+ ib_init_query_mad(in_mad);
489489 in_mad->attr_id = IB_SMP_ATTR_PORT_INFO;
490490 in_mad->attr_mod = cpu_to_be32(port);
491491
@@ -496,7 +496,7 @@ int mlx5_query_mad_ifc_gids(struct ib_device *ibdev, u32 port, int index, · 4 unmodified lines
496496
497497 memcpy(gid->raw, out_mad->data + 8, 8);
498498
499− init_query_mad(in_mad);
499+ ib_init_query_mad(in_mad);
500500 in_mad->attr_id = IB_SMP_ATTR_GUID_INFO;
501501 in_mad->attr_mod = cpu_to_be32(index / 8);
502502
@@ -530,7 +530,7 @@ int mlx5_query_mad_ifc_port(struct ib_device *ibdev, u32 port, · 27 unmodified lines
530530
531531 /* props being zeroed by the caller, avoid zeroing it here */
532532
533− init_query_mad(in_mad);
533+ ib_init_query_mad(in_mad);
534534 in_mad->attr_id = IB_SMP_ATTR_PORT_INFO;
535535 in_mad->attr_mod = cpu_to_be32(port);
536536
@@ -584,6 +584,11 @@ int mlx5_query_mad_ifc_port(struct ib_device *ibdev, u32 port, · 47 unmodified lines
584584 props->port_cap_flags2 & IB_PORT_LINK_SPEED_HDR_SUP)
585585 props->active_speed = IB_SPEED_HDR;
586586 break;
587+ case 8:
588+ if (props->port_cap_flags & IB_PORT_CAP_MASK2_SUP &&
589+ props->port_cap_flags2 & IB_PORT_LINK_SPEED_NDR_SUP)
590+ props->active_speed = IB_SPEED_NDR;
591+ break;
587592 }
588593 }
589594
@@ -591,7 +596,7 @@ int mlx5_query_mad_ifc_port(struct ib_device *ibdev, u32 port, · 1 unmodified line
591596 if (props->active_speed == 4) {
592597 if (dev->port_caps[port - 1].ext_port_cap &
593598 MLX_EXT_PORT_CAP_FLAG_EXTENDED_PORT_INFO) {
594− init_query_mad(in_mad);
599+ ib_init_query_mad(in_mad);
595600 in_mad->attr_id = MLX5_ATTR_EXTENDED_PORT_INFO;
596601 in_mad->attr_mod = cpu_to_be32(port);
597602
drivers/infiniband/hw/mlx5/mlx5_ib.h+2−10
@@ -665,9 +665,9 @@ struct mlx5_ib_mr { · 664 unmodified lines
665665
666666 /* User MR data */
667667 struct mlx5_cache_ent *cache_ent;
668+ /* Everything after cache_ent is zero'd when MR allocated */
668669 struct ib_umem *umem;
669670
670− /* This is zero'd when the MR is allocated */
671671 union {
672672 /* Used only while the MR is in the cache */
673673 struct {
@@ -719,7 +719,7 @@ struct mlx5_ib_mr { · 45 unmodified lines
719719 /* Zero the fields in the mr that are variant depending on usage */
720720 static inline void mlx5_clear_mr(struct mlx5_ib_mr *mr)
721721 {
722− memset(mr->out, 0, sizeof(*mr) - offsetof(struct mlx5_ib_mr, out));
722+ memset_after(mr, 0, cache_ent);
723723 }
724724
725725 static inline bool is_odp_mr(struct mlx5_ib_mr *mr)
@@ -1466,14 +1466,6 @@ extern const struct uapi_definition mlx5_ib_flow_defs[]; · 740 unmodified lines
14661466 extern const struct uapi_definition mlx5_ib_qos_defs[];
14671467 extern const struct uapi_definition mlx5_ib_std_types_defs[];
14681468
1469−static inline void init_query_mad(struct ib_smp *mad)
1470−{
1471− mad->base_version = 1;
1472− mad->mgmt_class = IB_MGMT_CLASS_SUBN_LID_ROUTED;
1473− mad->class_version = 1;
1474− mad->method = IB_MGMT_METHOD_GET;
1475−}
1476−
14771469 static inline int is_qp1(enum ib_qp_type qp_type)
14781470 {
14791471 return qp_type == MLX5_IB_QPT_HW_GSI || qp_type == IB_QPT_GSI;
drivers/infiniband/hw/mthca/mthca_allocator.c+5−10
@@ -51,7 +51,7 @@ u32 mthca_alloc(struct mthca_alloc *alloc) · 50 unmodified lines
5151 }
5252
5353 if (obj < alloc->max) {
54− set_bit(obj, alloc->table);
54+ __set_bit(obj, alloc->table);
5555 obj |= alloc->top;
5656 } else
5757 obj = -1;
@@ -69,7 +69,7 @@ void mthca_free(struct mthca_alloc *alloc, u32 obj) · 11 unmodified lines
6969
7070 spin_lock_irqsave(&alloc->lock, flags);
7171
72− clear_bit(obj, alloc->table);
72+ __clear_bit(obj, alloc->table);
7373 alloc->last = min(alloc->last, obj);
7474 alloc->top = (alloc->top + alloc->max) & alloc->mask;
7575
@@ -79,8 +79,6 @@ void mthca_free(struct mthca_alloc *alloc, u32 obj) · 3 unmodified lines
7979 int mthca_alloc_init(struct mthca_alloc *alloc, u32 num, u32 mask,
8080 u32 reserved)
8181 {
82− int i;
83−
8482 /* num must be a power of 2 */
8583 if (num != 1 << (ffs(num) - 1))
8684 return -EINVAL;
@@ -90,21 +88,18 @@ int mthca_alloc_init(struct mthca_alloc *alloc, u32 num, u32 mask, · 3 unmodified lines
9088 alloc->max = num;
9189 alloc->mask = mask;
9290 spin_lock_init(&alloc->lock);
93− alloc->table = kmalloc_array(BITS_TO_LONGS(num), sizeof(long),
94− GFP_KERNEL);
91+ alloc->table = bitmap_zalloc(num, GFP_KERNEL);
9592 if (!alloc->table)
9693 return -ENOMEM;
9794
98− bitmap_zero(alloc->table, num);
99− for (i = 0; i < reserved; ++i)
100− set_bit(i, alloc->table);
95+ bitmap_set(alloc->table, 0, reserved);
10196
10297 return 0;
10398 }
10499
105100 void mthca_alloc_cleanup(struct mthca_alloc *alloc)
106101 {
107− kfree(alloc->table);
102+ bitmap_free(alloc->table);
108103 }
109104
110105 /*
drivers/infiniband/hw/mthca/mthca_mr.c+11−14
@@ -101,13 +101,13 @@ static u32 mthca_buddy_alloc(struct mthca_buddy *buddy, int order) · 100 unmodified lines
101101 return -1;
102102
103103 found:
104− clear_bit(seg, buddy->bits[o]);
104+ __clear_bit(seg, buddy->bits[o]);
105105 --buddy->num_free[o];
106106
107107 while (o > order) {
108108 --o;
109109 seg <<= 1;
110− set_bit(seg ^ 1, buddy->bits[o]);
110+ __set_bit(seg ^ 1, buddy->bits[o]);
111111 ++buddy->num_free[o];
112112 }
113113
@@ -125,13 +125,13 @@ static void mthca_buddy_free(struct mthca_buddy *buddy, u32 seg, int order) · 11 unmodified lines
125125 spin_lock(&buddy->lock);
126126
127127 while (test_bit(seg ^ 1, buddy->bits[order])) {
128− clear_bit(seg ^ 1, buddy->bits[order]);
128+ __clear_bit(seg ^ 1, buddy->bits[order]);
129129 --buddy->num_free[order];
130130 seg >>= 1;
131131 ++order;
132132 }
133133
134− set_bit(seg, buddy->bits[order]);
134+ __set_bit(seg, buddy->bits[order]);
135135 ++buddy->num_free[order];
136136
137137 spin_unlock(&buddy->lock);
@@ -139,7 +139,7 @@ static void mthca_buddy_free(struct mthca_buddy *buddy, u32 seg, int order) · 1 unmodified line
139139
140140 static int mthca_buddy_init(struct mthca_buddy *buddy, int max_order)
141141 {
142− int i, s;
142+ int i;
143143
144144 buddy->max_order = max_order;
145145 spin_lock_init(&buddy->lock);
@@ -152,22 +152,20 @@ static int mthca_buddy_init(struct mthca_buddy *buddy, int max_order) · 6 unmodified lines
152152 goto err_out;
153153
154154 for (i = 0; i <= buddy->max_order; ++i) {
155− s = BITS_TO_LONGS(1 << (buddy->max_order - i));
156− buddy->bits[i] = kmalloc_array(s, sizeof(long), GFP_KERNEL);
155+ buddy->bits[i] = bitmap_zalloc(1 << (buddy->max_order - i),
156+ GFP_KERNEL);
157157 if (!buddy->bits[i])
158158 goto err_out_free;
159− bitmap_zero(buddy->bits[i],
160− 1 << (buddy->max_order - i));
161159 }
162160
163− set_bit(0, buddy->bits[buddy->max_order]);
161+ __set_bit(0, buddy->bits[buddy->max_order]);
164162 buddy->num_free[buddy->max_order] = 1;
165163
166164 return 0;
167165
168166 err_out_free:
169167 for (i = 0; i <= buddy->max_order; ++i)
170− kfree(buddy->bits[i]);
168+ bitmap_free(buddy->bits[i]);
171169
172170 err_out:
173171 kfree(buddy->bits);
@@ -181,7 +179,7 @@ static void mthca_buddy_cleanup(struct mthca_buddy *buddy) · 7 unmodified lines
181179 int i;
182180
183181 for (i = 0; i <= buddy->max_order; ++i)
184− kfree(buddy->bits[i]);
182+ bitmap_free(buddy->bits[i]);
185183
186184 kfree(buddy->bits);
187185 kfree(buddy->num_free);
@@ -469,8 +467,7 @@ int mthca_mr_alloc(struct mthca_dev *dev, u32 pd, int buffer_size_shift, · 281 unmodified lines
469467 mpt_entry->start = cpu_to_be64(iova);
470468 mpt_entry->length = cpu_to_be64(total_size);
471469
472− memset(&mpt_entry->lkey, 0,
473− sizeof *mpt_entry - offsetof(struct mthca_mpt_entry, lkey));
470+ memset_startat(mpt_entry, 0, lkey);
474471
475472 if (mr->mtt)
476473 mpt_entry->mtt_seg =
drivers/infiniband/hw/mthca/mthca_provider.c+6−14
@@ -50,14 +50,6 @@ · 49 unmodified lines
5050 #include <rdma/mthca-abi.h>
5151 #include "mthca_memfree.h"
5252
53−static void init_query_mad(struct ib_smp *mad)
54−{
55− mad->base_version = 1;
56− mad->mgmt_class = IB_MGMT_CLASS_SUBN_LID_ROUTED;
57− mad->class_version = 1;
58− mad->method = IB_MGMT_METHOD_GET;
59−}
60−
6153 static int mthca_query_device(struct ib_device *ibdev, struct ib_device_attr *props,
6254 struct ib_udata *uhw)
6355 {
@@ -78,7 +70,7 @@ static int mthca_query_device(struct ib_device *ibdev, struct ib_device_attr *pr · 14 unmodified lines
7870
7971 props->fw_ver = mdev->fw_ver;
8072
81− init_query_mad(in_mad);
73+ ib_init_query_mad(in_mad);
8274 in_mad->attr_id = IB_SMP_ATTR_NODE_INFO;
8375
8476 err = mthca_MAD_IFC(mdev, 1, 1,
@@ -140,7 +132,7 @@ static int mthca_query_port(struct ib_device *ibdev, · 55 unmodified lines
140132
141133 /* props being zeroed by the caller, avoid zeroing it here */
142134
143− init_query_mad(in_mad);
135+ ib_init_query_mad(in_mad);
144136 in_mad->attr_id = IB_SMP_ATTR_PORT_INFO;
145137 in_mad->attr_mod = cpu_to_be32(port);
146138
@@ -234,7 +226,7 @@ static int mthca_query_pkey(struct ib_device *ibdev, · 87 unmodified lines
234226 if (!in_mad || !out_mad)
235227 goto out;
236228
237− init_query_mad(in_mad);
229+ ib_init_query_mad(in_mad);
238230 in_mad->attr_id = IB_SMP_ATTR_PKEY_TABLE;
239231 in_mad->attr_mod = cpu_to_be32(index / 32);
240232
@@ -263,7 +255,7 @@ static int mthca_query_gid(struct ib_device *ibdev, u32 port, · 22 unmodified lines
263255 if (!in_mad || !out_mad)
264256 goto out;
265257
266− init_query_mad(in_mad);
258+ ib_init_query_mad(in_mad);
267259 in_mad->attr_id = IB_SMP_ATTR_PORT_INFO;
268260 in_mad->attr_mod = cpu_to_be32(port);
269261
@@ -274,7 +266,7 @@ static int mthca_query_gid(struct ib_device *ibdev, u32 port, · 4 unmodified lines
274266
275267 memcpy(gid->raw, out_mad->data + 8, 8);
276268
277− init_query_mad(in_mad);
269+ ib_init_query_mad(in_mad);
278270 in_mad->attr_id = IB_SMP_ATTR_GUID_INFO;
279271 in_mad->attr_mod = cpu_to_be32(index / 8);
280272
@@ -1006,7 +998,7 @@ static int mthca_init_node_data(struct mthca_dev *dev) · 725 unmodified lines
1006998 if (!in_mad || !out_mad)
1007999 goto out;
10081000
1009− init_query_mad(in_mad);
1001+ ib_init_query_mad(in_mad);
10101002 in_mad->attr_id = IB_SMP_ATTR_NODE_DESC;
10111003
10121004 err = mthca_MAD_IFC(dev, 1, 1,
drivers/infiniband/hw/ocrdma/ocrdma_hw.c+6−10
@@ -1506,7 +1506,6 @@ int ocrdma_mbx_dealloc_pd(struct ocrdma_dev *dev, struct ocrdma_pd *pd) · 1505 unmodified lines
15061506 static int ocrdma_mbx_alloc_pd_range(struct ocrdma_dev *dev)
15071507 {
15081508 int status = -ENOMEM;
1509− size_t pd_bitmap_size;
15101509 struct ocrdma_alloc_pd_range *cmd;
15111510 struct ocrdma_alloc_pd_range_rsp *rsp;
15121511
@@ -1528,10 +1527,8 @@ static int ocrdma_mbx_alloc_pd_range(struct ocrdma_dev *dev) · 15 unmodified lines
15281527 dev->pd_mgr->pd_dpp_start = rsp->dpp_page_pdid &
15291528 OCRDMA_ALLOC_PD_RNG_RSP_START_PDID_MASK;
15301529 dev->pd_mgr->max_dpp_pd = rsp->pd_count;
1531− pd_bitmap_size =
1532− BITS_TO_LONGS(rsp->pd_count) * sizeof(long);
1533− dev->pd_mgr->pd_dpp_bitmap = kzalloc(pd_bitmap_size,
1534− GFP_KERNEL);
1530+ dev->pd_mgr->pd_dpp_bitmap = bitmap_zalloc(rsp->pd_count,
1531+ GFP_KERNEL);
15351532 }
15361533 kfree(cmd);
15371534 }
@@ -1547,9 +1544,8 @@ static int ocrdma_mbx_alloc_pd_range(struct ocrdma_dev *dev) · 9 unmodified lines
15471544 dev->pd_mgr->pd_norm_start = rsp->dpp_page_pdid &
15481545 OCRDMA_ALLOC_PD_RNG_RSP_START_PDID_MASK;
15491546 dev->pd_mgr->max_normal_pd = rsp->pd_count;
1550− pd_bitmap_size = BITS_TO_LONGS(rsp->pd_count) * sizeof(long);
1551− dev->pd_mgr->pd_norm_bitmap = kzalloc(pd_bitmap_size,
1552− GFP_KERNEL);
1547+ dev->pd_mgr->pd_norm_bitmap = bitmap_zalloc(rsp->pd_count,
1548+ GFP_KERNEL);
15531549 }
15541550 kfree(cmd);
15551551
@@ -1611,8 +1607,8 @@ void ocrdma_alloc_pd_pool(struct ocrdma_dev *dev) · 55 unmodified lines
16111607 static void ocrdma_free_pd_pool(struct ocrdma_dev *dev)
16121608 {
16131609 ocrdma_mbx_dealloc_pd_range(dev);
1614− kfree(dev->pd_mgr->pd_norm_bitmap);
1615− kfree(dev->pd_mgr->pd_dpp_bitmap);
1610+ bitmap_free(dev->pd_mgr->pd_norm_bitmap);
1611+ bitmap_free(dev->pd_mgr->pd_dpp_bitmap);
16161612 kfree(dev->pd_mgr);
16171613 }
16181614
drivers/infiniband/hw/ocrdma/ocrdma_main.c+2−15
@@ -62,20 +62,6 @@ MODULE_DESCRIPTION(OCRDMA_ROCE_DRV_DESC " " OCRDMA_ROCE_DRV_VERSION); · 61 unmodified lines
6262 MODULE_AUTHOR("Emulex Corporation");
6363 MODULE_LICENSE("Dual BSD/GPL");
6464
65−void ocrdma_get_guid(struct ocrdma_dev *dev, u8 *guid)
66−{
67− u8 mac_addr[6];
68−
69− memcpy(&mac_addr[0], &dev->nic_info.mac_addr[0], ETH_ALEN);
70− guid[0] = mac_addr[0] ^ 2;
71− guid[1] = mac_addr[1];
72− guid[2] = mac_addr[2];
73− guid[3] = 0xff;
74− guid[4] = 0xfe;
75− guid[5] = mac_addr[3];
76− guid[6] = mac_addr[4];
77− guid[7] = mac_addr[5];
78−}
7965 static enum rdma_link_layer ocrdma_link_layer(struct ib_device *device,
8066 u32 port_num)
8167 {
@@ -203,7 +189,8 @@ static int ocrdma_register_device(struct ocrdma_dev *dev) · 121 unmodified lines
203189 {
204190 int ret;
205191
206− ocrdma_get_guid(dev, (u8 *)&dev->ibdev.node_guid);
192+ addrconf_addr_eui48((u8 *)&dev->ibdev.node_guid,
193+ dev->nic_info.mac_addr);
207194 BUILD_BUG_ON(sizeof(OCRDMA_NODE_DESC) > IB_DEVICE_NODE_DESC_MAX);
208195 memcpy(dev->ibdev.node_desc, OCRDMA_NODE_DESC,
209196 sizeof(OCRDMA_NODE_DESC));
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c+8−10
@@ -41,6 +41,7 @@ · 40 unmodified lines
4141 */
4242
4343 #include <linux/dma-mapping.h>
44+#include <net/addrconf.h>
4445 #include <rdma/ib_verbs.h>
4546 #include <rdma/ib_user_verbs.h>
4647 #include <rdma/iw_cm.h>
@@ -74,7 +75,8 @@ int ocrdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr, · 27 unmodified lines
7475 memset(attr, 0, sizeof *attr);
7576 memcpy(&attr->fw_ver, &dev->attr.fw_ver[0],
7677 min(sizeof(dev->attr.fw_ver), sizeof(attr->fw_ver)));
77− ocrdma_get_guid(dev, (u8 *)&attr->sys_image_guid);
78+ addrconf_addr_eui48((u8 *)&attr->sys_image_guid,
79+ dev->nic_info.mac_addr);
7880 attr->max_mr_size = dev->attr.max_mr_size;
7981 attr->page_size_cap = 0xffff000;
8082 attr->vendor_id = dev->nic_info.pdev->vendor;
@@ -245,13 +247,13 @@ static bool ocrdma_search_mmap(struct ocrdma_ucontext *uctx, u64 phy_addr, · 164 unmodified lines
245247 static u16 _ocrdma_pd_mgr_get_bitmap(struct ocrdma_dev *dev, bool dpp_pool)
246248 {
247249 u16 pd_bitmap_idx = 0;
248− const unsigned long *pd_bitmap;
250+ unsigned long *pd_bitmap;
249251
250252 if (dpp_pool) {
251253 pd_bitmap = dev->pd_mgr->pd_dpp_bitmap;
252254 pd_bitmap_idx = find_first_zero_bit(pd_bitmap,
253255 dev->pd_mgr->max_dpp_pd);
254− __set_bit(pd_bitmap_idx, dev->pd_mgr->pd_dpp_bitmap);
256+ __set_bit(pd_bitmap_idx, pd_bitmap);
255257 dev->pd_mgr->pd_dpp_count++;
256258 if (dev->pd_mgr->pd_dpp_count > dev->pd_mgr->pd_dpp_thrsh)
257259 dev->pd_mgr->pd_dpp_thrsh = dev->pd_mgr->pd_dpp_count;
@@ -259,7 +261,7 @@ static u16 _ocrdma_pd_mgr_get_bitmap(struct ocrdma_dev *dev, bool dpp_pool) · 1 unmodified line
259261 pd_bitmap = dev->pd_mgr->pd_norm_bitmap;
260262 pd_bitmap_idx = find_first_zero_bit(pd_bitmap,
261263 dev->pd_mgr->max_normal_pd);
262− __set_bit(pd_bitmap_idx, dev->pd_mgr->pd_norm_bitmap);
264+ __set_bit(pd_bitmap_idx, pd_bitmap);
263265 dev->pd_mgr->pd_norm_count++;
264266 if (dev->pd_mgr->pd_norm_count > dev->pd_mgr->pd_norm_thrsh)
265267 dev->pd_mgr->pd_norm_thrsh = dev->pd_mgr->pd_norm_count;
@@ -1844,12 +1846,10 @@ int ocrdma_modify_srq(struct ib_srq *ibsrq, · 1578 unmodified lines
18441846
18451847 int ocrdma_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *srq_attr)
18461848 {
1847− int status;
18481849 struct ocrdma_srq *srq;
18491850
18501851 srq = get_ocrdma_srq(ibsrq);
1851− status = ocrdma_mbx_query_srq(srq, srq_attr);
1852− return status;
1852+ return ocrdma_mbx_query_srq(srq, srq_attr);
18531853 }
18541854
18551855 int ocrdma_destroy_srq(struct ib_srq *ibsrq, struct ib_udata *udata)
@@ -1960,7 +1960,6 @@ static int ocrdma_build_inline_sges(struct ocrdma_qp *qp, · 104 unmodified lines
19601960 static int ocrdma_build_send(struct ocrdma_qp *qp, struct ocrdma_hdr_wqe *hdr,
19611961 const struct ib_send_wr *wr)
19621962 {
1963− int status;
19641963 struct ocrdma_sge *sge;
19651964 u32 wqe_size = sizeof(*hdr);
19661965
@@ -1972,8 +1971,7 @@ static int ocrdma_build_send(struct ocrdma_qp *qp, struct ocrdma_hdr_wqe *hdr, · 5 unmodified lines
19721971 sge = (struct ocrdma_sge *)(hdr + 1);
19731972 }
19741973
1975− status = ocrdma_build_inline_sges(qp, hdr, sge, wr, wqe_size);
1976− return status;
1974+ return ocrdma_build_inline_sges(qp, hdr, sge, wr, wqe_size);
19771975 }
19781976
19791977 static int ocrdma_build_write(struct ocrdma_qp *qp, struct ocrdma_hdr_wqe *hdr,
drivers/infiniband/hw/ocrdma/ocrdma_verbs.h+0−1
@@ -59,7 +59,6 @@ int ocrdma_query_port(struct ib_device *ibdev, u32 port, · 58 unmodified lines
5959 enum rdma_protocol_type
6060 ocrdma_query_protocol(struct ib_device *device, u32 port_num);
6161
62−void ocrdma_get_guid(struct ocrdma_dev *, u8 *guid);
6362 int ocrdma_query_pkey(struct ib_device *ibdev, u32 port, u16 index, u16 *pkey);
6463
6564 int ocrdma_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata);
drivers/infiniband/hw/qedr/verbs.c+2−0
@@ -1931,6 +1931,7 @@ static int qedr_create_user_qp(struct qedr_dev *dev, · 1930 unmodified lines
19311931 /* db offset was calculated in copy_qp_uresp, now set in the user q */
19321932 if (qedr_qp_has_sq(qp)) {
19331933 qp->usq.db_addr = ctx->dpi_addr + uresp.sq_db_offset;
1934+ qp->sq.max_wr = attrs->cap.max_send_wr;
19341935 rc = qedr_db_recovery_add(dev, qp->usq.db_addr,
19351936 &qp->usq.db_rec_data->db_data,
19361937 DB_REC_WIDTH_32B,
@@ -1941,6 +1942,7 @@ static int qedr_create_user_qp(struct qedr_dev *dev, · 4 unmodified lines
19411942
19421943 if (qedr_qp_has_rq(qp)) {
19431944 qp->urq.db_addr = ctx->dpi_addr + uresp.rq_db_offset;
1945+ qp->rq.max_wr = attrs->cap.max_recv_wr;
19441946 rc = qedr_db_recovery_add(dev, qp->urq.db_addr,
19451947 &qp->urq.db_rec_data->db_data,
19461948 DB_REC_WIDTH_32B,
drivers/infiniband/hw/qib/qib_iba6120.c+1−1
@@ -3030,7 +3030,7 @@ static int qib_6120_ib_updown(struct qib_pportdata *ppd, int ibup, u64 ibcs) · 3029 unmodified lines
30303030
30313031 /* Does read/modify/write to appropriate registers to
30323032 * set output and direction bits selected by mask.
3033− * these are in their canonical postions (e.g. lsb of
3033+ * these are in their canonical positions (e.g. lsb of
30343034 * dir will end up in D48 of extctrl on existing chips).
30353035 * returns contents of GP Inputs.
30363036 */
drivers/infiniband/hw/qib/qib_iba7220.c+1−1
@@ -3742,7 +3742,7 @@ static int qib_7220_ib_updown(struct qib_pportdata *ppd, int ibup, u64 ibcs) · 3741 unmodified lines
37423742 /*
37433743 * Does read/modify/write to appropriate registers to
37443744 * set output and direction bits selected by mask.
3745− * these are in their canonical postions (e.g. lsb of
3745+ * these are in their canonical positions (e.g. lsb of
37463746 * dir will end up in D48 of extctrl on existing chips).
37473747 * returns contents of GP Inputs.
37483748 */
drivers/infiniband/hw/qib/qib_iba7322.c+1−1
@@ -5665,7 +5665,7 @@ static int qib_7322_ib_updown(struct qib_pportdata *ppd, int ibup, u64 ibcs) · 5664 unmodified lines
56655665 /*
56665666 * Does read/modify/write to appropriate registers to
56675667 * set output and direction bits selected by mask.
5668− * these are in their canonical postions (e.g. lsb of
5668+ * these are in their canonical positions (e.g. lsb of
56695669 * dir will end up in D48 of extctrl on existing chips).
56705670 * returns contents of GP Inputs.
56715671 */
drivers/infiniband/hw/usnic/usnic_ib_sysfs.c+2−1
@@ -243,10 +243,11 @@ static struct attribute *usnic_ib_qpn_default_attrs[] = { · 242 unmodified lines
243243 &qpn_attr_summary.attr,
244244 NULL
245245 };
246+ATTRIBUTE_GROUPS(usnic_ib_qpn_default);
246247
247248 static struct kobj_type usnic_ib_qpn_type = {
248249 .sysfs_ops = &usnic_ib_qpn_sysfs_ops,
249− .default_attrs = usnic_ib_qpn_default_attrs
250+ .default_groups = usnic_ib_qpn_default_groups,
250251 };
251252
252253 int usnic_ib_sysfs_register_usdev(struct usnic_ib_dev *us_ibdev)
drivers/infiniband/hw/usnic/usnic_ib_verbs.c+3−5
@@ -442,12 +442,10 @@ int usnic_ib_query_gid(struct ib_device *ibdev, u32 port, int index, · 441 unmodified lines
442442 int usnic_ib_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
443443 {
444444 struct usnic_ib_pd *pd = to_upd(ibpd);
445− void *umem_pd;
446445
447− umem_pd = pd->umem_pd = usnic_uiom_alloc_pd();
448− if (IS_ERR_OR_NULL(umem_pd)) {
449− return umem_pd ? PTR_ERR(umem_pd) : -ENOMEM;
450− }
446+ pd->umem_pd = usnic_uiom_alloc_pd();
447+ if (IS_ERR(pd->umem_pd))
448+ return PTR_ERR(pd->umem_pd);
451449
452450 return 0;
453451 }
drivers/infiniband/hw/vmw_pvrdma/pvrdma_doorbell.c+5−5
@@ -63,12 +63,12 @@ int pvrdma_uar_table_init(struct pvrdma_dev *dev) · 62 unmodified lines
6363 tbl->max = num;
6464 tbl->mask = mask;
6565 spin_lock_init(&tbl->lock);
66− tbl->table = kcalloc(BITS_TO_LONGS(num), sizeof(long), GFP_KERNEL);
66+ tbl->table = bitmap_zalloc(num, GFP_KERNEL);
6767 if (!tbl->table)
6868 return -ENOMEM;
6969
7070 /* 0th UAR is taken by the device. */
71− set_bit(0, tbl->table);
71+ __set_bit(0, tbl->table);
7272
7373 return 0;
7474 }
@@ -77,7 +77,7 @@ void pvrdma_uar_table_cleanup(struct pvrdma_dev *dev) · 2 unmodified lines
7777 {
7878 struct pvrdma_id_table *tbl = &dev->uar_table.tbl;
7979
80− kfree(tbl->table);
80+ bitmap_free(tbl->table);
8181 }
8282
8383 int pvrdma_uar_alloc(struct pvrdma_dev *dev, struct pvrdma_uar_map *uar)
@@ -100,7 +100,7 @@ int pvrdma_uar_alloc(struct pvrdma_dev *dev, struct pvrdma_uar_map *uar) · 16 unmodified lines
100100 return -ENOMEM;
101101 }
102102
103− set_bit(obj, tbl->table);
103+ __set_bit(obj, tbl->table);
104104 obj |= tbl->top;
105105
106106 spin_unlock_irqrestore(&tbl->lock, flags);
@@ -120,7 +120,7 @@ void pvrdma_uar_free(struct pvrdma_dev *dev, struct pvrdma_uar_map *uar) · 13 unmodified lines
120120
121121 obj = uar->index & (tbl->max - 1);
122122 spin_lock_irqsave(&tbl->lock, flags);
123− clear_bit(obj, tbl->table);
123+ __clear_bit(obj, tbl->table);
124124 tbl->last = min(tbl->last, obj);
125125 tbl->top = (tbl->top + tbl->max) & tbl->mask;
126126 spin_unlock_irqrestore(&tbl->lock, flags);
drivers/infiniband/sw/rxe/Makefile+0−1
@@ -22,5 +22,4 @@ rdma_rxe-y := \ · 21 unmodified lines
2222 rxe_mcast.o \
2323 rxe_task.o \
2424 rxe_net.o \
25− rxe_sysfs.o \
2625 rxe_hw_counters.o
drivers/infiniband/sw/rxe/rxe.c+0−4
@@ -13,8 +13,6 @@ MODULE_AUTHOR("Bob Pearson, Frank Zago, John Groves, Kamal Heib"); · 12 unmodified lines
1313 MODULE_DESCRIPTION("Soft RDMA transport");
1414 MODULE_LICENSE("Dual BSD/GPL");
1515
16−bool rxe_initialized;
17−
1816 /* free resources for a rxe device all objects created for this device must
1917 * have been destroyed
2018 */
@@ -290,7 +288,6 @@ static int __init rxe_module_init(void) · 269 unmodified lines
290288 return err;
291289
292290 rdma_link_register(&rxe_link_ops);
293− rxe_initialized = true;
294291 pr_info("loaded\n");
295292 return 0;
296293 }
@@ -301,7 +298,6 @@ static void __exit rxe_module_exit(void) · 4 unmodified lines
301298 ib_unregister_driver(RDMA_DRIVER_RXE);
302299 rxe_net_exit();
303300
304− rxe_initialized = false;
305301 pr_info("unloaded\n");
306302 }
307303
drivers/infiniband/sw/rxe/rxe.h+0−2
@@ -39,8 +39,6 @@ · 38 unmodified lines
3939
4040 #define RXE_ROCE_V2_SPORT (0xc000)
4141
42−extern bool rxe_initialized;
43−
4442 void rxe_set_mtu(struct rxe_dev *rxe, unsigned int dev_mtu);
4543
4644 int rxe_add(struct rxe_dev *rxe, unsigned int mtu, const char *ibdev_name);
drivers/infiniband/sw/rxe/rxe_comp.c+3−5
@@ -458,8 +458,6 @@ static inline enum comp_state complete_ack(struct rxe_qp *qp, · 457 unmodified lines
458458 struct rxe_pkt_info *pkt,
459459 struct rxe_send_wqe *wqe)
460460 {
461− unsigned long flags;
462−
463461 if (wqe->has_rd_atomic) {
464462 wqe->has_rd_atomic = 0;
465463 atomic_inc(&qp->req.rd_atomic);
@@ -472,11 +470,11 @@ static inline enum comp_state complete_ack(struct rxe_qp *qp, · 6 unmodified lines
472470
473471 if (unlikely(qp->req.state == QP_STATE_DRAIN)) {
474472 /* state_lock used by requester & completer */
475− spin_lock_irqsave(&qp->state_lock, flags);
473+ spin_lock_bh(&qp->state_lock);
476474 if ((qp->req.state == QP_STATE_DRAIN) &&
477475 (qp->comp.psn == qp->req.psn)) {
478476 qp->req.state = QP_STATE_DRAINED;
479− spin_unlock_irqrestore(&qp->state_lock, flags);
477+ spin_unlock_bh(&qp->state_lock);
480478
481479 if (qp->ibqp.event_handler) {
482480 struct ib_event ev;
@@ -488,7 +486,7 @@ static inline enum comp_state complete_ack(struct rxe_qp *qp, · 5 unmodified lines
488486 qp->ibqp.qp_context);
489487 }
490488 } else {
491− spin_unlock_irqrestore(&qp->state_lock, flags);
489+ spin_unlock_bh(&qp->state_lock);
492490 }
493491 }
494492
drivers/infiniband/sw/rxe/rxe_cq.c+10−14
@@ -42,14 +42,13 @@ err1: · 41 unmodified lines
4242 static void rxe_send_complete(struct tasklet_struct *t)
4343 {
4444 struct rxe_cq *cq = from_tasklet(cq, t, comp_task);
45− unsigned long flags;
4645
47− spin_lock_irqsave(&cq->cq_lock, flags);
46+ spin_lock_bh(&cq->cq_lock);
4847 if (cq->is_dying) {
49− spin_unlock_irqrestore(&cq->cq_lock, flags);
48+ spin_unlock_bh(&cq->cq_lock);
5049 return;
5150 }
52− spin_unlock_irqrestore(&cq->cq_lock, flags);
51+ spin_unlock_bh(&cq->cq_lock);
5352
5453 cq->ibcq.comp_handler(&cq->ibcq, cq->ibcq.cq_context);
5554 }
@@ -106,15 +105,14 @@ int rxe_cq_resize_queue(struct rxe_cq *cq, int cqe, · 50 unmodified lines
106105 int rxe_cq_post(struct rxe_cq *cq, struct rxe_cqe *cqe, int solicited)
107106 {
108107 struct ib_event ev;
109− unsigned long flags;
110108 int full;
111109 void *addr;
112110
113− spin_lock_irqsave(&cq->cq_lock, flags);
111+ spin_lock_bh(&cq->cq_lock);
114112
115113 full = queue_full(cq->queue, QUEUE_TYPE_TO_CLIENT);
116114 if (unlikely(full)) {
117− spin_unlock_irqrestore(&cq->cq_lock, flags);
115+ spin_unlock_bh(&cq->cq_lock);
118116 if (cq->ibcq.event_handler) {
119117 ev.device = cq->ibcq.device;
120118 ev.element.cq = &cq->ibcq;
@@ -130,7 +128,7 @@ int rxe_cq_post(struct rxe_cq *cq, struct rxe_cqe *cqe, int solicited) · 9 unmodified lines
130128
131129 queue_advance_producer(cq->queue, QUEUE_TYPE_TO_CLIENT);
132130
133− spin_unlock_irqrestore(&cq->cq_lock, flags);
131+ spin_unlock_bh(&cq->cq_lock);
134132
135133 if ((cq->notify == IB_CQ_NEXT_COMP) ||
136134 (cq->notify == IB_CQ_SOLICITED && solicited)) {
@@ -143,16 +141,14 @@ int rxe_cq_post(struct rxe_cq *cq, struct rxe_cqe *cqe, int solicited) · 6 unmodified lines
143141
144142 void rxe_cq_disable(struct rxe_cq *cq)
145143 {
146− unsigned long flags;
147−
148− spin_lock_irqsave(&cq->cq_lock, flags);
144+ spin_lock_bh(&cq->cq_lock);
149145 cq->is_dying = true;
150− spin_unlock_irqrestore(&cq->cq_lock, flags);
146+ spin_unlock_bh(&cq->cq_lock);
151147 }
152148
153−void rxe_cq_cleanup(struct rxe_pool_entry *arg)
149+void rxe_cq_cleanup(struct rxe_pool_elem *elem)
154150 {
155− struct rxe_cq *cq = container_of(arg, typeof(*cq), pelem);
151+ struct rxe_cq *cq = container_of(elem, typeof(*cq), elem);
156152
157153 if (cq->queue)
158154 rxe_queue_cleanup(cq->queue);
drivers/infiniband/sw/rxe/rxe_loc.h+5−5
@@ -37,7 +37,7 @@ int rxe_cq_post(struct rxe_cq *cq, struct rxe_cqe *cqe, int solicited); · 36 unmodified lines
3737
3838 void rxe_cq_disable(struct rxe_cq *cq);
3939
40−void rxe_cq_cleanup(struct rxe_pool_entry *arg);
40+void rxe_cq_cleanup(struct rxe_pool_elem *arg);
4141
4242 /* rxe_mcast.c */
4343 int rxe_mcast_get_grp(struct rxe_dev *rxe, union ib_gid *mgid,
@@ -51,7 +51,7 @@ int rxe_mcast_drop_grp_elem(struct rxe_dev *rxe, struct rxe_qp *qp, · 7 unmodified lines
5151
5252 void rxe_drop_all_mcast_groups(struct rxe_qp *qp);
5353
54−void rxe_mc_cleanup(struct rxe_pool_entry *arg);
54+void rxe_mc_cleanup(struct rxe_pool_elem *arg);
5555
5656 /* rxe_mmap.c */
5757 struct rxe_mmap_info {
@@ -89,7 +89,7 @@ int rxe_invalidate_mr(struct rxe_qp *qp, u32 rkey); · 31 unmodified lines
8989 int rxe_reg_fast_mr(struct rxe_qp *qp, struct rxe_send_wqe *wqe);
9090 int rxe_mr_set_page(struct ib_mr *ibmr, u64 addr);
9191 int rxe_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata);
92−void rxe_mr_cleanup(struct rxe_pool_entry *arg);
92+void rxe_mr_cleanup(struct rxe_pool_elem *arg);
9393
9494 /* rxe_mw.c */
9595 int rxe_alloc_mw(struct ib_mw *ibmw, struct ib_udata *udata);
@@ -97,7 +97,7 @@ int rxe_dealloc_mw(struct ib_mw *ibmw); · 1 unmodified line
9797 int rxe_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe);
9898 int rxe_invalidate_mw(struct rxe_qp *qp, u32 rkey);
9999 struct rxe_mw *rxe_lookup_mw(struct rxe_qp *qp, int access, u32 rkey);
100−void rxe_mw_cleanup(struct rxe_pool_entry *arg);
100+void rxe_mw_cleanup(struct rxe_pool_elem *arg);
101101
102102 /* rxe_net.c */
103103 struct sk_buff *rxe_init_packet(struct rxe_dev *rxe, struct rxe_av *av,
@@ -131,7 +131,7 @@ void rxe_qp_error(struct rxe_qp *qp); · 27 unmodified lines
131131
132132 void rxe_qp_destroy(struct rxe_qp *qp);
133133
134−void rxe_qp_cleanup(struct rxe_pool_entry *arg);
134+void rxe_qp_cleanup(struct rxe_pool_elem *elem);
135135
136136 static inline int qp_num(struct rxe_qp *qp)
137137 {
drivers/infiniband/sw/rxe/rxe_mcast.c+5−6
@@ -40,12 +40,11 @@ int rxe_mcast_get_grp(struct rxe_dev *rxe, union ib_gid *mgid, · 39 unmodified lines
4040 int err;
4141 struct rxe_mc_grp *grp;
4242 struct rxe_pool *pool = &rxe->mc_grp_pool;
43− unsigned long flags;
4443
4544 if (rxe->attr.max_mcast_qp_attach == 0)
4645 return -EINVAL;
4746
48− write_lock_irqsave(&pool->pool_lock, flags);
47+ write_lock_bh(&pool->pool_lock);
4948
5049 grp = rxe_pool_get_key_locked(pool, mgid);
5150 if (grp)
@@ -53,13 +52,13 @@ int rxe_mcast_get_grp(struct rxe_dev *rxe, union ib_gid *mgid, · 1 unmodified line
5352
5453 grp = create_grp(rxe, pool, mgid);
5554 if (IS_ERR(grp)) {
56− write_unlock_irqrestore(&pool->pool_lock, flags);
55+ write_unlock_bh(&pool->pool_lock);
5756 err = PTR_ERR(grp);
5857 return err;
5958 }
6059
6160 done:
62− write_unlock_irqrestore(&pool->pool_lock, flags);
61+ write_unlock_bh(&pool->pool_lock);
6362 *grp_p = grp;
6463 return 0;
6564 }
@@ -169,9 +168,9 @@ void rxe_drop_all_mcast_groups(struct rxe_qp *qp) · 103 unmodified lines
169168 }
170169 }
171170
172−void rxe_mc_cleanup(struct rxe_pool_entry *arg)
171+void rxe_mc_cleanup(struct rxe_pool_elem *elem)
173172 {
174− struct rxe_mc_grp *grp = container_of(arg, typeof(*grp), pelem);
173+ struct rxe_mc_grp *grp = container_of(elem, typeof(*grp), elem);
175174 struct rxe_dev *rxe = grp->rxe;
176175
177176 rxe_drop_key(grp);
drivers/infiniband/sw/rxe/rxe_mr.c+3−3
@@ -50,7 +50,7 @@ int mr_check_range(struct rxe_mr *mr, u64 iova, size_t length) · 49 unmodified lines
5050
5151 static void rxe_mr_init(int access, struct rxe_mr *mr)
5252 {
53− u32 lkey = mr->pelem.index << 8 | rxe_get_next_key(-1);
53+ u32 lkey = mr->elem.index << 8 | rxe_get_next_key(-1);
5454 u32 rkey = (access & IB_ACCESS_REMOTE) ? lkey : 0;
5555
5656 /* set ibmr->l/rkey and also copy into private l/rkey
@@ -697,9 +697,9 @@ int rxe_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata) · 640 unmodified lines
697697 return 0;
698698 }
699699
700−void rxe_mr_cleanup(struct rxe_pool_entry *arg)
700+void rxe_mr_cleanup(struct rxe_pool_elem *elem)
701701 {
702− struct rxe_mr *mr = container_of(arg, typeof(*mr), pelem);
702+ struct rxe_mr *mr = container_of(elem, typeof(*mr), elem);
703703
704704 ib_umem_release(mr->umem);
705705
drivers/infiniband/sw/rxe/rxe_mw.c+9−12
@@ -21,7 +21,7 @@ int rxe_alloc_mw(struct ib_mw *ibmw, struct ib_udata *udata) · 20 unmodified lines
2121 }
2222
2323 rxe_add_index(mw);
24− mw->rkey = ibmw->rkey = (mw->pelem.index << 8) | rxe_get_next_key(-1);
24+ mw->rkey = ibmw->rkey = (mw->elem.index << 8) | rxe_get_next_key(-1);
2525 mw->state = (mw->ibmw.type == IB_MW_TYPE_2) ?
2626 RXE_MW_STATE_FREE : RXE_MW_STATE_VALID;
2727 spin_lock_init(&mw->lock);
@@ -56,11 +56,10 @@ int rxe_dealloc_mw(struct ib_mw *ibmw) · 28 unmodified lines
5656 {
5757 struct rxe_mw *mw = to_rmw(ibmw);
5858 struct rxe_pd *pd = to_rpd(ibmw->pd);
59− unsigned long flags;
6059
61− spin_lock_irqsave(&mw->lock, flags);
60+ spin_lock_bh(&mw->lock);
6261 rxe_do_dealloc_mw(mw);
63− spin_unlock_irqrestore(&mw->lock, flags);
62+ spin_unlock_bh(&mw->lock);
6463
6564 rxe_drop_ref(mw);
6665 rxe_drop_ref(pd);
@@ -197,7 +196,6 @@ int rxe_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe) · 130 unmodified lines
197196 struct rxe_dev *rxe = to_rdev(qp->ibqp.device);
198197 u32 mw_rkey = wqe->wr.wr.mw.mw_rkey;
199198 u32 mr_lkey = wqe->wr.wr.mw.mr_lkey;
200− unsigned long flags;
201199
202200 mw = rxe_pool_get_index(&rxe->mw_pool, mw_rkey >> 8);
203201 if (unlikely(!mw)) {
@@ -225,7 +223,7 @@ int rxe_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe) · 21 unmodified lines
225223 mr = NULL;
226224 }
227225
228− spin_lock_irqsave(&mw->lock, flags);
226+ spin_lock_bh(&mw->lock);
229227
230228 ret = rxe_check_bind_mw(qp, wqe, mw, mr);
231229 if (ret)
@@ -233,7 +231,7 @@ int rxe_bind_mw(struct rxe_qp *qp, struct rxe_send_wqe *wqe) · 1 unmodified line
233231
234232 rxe_do_bind_mw(qp, wqe, mw, mr);
235233 err_unlock:
236− spin_unlock_irqrestore(&mw->lock, flags);
234+ spin_unlock_bh(&mw->lock);
237235 err_drop_mr:
238236 if (mr)
239237 rxe_drop_ref(mr);
@@ -280,7 +278,6 @@ static void rxe_do_invalidate_mw(struct rxe_mw *mw) · 40 unmodified lines
280278 int rxe_invalidate_mw(struct rxe_qp *qp, u32 rkey)
281279 {
282280 struct rxe_dev *rxe = to_rdev(qp->ibqp.device);
283− unsigned long flags;
284281 struct rxe_mw *mw;
285282 int ret;
286283
@@ -295,7 +292,7 @@ int rxe_invalidate_mw(struct rxe_qp *qp, u32 rkey) · 8 unmodified lines
295292 goto err_drop_ref;
296293 }
297294
298− spin_lock_irqsave(&mw->lock, flags);
295+ spin_lock_bh(&mw->lock);
299296
300297 ret = rxe_check_invalidate_mw(qp, mw);
301298 if (ret)
@@ -303,7 +300,7 @@ int rxe_invalidate_mw(struct rxe_qp *qp, u32 rkey) · 1 unmodified line
303300
304301 rxe_do_invalidate_mw(mw);
305302 err_unlock:
306− spin_unlock_irqrestore(&mw->lock, flags);
303+ spin_unlock_bh(&mw->lock);
307304 err_drop_ref:
308305 rxe_drop_ref(mw);
309306 err:
@@ -333,9 +330,9 @@ struct rxe_mw *rxe_lookup_mw(struct rxe_qp *qp, int access, u32 rkey) · 23 unmodified lines
333330 return mw;
334331 }
335332
336−void rxe_mw_cleanup(struct rxe_pool_entry *elem)
333+void rxe_mw_cleanup(struct rxe_pool_elem *elem)
337334 {
338− struct rxe_mw *mw = container_of(elem, typeof(*mw), pelem);
335+ struct rxe_mw *mw = container_of(elem, typeof(*mw), elem);
339336
340337 rxe_drop_index(mw);
341338 }
drivers/infiniband/sw/rxe/rxe_net.c+2−7
@@ -22,24 +22,20 @@ static struct rxe_recv_sockets recv_sockets; · 21 unmodified lines
2222
2323 int rxe_mcast_add(struct rxe_dev *rxe, union ib_gid *mgid)
2424 {
25− int err;
2625 unsigned char ll_addr[ETH_ALEN];
2726
2827 ipv6_eth_mc_map((struct in6_addr *)mgid->raw, ll_addr);
29− err = dev_mc_add(rxe->ndev, ll_addr);
3028
31− return err;
29+ return dev_mc_add(rxe->ndev, ll_addr);
3230 }
3331
3432 int rxe_mcast_delete(struct rxe_dev *rxe, union ib_gid *mgid)
3533 {
36− int err;
3734 unsigned char ll_addr[ETH_ALEN];
3835
3936 ipv6_eth_mc_map((struct in6_addr *)mgid->raw, ll_addr);
40− err = dev_mc_del(rxe->ndev, ll_addr);
4137
42− return err;
38+ return dev_mc_del(rxe->ndev, ll_addr);
4339 }
4440
4541 static struct dst_entry *rxe_find_route4(struct net_device *ndev,
@@ -444,7 +440,6 @@ int rxe_xmit_packet(struct rxe_qp *qp, struct rxe_pkt_info *pkt, · 398 unmodified lines
444440 else
445441 err = rxe_send(skb, pkt);
446442 if (err) {
447− rxe->xmit_errors++;
448443 rxe_counter_inc(rxe, RXE_CNT_SEND_ERR);
449444 return err;
450445 }
drivers/infiniband/sw/rxe/rxe_opcode.c+370−369
@@ -108,8 +108,8 @@ struct rxe_wr_opcode_info rxe_wr_opcode_info[] = { · 107 unmodified lines
108108 struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = {
109109 [IB_OPCODE_RC_SEND_FIRST] = {
110110 .name = "IB_OPCODE_RC_SEND_FIRST",
111− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK
112− | RXE_SEND_MASK | RXE_START_MASK,
111+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK |
112+ RXE_SEND_MASK | RXE_START_MASK,
113113 .length = RXE_BTH_BYTES,
114114 .offset = {
115115 [RXE_BTH] = 0,
@@ -117,9 +117,9 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 1 unmodified line
117117 }
118118 },
119119 [IB_OPCODE_RC_SEND_MIDDLE] = {
120− .name = "IB_OPCODE_RC_SEND_MIDDLE]",
121− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK
122− | RXE_MIDDLE_MASK,
120+ .name = "IB_OPCODE_RC_SEND_MIDDLE",
121+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK |
122+ RXE_MIDDLE_MASK,
123123 .length = RXE_BTH_BYTES,
124124 .offset = {
125125 [RXE_BTH] = 0,
@@ -128,8 +128,8 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 2 unmodified lines
128128 },
129129 [IB_OPCODE_RC_SEND_LAST] = {
130130 .name = "IB_OPCODE_RC_SEND_LAST",
131− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
132− | RXE_SEND_MASK | RXE_END_MASK,
131+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
132+ RXE_SEND_MASK | RXE_END_MASK,
133133 .length = RXE_BTH_BYTES,
134134 .offset = {
135135 [RXE_BTH] = 0,
@@ -138,21 +138,21 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 2 unmodified lines
138138 },
139139 [IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE] = {
140140 .name = "IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE",
141− .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
142− | RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
141+ .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
142+ RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
143143 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
144144 .offset = {
145145 [RXE_BTH] = 0,
146146 [RXE_IMMDT] = RXE_BTH_BYTES,
147− [RXE_PAYLOAD] = RXE_BTH_BYTES
148− + RXE_IMMDT_BYTES,
147+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
148+ RXE_IMMDT_BYTES,
149149 }
150150 },
151151 [IB_OPCODE_RC_SEND_ONLY] = {
152152 .name = "IB_OPCODE_RC_SEND_ONLY",
153− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
154− | RXE_RWR_MASK | RXE_SEND_MASK
155− | RXE_START_MASK | RXE_END_MASK,
153+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
154+ RXE_RWR_MASK | RXE_SEND_MASK |
155+ RXE_START_MASK | RXE_END_MASK,
156156 .length = RXE_BTH_BYTES,
157157 .offset = {
158158 [RXE_BTH] = 0,
@@ -161,33 +161,33 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 2 unmodified lines
161161 },
162162 [IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE] = {
163163 .name = "IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE",
164− .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
165− | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
166− | RXE_START_MASK | RXE_END_MASK,
164+ .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
165+ RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
166+ RXE_START_MASK | RXE_END_MASK,
167167 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
168168 .offset = {
169169 [RXE_BTH] = 0,
170170 [RXE_IMMDT] = RXE_BTH_BYTES,
171− [RXE_PAYLOAD] = RXE_BTH_BYTES
172− + RXE_IMMDT_BYTES,
171+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
172+ RXE_IMMDT_BYTES,
173173 }
174174 },
175175 [IB_OPCODE_RC_RDMA_WRITE_FIRST] = {
176176 .name = "IB_OPCODE_RC_RDMA_WRITE_FIRST",
177− .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
178− | RXE_WRITE_MASK | RXE_START_MASK,
177+ .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
178+ RXE_WRITE_MASK | RXE_START_MASK,
179179 .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
180180 .offset = {
181181 [RXE_BTH] = 0,
182182 [RXE_RETH] = RXE_BTH_BYTES,
183− [RXE_PAYLOAD] = RXE_BTH_BYTES
184− + RXE_RETH_BYTES,
183+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
184+ RXE_RETH_BYTES,
185185 }
186186 },
187187 [IB_OPCODE_RC_RDMA_WRITE_MIDDLE] = {
188188 .name = "IB_OPCODE_RC_RDMA_WRITE_MIDDLE",
189− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
190− | RXE_MIDDLE_MASK,
189+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
190+ RXE_MIDDLE_MASK,
191191 .length = RXE_BTH_BYTES,
192192 .offset = {
193193 [RXE_BTH] = 0,
@@ -196,8 +196,8 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 2 unmodified lines
196196 },
197197 [IB_OPCODE_RC_RDMA_WRITE_LAST] = {
198198 .name = "IB_OPCODE_RC_RDMA_WRITE_LAST",
199− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
200− | RXE_END_MASK,
199+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
200+ RXE_END_MASK,
201201 .length = RXE_BTH_BYTES,
202202 .offset = {
203203 [RXE_BTH] = 0,
@@ -206,69 +206,69 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 2 unmodified lines
206206 },
207207 [IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE] = {
208208 .name = "IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
209− .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
210− | RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK
211− | RXE_END_MASK,
209+ .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
210+ RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
211+ RXE_END_MASK,
212212 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
213213 .offset = {
214214 [RXE_BTH] = 0,
215215 [RXE_IMMDT] = RXE_BTH_BYTES,
216− [RXE_PAYLOAD] = RXE_BTH_BYTES
217− + RXE_IMMDT_BYTES,
216+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
217+ RXE_IMMDT_BYTES,
218218 }
219219 },
220220 [IB_OPCODE_RC_RDMA_WRITE_ONLY] = {
221221 .name = "IB_OPCODE_RC_RDMA_WRITE_ONLY",
222− .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
223− | RXE_WRITE_MASK | RXE_START_MASK
224− | RXE_END_MASK,
222+ .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
223+ RXE_WRITE_MASK | RXE_START_MASK |
224+ RXE_END_MASK,
225225 .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
226226 .offset = {
227227 [RXE_BTH] = 0,
228228 [RXE_RETH] = RXE_BTH_BYTES,
229− [RXE_PAYLOAD] = RXE_BTH_BYTES
230− + RXE_RETH_BYTES,
229+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
230+ RXE_RETH_BYTES,
231231 }
232232 },
233233 [IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE] = {
234234 .name = "IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
235− .mask = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
236− | RXE_REQ_MASK | RXE_WRITE_MASK
237− | RXE_COMP_MASK | RXE_RWR_MASK
238− | RXE_START_MASK | RXE_END_MASK,
235+ .mask = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
236+ RXE_REQ_MASK | RXE_WRITE_MASK |
237+ RXE_COMP_MASK | RXE_RWR_MASK |
238+ RXE_START_MASK | RXE_END_MASK,
239239 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
240240 .offset = {
241241 [RXE_BTH] = 0,
242242 [RXE_RETH] = RXE_BTH_BYTES,
243− [RXE_IMMDT] = RXE_BTH_BYTES
244− + RXE_RETH_BYTES,
245− [RXE_PAYLOAD] = RXE_BTH_BYTES
246− + RXE_RETH_BYTES
247− + RXE_IMMDT_BYTES,
243+ [RXE_IMMDT] = RXE_BTH_BYTES +
244+ RXE_RETH_BYTES,
245+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
246+ RXE_RETH_BYTES +
247+ RXE_IMMDT_BYTES,
248248 }
249249 },
250250 [IB_OPCODE_RC_RDMA_READ_REQUEST] = {
251251 .name = "IB_OPCODE_RC_RDMA_READ_REQUEST",
252− .mask = RXE_RETH_MASK | RXE_REQ_MASK | RXE_READ_MASK
253− | RXE_START_MASK | RXE_END_MASK,
252+ .mask = RXE_RETH_MASK | RXE_REQ_MASK | RXE_READ_MASK |
253+ RXE_START_MASK | RXE_END_MASK,
254254 .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
255255 .offset = {
256256 [RXE_BTH] = 0,
257257 [RXE_RETH] = RXE_BTH_BYTES,
258− [RXE_PAYLOAD] = RXE_BTH_BYTES
259− + RXE_RETH_BYTES,
258+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
259+ RXE_RETH_BYTES,
260260 }
261261 },
262262 [IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST] = {
263263 .name = "IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST",
264− .mask = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
265− | RXE_START_MASK,
264+ .mask = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
265+ RXE_START_MASK,
266266 .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
267267 .offset = {
268268 [RXE_BTH] = 0,
269269 [RXE_AETH] = RXE_BTH_BYTES,
270− [RXE_PAYLOAD] = RXE_BTH_BYTES
271− + RXE_AETH_BYTES,
270+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
271+ RXE_AETH_BYTES,
272272 }
273273 },
274274 [IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE] = {
@@ -282,109 +282,110 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 7 unmodified lines
282282 },
283283 [IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST] = {
284284 .name = "IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST",
285− .mask = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
286− | RXE_END_MASK,
285+ .mask = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
286+ RXE_END_MASK,
287287 .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
288288 .offset = {
289289 [RXE_BTH] = 0,
290290 [RXE_AETH] = RXE_BTH_BYTES,
291− [RXE_PAYLOAD] = RXE_BTH_BYTES
292− + RXE_AETH_BYTES,
291+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
292+ RXE_AETH_BYTES,
293293 }
294294 },
295295 [IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY] = {
296296 .name = "IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY",
297− .mask = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
298− | RXE_START_MASK | RXE_END_MASK,
297+ .mask = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
298+ RXE_START_MASK | RXE_END_MASK,
299299 .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
300300 .offset = {
301301 [RXE_BTH] = 0,
302302 [RXE_AETH] = RXE_BTH_BYTES,
303− [RXE_PAYLOAD] = RXE_BTH_BYTES
304− + RXE_AETH_BYTES,
303+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
304+ RXE_AETH_BYTES,
305305 }
306306 },
307307 [IB_OPCODE_RC_ACKNOWLEDGE] = {
308308 .name = "IB_OPCODE_RC_ACKNOWLEDGE",
309− .mask = RXE_AETH_MASK | RXE_ACK_MASK | RXE_START_MASK
310− | RXE_END_MASK,
309+ .mask = RXE_AETH_MASK | RXE_ACK_MASK | RXE_START_MASK |
310+ RXE_END_MASK,
311311 .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
312312 .offset = {
313313 [RXE_BTH] = 0,
314314 [RXE_AETH] = RXE_BTH_BYTES,
315− [RXE_PAYLOAD] = RXE_BTH_BYTES
316− + RXE_AETH_BYTES,
315+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
316+ RXE_AETH_BYTES,
317317 }
318318 },
319319 [IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE] = {
320320 .name = "IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE",
321− .mask = RXE_AETH_MASK | RXE_ATMACK_MASK | RXE_ACK_MASK
322− | RXE_START_MASK | RXE_END_MASK,
321+ .mask = RXE_AETH_MASK | RXE_ATMACK_MASK | RXE_ACK_MASK |
322+ RXE_START_MASK | RXE_END_MASK,
323323 .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES,
324324 .offset = {
325325 [RXE_BTH] = 0,
326326 [RXE_AETH] = RXE_BTH_BYTES,
327− [RXE_ATMACK] = RXE_BTH_BYTES
328− + RXE_AETH_BYTES,
329− [RXE_PAYLOAD] = RXE_BTH_BYTES
330− + RXE_ATMACK_BYTES + RXE_AETH_BYTES,
327+ [RXE_ATMACK] = RXE_BTH_BYTES +
328+ RXE_AETH_BYTES,
329+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
330+ RXE_ATMACK_BYTES +
331+ RXE_AETH_BYTES,
331332 }
332333 },
333334 [IB_OPCODE_RC_COMPARE_SWAP] = {
334335 .name = "IB_OPCODE_RC_COMPARE_SWAP",
335− .mask = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK
336− | RXE_START_MASK | RXE_END_MASK,
336+ .mask = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK |
337+ RXE_START_MASK | RXE_END_MASK,
337338 .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
338339 .offset = {
339340 [RXE_BTH] = 0,
340341 [RXE_ATMETH] = RXE_BTH_BYTES,
341− [RXE_PAYLOAD] = RXE_BTH_BYTES
342− + RXE_ATMETH_BYTES,
342+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
343+ RXE_ATMETH_BYTES,
343344 }
344345 },
345346 [IB_OPCODE_RC_FETCH_ADD] = {
346347 .name = "IB_OPCODE_RC_FETCH_ADD",
347− .mask = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK
348− | RXE_START_MASK | RXE_END_MASK,
348+ .mask = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK |
349+ RXE_START_MASK | RXE_END_MASK,
349350 .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
350351 .offset = {
351352 [RXE_BTH] = 0,
352353 [RXE_ATMETH] = RXE_BTH_BYTES,
353− [RXE_PAYLOAD] = RXE_BTH_BYTES
354− + RXE_ATMETH_BYTES,
354+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
355+ RXE_ATMETH_BYTES,
355356 }
356357 },
357358 [IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE] = {
358359 .name = "IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE",
359− .mask = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
360− | RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
360+ .mask = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
361+ RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
361362 .length = RXE_BTH_BYTES + RXE_IETH_BYTES,
362363 .offset = {
363364 [RXE_BTH] = 0,
364365 [RXE_IETH] = RXE_BTH_BYTES,
365− [RXE_PAYLOAD] = RXE_BTH_BYTES
366− + RXE_IETH_BYTES,
366+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
367+ RXE_IETH_BYTES,
367368 }
368369 },
369370 [IB_OPCODE_RC_SEND_ONLY_WITH_INVALIDATE] = {
370371 .name = "IB_OPCODE_RC_SEND_ONLY_INV",
371− .mask = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
372− | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
373− | RXE_END_MASK | RXE_START_MASK,
372+ .mask = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
373+ RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
374+ RXE_END_MASK | RXE_START_MASK,
374375 .length = RXE_BTH_BYTES + RXE_IETH_BYTES,
375376 .offset = {
376377 [RXE_BTH] = 0,
377378 [RXE_IETH] = RXE_BTH_BYTES,
378− [RXE_PAYLOAD] = RXE_BTH_BYTES
379− + RXE_IETH_BYTES,
379+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
380+ RXE_IETH_BYTES,
380381 }
381382 },
382383
383384 /* UC */
384385 [IB_OPCODE_UC_SEND_FIRST] = {
385386 .name = "IB_OPCODE_UC_SEND_FIRST",
386− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK
387− | RXE_SEND_MASK | RXE_START_MASK,
387+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK |
388+ RXE_SEND_MASK | RXE_START_MASK,
388389 .length = RXE_BTH_BYTES,
389390 .offset = {
390391 [RXE_BTH] = 0,
@@ -393,8 +394,8 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 2 unmodified lines
393394 },
394395 [IB_OPCODE_UC_SEND_MIDDLE] = {
395396 .name = "IB_OPCODE_UC_SEND_MIDDLE",
396− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK
397− | RXE_MIDDLE_MASK,
397+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK |
398+ RXE_MIDDLE_MASK,
398399 .length = RXE_BTH_BYTES,
399400 .offset = {
400401 [RXE_BTH] = 0,
@@ -403,8 +404,8 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 2 unmodified lines
403404 },
404405 [IB_OPCODE_UC_SEND_LAST] = {
405406 .name = "IB_OPCODE_UC_SEND_LAST",
406− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
407− | RXE_SEND_MASK | RXE_END_MASK,
407+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
408+ RXE_SEND_MASK | RXE_END_MASK,
408409 .length = RXE_BTH_BYTES,
409410 .offset = {
410411 [RXE_BTH] = 0,
@@ -413,21 +414,21 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 2 unmodified lines
413414 },
414415 [IB_OPCODE_UC_SEND_LAST_WITH_IMMEDIATE] = {
415416 .name = "IB_OPCODE_UC_SEND_LAST_WITH_IMMEDIATE",
416− .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
417− | RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
417+ .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
418+ RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
418419 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
419420 .offset = {
420421 [RXE_BTH] = 0,
421422 [RXE_IMMDT] = RXE_BTH_BYTES,
422− [RXE_PAYLOAD] = RXE_BTH_BYTES
423− + RXE_IMMDT_BYTES,
423+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
424+ RXE_IMMDT_BYTES,
424425 }
425426 },
426427 [IB_OPCODE_UC_SEND_ONLY] = {
427428 .name = "IB_OPCODE_UC_SEND_ONLY",
428− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
429− | RXE_RWR_MASK | RXE_SEND_MASK
430− | RXE_START_MASK | RXE_END_MASK,
429+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
430+ RXE_RWR_MASK | RXE_SEND_MASK |
431+ RXE_START_MASK | RXE_END_MASK,
431432 .length = RXE_BTH_BYTES,
432433 .offset = {
433434 [RXE_BTH] = 0,
@@ -436,33 +437,33 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 2 unmodified lines
436437 },
437438 [IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE] = {
438439 .name = "IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE",
439− .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
440− | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
441− | RXE_START_MASK | RXE_END_MASK,
440+ .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
441+ RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
442+ RXE_START_MASK | RXE_END_MASK,
442443 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
443444 .offset = {
444445 [RXE_BTH] = 0,
445446 [RXE_IMMDT] = RXE_BTH_BYTES,
446− [RXE_PAYLOAD] = RXE_BTH_BYTES
447− + RXE_IMMDT_BYTES,
447+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
448+ RXE_IMMDT_BYTES,
448449 }
449450 },
450451 [IB_OPCODE_UC_RDMA_WRITE_FIRST] = {
451452 .name = "IB_OPCODE_UC_RDMA_WRITE_FIRST",
452− .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
453− | RXE_WRITE_MASK | RXE_START_MASK,
453+ .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
454+ RXE_WRITE_MASK | RXE_START_MASK,
454455 .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
455456 .offset = {
456457 [RXE_BTH] = 0,
457458 [RXE_RETH] = RXE_BTH_BYTES,
458− [RXE_PAYLOAD] = RXE_BTH_BYTES
459− + RXE_RETH_BYTES,
459+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
460+ RXE_RETH_BYTES,
460461 }
461462 },
462463 [IB_OPCODE_UC_RDMA_WRITE_MIDDLE] = {
463464 .name = "IB_OPCODE_UC_RDMA_WRITE_MIDDLE",
464− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
465− | RXE_MIDDLE_MASK,
465+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
466+ RXE_MIDDLE_MASK,
466467 .length = RXE_BTH_BYTES,
467468 .offset = {
468469 [RXE_BTH] = 0,
@@ -471,8 +472,8 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 2 unmodified lines
471472 },
472473 [IB_OPCODE_UC_RDMA_WRITE_LAST] = {
473474 .name = "IB_OPCODE_UC_RDMA_WRITE_LAST",
474− .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
475− | RXE_END_MASK,
475+ .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
476+ RXE_END_MASK,
476477 .length = RXE_BTH_BYTES,
477478 .offset = {
478479 [RXE_BTH] = 0,
@@ -481,460 +482,460 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { · 2 unmodified lines
481482 },
482483 [IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE] = {
483484 .name = "IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
484− .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
485− | RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK
486− | RXE_END_MASK,
485+ .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
486+ RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
487+ RXE_END_MASK,
487488 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
488489 .offset = {
489490 [RXE_BTH] = 0,
490491 [RXE_IMMDT] = RXE_BTH_BYTES,
491− [RXE_PAYLOAD] = RXE_BTH_BYTES
492− + RXE_IMMDT_BYTES,
492+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
493+ RXE_IMMDT_BYTES,
493494 }
494495 },
495496 [IB_OPCODE_UC_RDMA_WRITE_ONLY] = {
496497 .name = "IB_OPCODE_UC_RDMA_WRITE_ONLY",
497− .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
498− | RXE_WRITE_MASK | RXE_START_MASK
499− | RXE_END_MASK,
498+ .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
499+ RXE_WRITE_MASK | RXE_START_MASK |
500+ RXE_END_MASK,
500501 .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
501502 .offset = {
502503 [RXE_BTH] = 0,
503504 [RXE_RETH] = RXE_BTH_BYTES,
504− [RXE_PAYLOAD] = RXE_BTH_BYTES
505− + RXE_RETH_BYTES,
505+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
506+ RXE_RETH_BYTES,
506507 }
507508 },
508509 [IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE] = {
509510 .name = "IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
510− .mask = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
511− | RXE_REQ_MASK | RXE_WRITE_MASK
512− | RXE_COMP_MASK | RXE_RWR_MASK
513− | RXE_START_MASK | RXE_END_MASK,
511+ .mask = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
512+ RXE_REQ_MASK | RXE_WRITE_MASK |
513+ RXE_COMP_MASK | RXE_RWR_MASK |
514+ RXE_START_MASK | RXE_END_MASK,
514515 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
515516 .offset = {
516517 [RXE_BTH] = 0,
517518 [RXE_RETH] = RXE_BTH_BYTES,
518− [RXE_IMMDT] = RXE_BTH_BYTES
519− + RXE_RETH_BYTES,
520− [RXE_PAYLOAD] = RXE_BTH_BYTES
521− + RXE_RETH_BYTES
522− + RXE_IMMDT_BYTES,
519+ [RXE_IMMDT] = RXE_BTH_BYTES +
520+ RXE_RETH_BYTES,
521+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
522+ RXE_RETH_BYTES +
523+ RXE_IMMDT_BYTES,
523524 }
524525 },
525526
526527 /* RD */
527528 [IB_OPCODE_RD_SEND_FIRST] = {
528529 .name = "IB_OPCODE_RD_SEND_FIRST",
529− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
530− | RXE_REQ_MASK | RXE_RWR_MASK | RXE_SEND_MASK
531− | RXE_START_MASK,
530+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
531+ RXE_REQ_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
532+ RXE_START_MASK,
532533 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
533534 .offset = {
534535 [RXE_BTH] = 0,
535536 [RXE_RDETH] = RXE_BTH_BYTES,
536− [RXE_DETH] = RXE_BTH_BYTES
537− + RXE_RDETH_BYTES,
538− [RXE_PAYLOAD] = RXE_BTH_BYTES
539− + RXE_RDETH_BYTES
540− + RXE_DETH_BYTES,
537+ [RXE_DETH] = RXE_BTH_BYTES +
538+ RXE_RDETH_BYTES,
539+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
540+ RXE_RDETH_BYTES +
541+ RXE_DETH_BYTES,
541542 }
542543 },
543544 [IB_OPCODE_RD_SEND_MIDDLE] = {
544545 .name = "IB_OPCODE_RD_SEND_MIDDLE",
545− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
546− | RXE_REQ_MASK | RXE_SEND_MASK
547− | RXE_MIDDLE_MASK,
546+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
547+ RXE_REQ_MASK | RXE_SEND_MASK |
548+ RXE_MIDDLE_MASK,
548549 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
549550 .offset = {
550551 [RXE_BTH] = 0,
551552 [RXE_RDETH] = RXE_BTH_BYTES,
552− [RXE_DETH] = RXE_BTH_BYTES
553− + RXE_RDETH_BYTES,
554− [RXE_PAYLOAD] = RXE_BTH_BYTES
555− + RXE_RDETH_BYTES
556− + RXE_DETH_BYTES,
553+ [RXE_DETH] = RXE_BTH_BYTES +
554+ RXE_RDETH_BYTES,
555+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
556+ RXE_RDETH_BYTES +
557+ RXE_DETH_BYTES,
557558 }
558559 },
559560 [IB_OPCODE_RD_SEND_LAST] = {
560561 .name = "IB_OPCODE_RD_SEND_LAST",
561− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
562− | RXE_REQ_MASK | RXE_COMP_MASK | RXE_SEND_MASK
563− | RXE_END_MASK,
562+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
563+ RXE_REQ_MASK | RXE_COMP_MASK | RXE_SEND_MASK |
564+ RXE_END_MASK,
564565 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
565566 .offset = {
566567 [RXE_BTH] = 0,
567568 [RXE_RDETH] = RXE_BTH_BYTES,
568− [RXE_DETH] = RXE_BTH_BYTES
569− + RXE_RDETH_BYTES,
570− [RXE_PAYLOAD] = RXE_BTH_BYTES
571− + RXE_RDETH_BYTES
572− + RXE_DETH_BYTES,
569+ [RXE_DETH] = RXE_BTH_BYTES +
570+ RXE_RDETH_BYTES,
571+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
572+ RXE_RDETH_BYTES +
573+ RXE_DETH_BYTES,
573574 }
574575 },
575576 [IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE] = {
576577 .name = "IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE",
577− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK
578− | RXE_PAYLOAD_MASK | RXE_REQ_MASK
579− | RXE_COMP_MASK | RXE_SEND_MASK
580− | RXE_END_MASK,
581− .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES
582− + RXE_RDETH_BYTES,
578+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
579+ RXE_PAYLOAD_MASK | RXE_REQ_MASK |
580+ RXE_COMP_MASK | RXE_SEND_MASK |
581+ RXE_END_MASK,
582+ .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
583+ RXE_RDETH_BYTES,
583584 .offset = {
584585 [RXE_BTH] = 0,
585586 [RXE_RDETH] = RXE_BTH_BYTES,
586− [RXE_DETH] = RXE_BTH_BYTES
587− + RXE_RDETH_BYTES,
588− [RXE_IMMDT] = RXE_BTH_BYTES
589− + RXE_RDETH_BYTES
590− + RXE_DETH_BYTES,
591− [RXE_PAYLOAD] = RXE_BTH_BYTES
592− + RXE_RDETH_BYTES
593− + RXE_DETH_BYTES
594− + RXE_IMMDT_BYTES,
587+ [RXE_DETH] = RXE_BTH_BYTES +
588+ RXE_RDETH_BYTES,
589+ [RXE_IMMDT] = RXE_BTH_BYTES +
590+ RXE_RDETH_BYTES +
591+ RXE_DETH_BYTES,
592+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
593+ RXE_RDETH_BYTES +
594+ RXE_DETH_BYTES +
595+ RXE_IMMDT_BYTES,
595596 }
596597 },
597598 [IB_OPCODE_RD_SEND_ONLY] = {
598599 .name = "IB_OPCODE_RD_SEND_ONLY",
599− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
600− | RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK
601− | RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
600+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
601+ RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
602+ RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
602603 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
603604 .offset = {
604605 [RXE_BTH] = 0,
605606 [RXE_RDETH] = RXE_BTH_BYTES,
606− [RXE_DETH] = RXE_BTH_BYTES
607− + RXE_RDETH_BYTES,
608− [RXE_PAYLOAD] = RXE_BTH_BYTES
609− + RXE_RDETH_BYTES
610− + RXE_DETH_BYTES,
607+ [RXE_DETH] = RXE_BTH_BYTES +
608+ RXE_RDETH_BYTES,
609+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
610+ RXE_RDETH_BYTES +
611+ RXE_DETH_BYTES,
611612 }
612613 },
613614 [IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE] = {
614615 .name = "IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE",
615− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK
616− | RXE_PAYLOAD_MASK | RXE_REQ_MASK
617− | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
618− | RXE_START_MASK | RXE_END_MASK,
619− .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES
620− + RXE_RDETH_BYTES,
616+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
617+ RXE_PAYLOAD_MASK | RXE_REQ_MASK |
618+ RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
619+ RXE_START_MASK | RXE_END_MASK,
620+ .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
621+ RXE_RDETH_BYTES,
621622 .offset = {
622623 [RXE_BTH] = 0,
623624 [RXE_RDETH] = RXE_BTH_BYTES,
624− [RXE_DETH] = RXE_BTH_BYTES
625− + RXE_RDETH_BYTES,
626− [RXE_IMMDT] = RXE_BTH_BYTES
627− + RXE_RDETH_BYTES
628− + RXE_DETH_BYTES,
629− [RXE_PAYLOAD] = RXE_BTH_BYTES
630− + RXE_RDETH_BYTES
631− + RXE_DETH_BYTES
632− + RXE_IMMDT_BYTES,
625+ [RXE_DETH] = RXE_BTH_BYTES +
626+ RXE_RDETH_BYTES,
627+ [RXE_IMMDT] = RXE_BTH_BYTES +
628+ RXE_RDETH_BYTES +
629+ RXE_DETH_BYTES,
630+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
631+ RXE_RDETH_BYTES +
632+ RXE_DETH_BYTES +
633+ RXE_IMMDT_BYTES,
633634 }
634635 },
635636 [IB_OPCODE_RD_RDMA_WRITE_FIRST] = {
636637 .name = "IB_OPCODE_RD_RDMA_WRITE_FIRST",
637− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
638− | RXE_PAYLOAD_MASK | RXE_REQ_MASK
639− | RXE_WRITE_MASK | RXE_START_MASK,
640− .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES
641− + RXE_RDETH_BYTES,
638+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
639+ RXE_PAYLOAD_MASK | RXE_REQ_MASK |
640+ RXE_WRITE_MASK | RXE_START_MASK,
641+ .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
642+ RXE_RDETH_BYTES,
642643 .offset = {
643644 [RXE_BTH] = 0,
644645 [RXE_RDETH] = RXE_BTH_BYTES,
645− [RXE_DETH] = RXE_BTH_BYTES
646− + RXE_RDETH_BYTES,
647− [RXE_RETH] = RXE_BTH_BYTES
648− + RXE_RDETH_BYTES
649− + RXE_DETH_BYTES,
650− [RXE_PAYLOAD] = RXE_BTH_BYTES
651− + RXE_RDETH_BYTES
652− + RXE_DETH_BYTES
653− + RXE_RETH_BYTES,
646+ [RXE_DETH] = RXE_BTH_BYTES +
647+ RXE_RDETH_BYTES,
648+ [RXE_RETH] = RXE_BTH_BYTES +
649+ RXE_RDETH_BYTES +
650+ RXE_DETH_BYTES,
651+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
652+ RXE_RDETH_BYTES +
653+ RXE_DETH_BYTES +
654+ RXE_RETH_BYTES,
654655 }
655656 },
656657 [IB_OPCODE_RD_RDMA_WRITE_MIDDLE] = {
657658 .name = "IB_OPCODE_RD_RDMA_WRITE_MIDDLE",
658− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
659− | RXE_REQ_MASK | RXE_WRITE_MASK
660− | RXE_MIDDLE_MASK,
659+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
660+ RXE_REQ_MASK | RXE_WRITE_MASK |
661+ RXE_MIDDLE_MASK,
661662 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
662663 .offset = {
663664 [RXE_BTH] = 0,
664665 [RXE_RDETH] = RXE_BTH_BYTES,
665− [RXE_DETH] = RXE_BTH_BYTES
666− + RXE_RDETH_BYTES,
667− [RXE_PAYLOAD] = RXE_BTH_BYTES
668− + RXE_RDETH_BYTES
669− + RXE_DETH_BYTES,
666+ [RXE_DETH] = RXE_BTH_BYTES +
667+ RXE_RDETH_BYTES,
668+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
669+ RXE_RDETH_BYTES +
670+ RXE_DETH_BYTES,
670671 }
671672 },
672673 [IB_OPCODE_RD_RDMA_WRITE_LAST] = {
673674 .name = "IB_OPCODE_RD_RDMA_WRITE_LAST",
674− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
675− | RXE_REQ_MASK | RXE_WRITE_MASK
676− | RXE_END_MASK,
675+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
676+ RXE_REQ_MASK | RXE_WRITE_MASK |
677+ RXE_END_MASK,
677678 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
678679 .offset = {
679680 [RXE_BTH] = 0,
680681 [RXE_RDETH] = RXE_BTH_BYTES,
681− [RXE_DETH] = RXE_BTH_BYTES
682− + RXE_RDETH_BYTES,
683− [RXE_PAYLOAD] = RXE_BTH_BYTES
684− + RXE_RDETH_BYTES
685− + RXE_DETH_BYTES,
682+ [RXE_DETH] = RXE_BTH_BYTES +
683+ RXE_RDETH_BYTES,
684+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
685+ RXE_RDETH_BYTES +
686+ RXE_DETH_BYTES,
686687 }
687688 },
688689 [IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE] = {
689690 .name = "IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE",
690− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK
691− | RXE_PAYLOAD_MASK | RXE_REQ_MASK
692− | RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK
693− | RXE_END_MASK,
694− .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES
695− + RXE_RDETH_BYTES,
691+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
692+ RXE_PAYLOAD_MASK | RXE_REQ_MASK |
693+ RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
694+ RXE_END_MASK,
695+ .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
696+ RXE_RDETH_BYTES,
696697 .offset = {
697698 [RXE_BTH] = 0,
698699 [RXE_RDETH] = RXE_BTH_BYTES,
699− [RXE_DETH] = RXE_BTH_BYTES
700− + RXE_RDETH_BYTES,
701− [RXE_IMMDT] = RXE_BTH_BYTES
702− + RXE_RDETH_BYTES
703− + RXE_DETH_BYTES,
704− [RXE_PAYLOAD] = RXE_BTH_BYTES
705− + RXE_RDETH_BYTES
706− + RXE_DETH_BYTES
707− + RXE_IMMDT_BYTES,
700+ [RXE_DETH] = RXE_BTH_BYTES +
701+ RXE_RDETH_BYTES,
702+ [RXE_IMMDT] = RXE_BTH_BYTES +
703+ RXE_RDETH_BYTES +
704+ RXE_DETH_BYTES,
705+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
706+ RXE_RDETH_BYTES +
707+ RXE_DETH_BYTES +
708+ RXE_IMMDT_BYTES,
708709 }
709710 },
710711 [IB_OPCODE_RD_RDMA_WRITE_ONLY] = {
711712 .name = "IB_OPCODE_RD_RDMA_WRITE_ONLY",
712− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
713− | RXE_PAYLOAD_MASK | RXE_REQ_MASK
714− | RXE_WRITE_MASK | RXE_START_MASK
715− | RXE_END_MASK,
716− .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES
717− + RXE_RDETH_BYTES,
713+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
714+ RXE_PAYLOAD_MASK | RXE_REQ_MASK |
715+ RXE_WRITE_MASK | RXE_START_MASK |
716+ RXE_END_MASK,
717+ .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
718+ RXE_RDETH_BYTES,
718719 .offset = {
719720 [RXE_BTH] = 0,
720721 [RXE_RDETH] = RXE_BTH_BYTES,
721− [RXE_DETH] = RXE_BTH_BYTES
722− + RXE_RDETH_BYTES,
723− [RXE_RETH] = RXE_BTH_BYTES
724− + RXE_RDETH_BYTES
725− + RXE_DETH_BYTES,
726− [RXE_PAYLOAD] = RXE_BTH_BYTES
727− + RXE_RDETH_BYTES
728− + RXE_DETH_BYTES
729− + RXE_RETH_BYTES,
722+ [RXE_DETH] = RXE_BTH_BYTES +
723+ RXE_RDETH_BYTES,
724+ [RXE_RETH] = RXE_BTH_BYTES +
725+ RXE_RDETH_BYTES +
726+ RXE_DETH_BYTES,
727+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
728+ RXE_RDETH_BYTES +
729+ RXE_DETH_BYTES +
730+ RXE_RETH_BYTES,
730731 }
731732 },
732733 [IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE] = {
733734 .name = "IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
734− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
735− | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
736− | RXE_REQ_MASK | RXE_WRITE_MASK
737− | RXE_COMP_MASK | RXE_RWR_MASK
738− | RXE_START_MASK | RXE_END_MASK,
739− .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES
740− + RXE_DETH_BYTES + RXE_RDETH_BYTES,
735+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
736+ RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
737+ RXE_REQ_MASK | RXE_WRITE_MASK |
738+ RXE_COMP_MASK | RXE_RWR_MASK |
739+ RXE_START_MASK | RXE_END_MASK,
740+ .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES +
741+ RXE_DETH_BYTES + RXE_RDETH_BYTES,
741742 .offset = {
742743 [RXE_BTH] = 0,
743744 [RXE_RDETH] = RXE_BTH_BYTES,
744− [RXE_DETH] = RXE_BTH_BYTES
745− + RXE_RDETH_BYTES,
746− [RXE_RETH] = RXE_BTH_BYTES
747− + RXE_RDETH_BYTES
748− + RXE_DETH_BYTES,
749− [RXE_IMMDT] = RXE_BTH_BYTES
750− + RXE_RDETH_BYTES
751− + RXE_DETH_BYTES
752− + RXE_RETH_BYTES,
753− [RXE_PAYLOAD] = RXE_BTH_BYTES
754− + RXE_RDETH_BYTES
755− + RXE_DETH_BYTES
756− + RXE_RETH_BYTES
757− + RXE_IMMDT_BYTES,
745+ [RXE_DETH] = RXE_BTH_BYTES +
746+ RXE_RDETH_BYTES,
747+ [RXE_RETH] = RXE_BTH_BYTES +
748+ RXE_RDETH_BYTES +
749+ RXE_DETH_BYTES,
750+ [RXE_IMMDT] = RXE_BTH_BYTES +
751+ RXE_RDETH_BYTES +
752+ RXE_DETH_BYTES +
753+ RXE_RETH_BYTES,
754+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
755+ RXE_RDETH_BYTES +
756+ RXE_DETH_BYTES +
757+ RXE_RETH_BYTES +
758+ RXE_IMMDT_BYTES,
758759 }
759760 },
760761 [IB_OPCODE_RD_RDMA_READ_REQUEST] = {
761762 .name = "IB_OPCODE_RD_RDMA_READ_REQUEST",
762− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
763− | RXE_REQ_MASK | RXE_READ_MASK
764− | RXE_START_MASK | RXE_END_MASK,
765− .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES
766− + RXE_RDETH_BYTES,
763+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
764+ RXE_REQ_MASK | RXE_READ_MASK |
765+ RXE_START_MASK | RXE_END_MASK,
766+ .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
767+ RXE_RDETH_BYTES,
767768 .offset = {
768769 [RXE_BTH] = 0,
769770 [RXE_RDETH] = RXE_BTH_BYTES,
770− [RXE_DETH] = RXE_BTH_BYTES
771− + RXE_RDETH_BYTES,
772− [RXE_RETH] = RXE_BTH_BYTES
773− + RXE_RDETH_BYTES
774− + RXE_DETH_BYTES,
775− [RXE_PAYLOAD] = RXE_BTH_BYTES
776− + RXE_RETH_BYTES
777− + RXE_DETH_BYTES
778− + RXE_RDETH_BYTES,
771+ [RXE_DETH] = RXE_BTH_BYTES +
772+ RXE_RDETH_BYTES,
773+ [RXE_RETH] = RXE_BTH_BYTES +
774+ RXE_RDETH_BYTES +
775+ RXE_DETH_BYTES,
776+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
777+ RXE_RETH_BYTES +
778+ RXE_DETH_BYTES +
779+ RXE_RDETH_BYTES,
779780 }
780781 },
781782 [IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST] = {
782783 .name = "IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST",
783− .mask = RXE_RDETH_MASK | RXE_AETH_MASK
784− | RXE_PAYLOAD_MASK | RXE_ACK_MASK
785− | RXE_START_MASK,
784+ .mask = RXE_RDETH_MASK | RXE_AETH_MASK |
785+ RXE_PAYLOAD_MASK | RXE_ACK_MASK |
786+ RXE_START_MASK,
786787 .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
787788 .offset = {
788789 [RXE_BTH] = 0,
789790 [RXE_RDETH] = RXE_BTH_BYTES,
790− [RXE_AETH] = RXE_BTH_BYTES
791− + RXE_RDETH_BYTES,
792− [RXE_PAYLOAD] = RXE_BTH_BYTES
793− + RXE_RDETH_BYTES
794− + RXE_AETH_BYTES,
791+ [RXE_AETH] = RXE_BTH_BYTES +
792+ RXE_RDETH_BYTES,
793+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
794+ RXE_RDETH_BYTES +
795+ RXE_AETH_BYTES,
795796 }
796797 },
797798 [IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE] = {
798799 .name = "IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE",
799− .mask = RXE_RDETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
800− | RXE_MIDDLE_MASK,
800+ .mask = RXE_RDETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
801+ RXE_MIDDLE_MASK,
801802 .length = RXE_BTH_BYTES + RXE_RDETH_BYTES,
802803 .offset = {
803804 [RXE_BTH] = 0,
804805 [RXE_RDETH] = RXE_BTH_BYTES,
805− [RXE_PAYLOAD] = RXE_BTH_BYTES
806− + RXE_RDETH_BYTES,
806+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
807+ RXE_RDETH_BYTES,
807808 }
808809 },
809810 [IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST] = {
810811 .name = "IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST",
811− .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK
812− | RXE_ACK_MASK | RXE_END_MASK,
812+ .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK |
813+ RXE_ACK_MASK | RXE_END_MASK,
813814 .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
814815 .offset = {
815816 [RXE_BTH] = 0,
816817 [RXE_RDETH] = RXE_BTH_BYTES,
817− [RXE_AETH] = RXE_BTH_BYTES
818− + RXE_RDETH_BYTES,
819− [RXE_PAYLOAD] = RXE_BTH_BYTES
820− + RXE_RDETH_BYTES
821− + RXE_AETH_BYTES,
818+ [RXE_AETH] = RXE_BTH_BYTES +
819+ RXE_RDETH_BYTES,
820+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
821+ RXE_RDETH_BYTES +
822+ RXE_AETH_BYTES,
822823 }
823824 },
824825 [IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY] = {
825826 .name = "IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY",
826− .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK
827− | RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
827+ .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK |
828+ RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
828829 .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
829830 .offset = {
830831 [RXE_BTH] = 0,
831832 [RXE_RDETH] = RXE_BTH_BYTES,
832− [RXE_AETH] = RXE_BTH_BYTES
833− + RXE_RDETH_BYTES,
834− [RXE_PAYLOAD] = RXE_BTH_BYTES
835− + RXE_RDETH_BYTES
836− + RXE_AETH_BYTES,
833+ [RXE_AETH] = RXE_BTH_BYTES +
834+ RXE_RDETH_BYTES,
835+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
836+ RXE_RDETH_BYTES +
837+ RXE_AETH_BYTES,
837838 }
838839 },
839840 [IB_OPCODE_RD_ACKNOWLEDGE] = {
840841 .name = "IB_OPCODE_RD_ACKNOWLEDGE",
841− .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ACK_MASK
842− | RXE_START_MASK | RXE_END_MASK,
842+ .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ACK_MASK |
843+ RXE_START_MASK | RXE_END_MASK,
843844 .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
844845 .offset = {
845846 [RXE_BTH] = 0,
846847 [RXE_RDETH] = RXE_BTH_BYTES,
847− [RXE_AETH] = RXE_BTH_BYTES
848− + RXE_RDETH_BYTES,
848+ [RXE_AETH] = RXE_BTH_BYTES +
849+ RXE_RDETH_BYTES,
849850 }
850851 },
851852 [IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE] = {
852853 .name = "IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE",
853− .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ATMACK_MASK
854− | RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
855− .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES
856− + RXE_RDETH_BYTES,
854+ .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ATMACK_MASK |
855+ RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
856+ .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES +
857+ RXE_RDETH_BYTES,
857858 .offset = {
858859 [RXE_BTH] = 0,
859860 [RXE_RDETH] = RXE_BTH_BYTES,
860− [RXE_AETH] = RXE_BTH_BYTES
861− + RXE_RDETH_BYTES,
862− [RXE_ATMACK] = RXE_BTH_BYTES
863− + RXE_RDETH_BYTES
864− + RXE_AETH_BYTES,
861+ [RXE_AETH] = RXE_BTH_BYTES +
862+ RXE_RDETH_BYTES,
863+ [RXE_ATMACK] = RXE_BTH_BYTES +
864+ RXE_RDETH_BYTES +
865+ RXE_AETH_BYTES,
865866 }
866867 },
867868 [IB_OPCODE_RD_COMPARE_SWAP] = {
868869 .name = "RD_COMPARE_SWAP",
869− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK
870− | RXE_REQ_MASK | RXE_ATOMIC_MASK
871− | RXE_START_MASK | RXE_END_MASK,
872− .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES
873− + RXE_RDETH_BYTES,
870+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK |
871+ RXE_REQ_MASK | RXE_ATOMIC_MASK |
872+ RXE_START_MASK | RXE_END_MASK,
873+ .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES +
874+ RXE_RDETH_BYTES,
874875 .offset = {
875876 [RXE_BTH] = 0,
876877 [RXE_RDETH] = RXE_BTH_BYTES,
877− [RXE_DETH] = RXE_BTH_BYTES
878− + RXE_RDETH_BYTES,
879− [RXE_ATMETH] = RXE_BTH_BYTES
880− + RXE_RDETH_BYTES
881− + RXE_DETH_BYTES,
878+ [RXE_DETH] = RXE_BTH_BYTES +
879+ RXE_RDETH_BYTES,
880+ [RXE_ATMETH] = RXE_BTH_BYTES +
881+ RXE_RDETH_BYTES +
882+ RXE_DETH_BYTES,
882883 [RXE_PAYLOAD] = RXE_BTH_BYTES +
883− + RXE_ATMETH_BYTES
884− + RXE_DETH_BYTES +
885− + RXE_RDETH_BYTES,
884+ RXE_ATMETH_BYTES +
885+ RXE_DETH_BYTES +
886+ RXE_RDETH_BYTES,
886887 }
887888 },
888889 [IB_OPCODE_RD_FETCH_ADD] = {
889890 .name = "IB_OPCODE_RD_FETCH_ADD",
890− .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK
891− | RXE_REQ_MASK | RXE_ATOMIC_MASK
892− | RXE_START_MASK | RXE_END_MASK,
893− .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES
894− + RXE_RDETH_BYTES,
891+ .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK |
892+ RXE_REQ_MASK | RXE_ATOMIC_MASK |
893+ RXE_START_MASK | RXE_END_MASK,
894+ .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES +
895+ RXE_RDETH_BYTES,
895896 .offset = {
896897 [RXE_BTH] = 0,
897898 [RXE_RDETH] = RXE_BTH_BYTES,
898− [RXE_DETH] = RXE_BTH_BYTES
899− + RXE_RDETH_BYTES,
900− [RXE_ATMETH] = RXE_BTH_BYTES
901− + RXE_RDETH_BYTES
902− + RXE_DETH_BYTES,
899+ [RXE_DETH] = RXE_BTH_BYTES +
900+ RXE_RDETH_BYTES,
901+ [RXE_ATMETH] = RXE_BTH_BYTES +
902+ RXE_RDETH_BYTES +
903+ RXE_DETH_BYTES,
903904 [RXE_PAYLOAD] = RXE_BTH_BYTES +
904− + RXE_ATMETH_BYTES
905− + RXE_DETH_BYTES +
906− + RXE_RDETH_BYTES,
905+ RXE_ATMETH_BYTES +
906+ RXE_DETH_BYTES +
907+ RXE_RDETH_BYTES,
907908 }
908909 },
909910
910911 /* UD */
911912 [IB_OPCODE_UD_SEND_ONLY] = {
912913 .name = "IB_OPCODE_UD_SEND_ONLY",
913− .mask = RXE_DETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
914− | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
915− | RXE_START_MASK | RXE_END_MASK,
914+ .mask = RXE_DETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
915+ RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
916+ RXE_START_MASK | RXE_END_MASK,
916917 .length = RXE_BTH_BYTES + RXE_DETH_BYTES,
917918 .offset = {
918919 [RXE_BTH] = 0,
919920 [RXE_DETH] = RXE_BTH_BYTES,
920− [RXE_PAYLOAD] = RXE_BTH_BYTES
921− + RXE_DETH_BYTES,
921+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
922+ RXE_DETH_BYTES,
922923 }
923924 },
924925 [IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE] = {
925926 .name = "IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE",
926− .mask = RXE_DETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
927− | RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK
928− | RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
927+ .mask = RXE_DETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
928+ RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
929+ RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
929930 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES,
930931 .offset = {
931932 [RXE_BTH] = 0,
932933 [RXE_DETH] = RXE_BTH_BYTES,
933− [RXE_IMMDT] = RXE_BTH_BYTES
934− + RXE_DETH_BYTES,
935− [RXE_PAYLOAD] = RXE_BTH_BYTES
936− + RXE_DETH_BYTES
937− + RXE_IMMDT_BYTES,
934+ [RXE_IMMDT] = RXE_BTH_BYTES +
935+ RXE_DETH_BYTES,
936+ [RXE_PAYLOAD] = RXE_BTH_BYTES +
937+ RXE_DETH_BYTES +
938+ RXE_IMMDT_BYTES,
938939 }
939940 },
940941
drivers/infiniband/sw/rxe/rxe_pool.c+84−93
@@ -5,13 +5,14 @@ · 4 unmodified lines
55 */
66
77 #include "rxe.h"
8−#include "rxe_loc.h"
8+
9+#define RXE_POOL_ALIGN (16)
910
1011 static const struct rxe_type_info {
1112 const char *name;
1213 size_t size;
1314 size_t elem_offset;
14− void (*cleanup)(struct rxe_pool_entry *obj);
15+ void (*cleanup)(struct rxe_pool_elem *obj);
1516 enum rxe_pool_flags flags;
1617 u32 min_index;
1718 u32 max_index;
@@ -21,19 +22,19 @@ static const struct rxe_type_info { · 3 unmodified lines
2122 [RXE_TYPE_UC] = {
2223 .name = "rxe-uc",
2324 .size = sizeof(struct rxe_ucontext),
24− .elem_offset = offsetof(struct rxe_ucontext, pelem),
25+ .elem_offset = offsetof(struct rxe_ucontext, elem),
2526 .flags = RXE_POOL_NO_ALLOC,
2627 },
2728 [RXE_TYPE_PD] = {
2829 .name = "rxe-pd",
2930 .size = sizeof(struct rxe_pd),
30− .elem_offset = offsetof(struct rxe_pd, pelem),
31+ .elem_offset = offsetof(struct rxe_pd, elem),
3132 .flags = RXE_POOL_NO_ALLOC,
3233 },
3334 [RXE_TYPE_AH] = {
3435 .name = "rxe-ah",
3536 .size = sizeof(struct rxe_ah),
36− .elem_offset = offsetof(struct rxe_ah, pelem),
37+ .elem_offset = offsetof(struct rxe_ah, elem),
3738 .flags = RXE_POOL_INDEX | RXE_POOL_NO_ALLOC,
3839 .min_index = RXE_MIN_AH_INDEX,
3940 .max_index = RXE_MAX_AH_INDEX,
@@ -41,7 +42,7 @@ static const struct rxe_type_info { · 1 unmodified line
4142 [RXE_TYPE_SRQ] = {
4243 .name = "rxe-srq",
4344 .size = sizeof(struct rxe_srq),
44− .elem_offset = offsetof(struct rxe_srq, pelem),
45+ .elem_offset = offsetof(struct rxe_srq, elem),
4546 .flags = RXE_POOL_INDEX | RXE_POOL_NO_ALLOC,
4647 .min_index = RXE_MIN_SRQ_INDEX,
4748 .max_index = RXE_MAX_SRQ_INDEX,
@@ -49,7 +50,7 @@ static const struct rxe_type_info { · 1 unmodified line
4950 [RXE_TYPE_QP] = {
5051 .name = "rxe-qp",
5152 .size = sizeof(struct rxe_qp),
52− .elem_offset = offsetof(struct rxe_qp, pelem),
53+ .elem_offset = offsetof(struct rxe_qp, elem),
5354 .cleanup = rxe_qp_cleanup,
5455 .flags = RXE_POOL_INDEX | RXE_POOL_NO_ALLOC,
5556 .min_index = RXE_MIN_QP_INDEX,
@@ -58,14 +59,14 @@ static const struct rxe_type_info { · 2 unmodified lines
5859 [RXE_TYPE_CQ] = {
5960 .name = "rxe-cq",
6061 .size = sizeof(struct rxe_cq),
61− .elem_offset = offsetof(struct rxe_cq, pelem),
62+ .elem_offset = offsetof(struct rxe_cq, elem),
6263 .flags = RXE_POOL_NO_ALLOC,
6364 .cleanup = rxe_cq_cleanup,
6465 },
6566 [RXE_TYPE_MR] = {
6667 .name = "rxe-mr",
6768 .size = sizeof(struct rxe_mr),
68− .elem_offset = offsetof(struct rxe_mr, pelem),
69+ .elem_offset = offsetof(struct rxe_mr, elem),
6970 .cleanup = rxe_mr_cleanup,
7071 .flags = RXE_POOL_INDEX,
7172 .min_index = RXE_MIN_MR_INDEX,
@@ -74,7 +75,7 @@ static const struct rxe_type_info { · 2 unmodified lines
7475 [RXE_TYPE_MW] = {
7576 .name = "rxe-mw",
7677 .size = sizeof(struct rxe_mw),
77− .elem_offset = offsetof(struct rxe_mw, pelem),
78+ .elem_offset = offsetof(struct rxe_mw, elem),
7879 .cleanup = rxe_mw_cleanup,
7980 .flags = RXE_POOL_INDEX | RXE_POOL_NO_ALLOC,
8081 .min_index = RXE_MIN_MW_INDEX,
@@ -83,7 +84,7 @@ static const struct rxe_type_info { · 2 unmodified lines
8384 [RXE_TYPE_MC_GRP] = {
8485 .name = "rxe-mc_grp",
8586 .size = sizeof(struct rxe_mc_grp),
86− .elem_offset = offsetof(struct rxe_mc_grp, pelem),
87+ .elem_offset = offsetof(struct rxe_mc_grp, elem),
8788 .cleanup = rxe_mc_cleanup,
8889 .flags = RXE_POOL_KEY,
8990 .key_offset = offsetof(struct rxe_mc_grp, mgid),
@@ -92,15 +93,10 @@ static const struct rxe_type_info { · 2 unmodified lines
9293 [RXE_TYPE_MC_ELEM] = {
9394 .name = "rxe-mc_elem",
9495 .size = sizeof(struct rxe_mc_elem),
95− .elem_offset = offsetof(struct rxe_mc_elem, pelem),
96+ .elem_offset = offsetof(struct rxe_mc_elem, elem),
9697 },
9798 };
9899
99−static inline const char *pool_name(struct rxe_pool *pool)
100−{
101− return rxe_type_info[pool->type].name;
102−}
103−
104100 static int rxe_pool_init_index(struct rxe_pool *pool, u32 max, u32 min)
105101 {
106102 int err = 0;
@@ -130,35 +126,36 @@ int rxe_pool_init( · 23 unmodified lines
130126 enum rxe_elem_type type,
131127 unsigned int max_elem)
132128 {
129+ const struct rxe_type_info *info = &rxe_type_info[type];
133130 int err = 0;
134− size_t size = rxe_type_info[type].size;
135131
136132 memset(pool, 0, sizeof(*pool));
137133
138134 pool->rxe = rxe;
135+ pool->name = info->name;
139136 pool->type = type;
140137 pool->max_elem = max_elem;
141− pool->elem_size = ALIGN(size, RXE_POOL_ALIGN);
142− pool->flags = rxe_type_info[type].flags;
143− pool->index.tree = RB_ROOT;
144− pool->key.tree = RB_ROOT;
145− pool->cleanup = rxe_type_info[type].cleanup;
138+ pool->elem_size = ALIGN(info->size, RXE_POOL_ALIGN);
139+ pool->elem_offset = info->elem_offset;
140+ pool->flags = info->flags;
141+ pool->cleanup = info->cleanup;
146142
147143 atomic_set(&pool->num_elem, 0);
148144
149145 rwlock_init(&pool->pool_lock);
150146
151− if (rxe_type_info[type].flags & RXE_POOL_INDEX) {
152− err = rxe_pool_init_index(pool,
153− rxe_type_info[type].max_index,
154− rxe_type_info[type].min_index);
147+ if (pool->flags & RXE_POOL_INDEX) {
148+ pool->index.tree = RB_ROOT;
149+ err = rxe_pool_init_index(pool, info->max_index,
150+ info->min_index);
155151 if (err)
156152 goto out;
157153 }
158154
159− if (rxe_type_info[type].flags & RXE_POOL_KEY) {
160− pool->key.key_offset = rxe_type_info[type].key_offset;
161− pool->key.key_size = rxe_type_info[type].key_size;
155+ if (pool->flags & RXE_POOL_KEY) {
156+ pool->key.tree = RB_ROOT;
157+ pool->key.key_offset = info->key_offset;
158+ pool->key.key_size = info->key_size;
162159 }
163160
164161 out:
@@ -169,9 +166,10 @@ void rxe_pool_cleanup(struct rxe_pool *pool) · 4 unmodified lines
169166 {
170167 if (atomic_read(&pool->num_elem) > 0)
171168 pr_warn("%s pool destroyed with unfree'd elem\n",
172− pool_name(pool));
169+ pool->name);
173170
174− bitmap_free(pool->index.table);
171+ if (pool->flags & RXE_POOL_INDEX)
172+ bitmap_free(pool->index.table);
175173 }
176174
177175 static u32 alloc_index(struct rxe_pool *pool)
@@ -189,15 +187,15 @@ static u32 alloc_index(struct rxe_pool *pool) · 11 unmodified lines
189187 return index + pool->index.min_index;
190188 }
191189
192−static int rxe_insert_index(struct rxe_pool *pool, struct rxe_pool_entry *new)
190+static int rxe_insert_index(struct rxe_pool *pool, struct rxe_pool_elem *new)
193191 {
194192 struct rb_node **link = &pool->index.tree.rb_node;
195193 struct rb_node *parent = NULL;
196− struct rxe_pool_entry *elem;
194+ struct rxe_pool_elem *elem;
197195
198196 while (*link) {
199197 parent = *link;
200− elem = rb_entry(parent, struct rxe_pool_entry, index_node);
198+ elem = rb_entry(parent, struct rxe_pool_elem, index_node);
201199
202200 if (elem->index == new->index) {
203201 pr_warn("element already exists!\n");
@@ -216,19 +214,20 @@ static int rxe_insert_index(struct rxe_pool *pool, struct rxe_pool_entry *new) · 12 unmodified lines
216214 return 0;
217215 }
218216
219−static int rxe_insert_key(struct rxe_pool *pool, struct rxe_pool_entry *new)
217+static int rxe_insert_key(struct rxe_pool *pool, struct rxe_pool_elem *new)
220218 {
221219 struct rb_node **link = &pool->key.tree.rb_node;
222220 struct rb_node *parent = NULL;
223− struct rxe_pool_entry *elem;
221+ struct rxe_pool_elem *elem;
224222 int cmp;
225223
226224 while (*link) {
227225 parent = *link;
228− elem = rb_entry(parent, struct rxe_pool_entry, key_node);
226+ elem = rb_entry(parent, struct rxe_pool_elem, key_node);
229227
230228 cmp = memcmp((u8 *)elem + pool->key.key_offset,
231− (u8 *)new + pool->key.key_offset, pool->key.key_size);
229+ (u8 *)new + pool->key.key_offset,
230+ pool->key.key_size);
232231
233232 if (cmp == 0) {
234233 pr_warn("key already exists!\n");
@@ -247,7 +246,7 @@ static int rxe_insert_key(struct rxe_pool *pool, struct rxe_pool_entry *new) · 12 unmodified lines
247246 return 0;
248247 }
249248
250−int __rxe_add_key_locked(struct rxe_pool_entry *elem, void *key)
249+int __rxe_add_key_locked(struct rxe_pool_elem *elem, void *key)
251250 {
252251 struct rxe_pool *pool = elem->pool;
253252 int err;
@@ -258,37 +257,35 @@ int __rxe_add_key_locked(struct rxe_pool_entry *elem, void *key) · 4 unmodified lines
258257 return err;
259258 }
260259
261−int __rxe_add_key(struct rxe_pool_entry *elem, void *key)
260+int __rxe_add_key(struct rxe_pool_elem *elem, void *key)
262261 {
263262 struct rxe_pool *pool = elem->pool;
264− unsigned long flags;
265263 int err;
266264
267− write_lock_irqsave(&pool->pool_lock, flags);
265+ write_lock_bh(&pool->pool_lock);
268266 err = __rxe_add_key_locked(elem, key);
269− write_unlock_irqrestore(&pool->pool_lock, flags);
267+ write_unlock_bh(&pool->pool_lock);
270268
271269 return err;
272270 }
273271
274−void __rxe_drop_key_locked(struct rxe_pool_entry *elem)
272+void __rxe_drop_key_locked(struct rxe_pool_elem *elem)
275273 {
276274 struct rxe_pool *pool = elem->pool;
277275
278276 rb_erase(&elem->key_node, &pool->key.tree);
279277 }
280278
281−void __rxe_drop_key(struct rxe_pool_entry *elem)
279+void __rxe_drop_key(struct rxe_pool_elem *elem)
282280 {
283281 struct rxe_pool *pool = elem->pool;
284− unsigned long flags;
285282
286− write_lock_irqsave(&pool->pool_lock, flags);
283+ write_lock_bh(&pool->pool_lock);
287284 __rxe_drop_key_locked(elem);
288− write_unlock_irqrestore(&pool->pool_lock, flags);
285+ write_unlock_bh(&pool->pool_lock);
289286 }
290287
291−int __rxe_add_index_locked(struct rxe_pool_entry *elem)
288+int __rxe_add_index_locked(struct rxe_pool_elem *elem)
292289 {
293290 struct rxe_pool *pool = elem->pool;
294291 int err;
@@ -299,20 +296,19 @@ int __rxe_add_index_locked(struct rxe_pool_entry *elem) · 4 unmodified lines
299296 return err;
300297 }
301298
302−int __rxe_add_index(struct rxe_pool_entry *elem)
299+int __rxe_add_index(struct rxe_pool_elem *elem)
303300 {
304301 struct rxe_pool *pool = elem->pool;
305− unsigned long flags;
306302 int err;
307303
308− write_lock_irqsave(&pool->pool_lock, flags);
304+ write_lock_bh(&pool->pool_lock);
309305 err = __rxe_add_index_locked(elem);
310− write_unlock_irqrestore(&pool->pool_lock, flags);
306+ write_unlock_bh(&pool->pool_lock);
311307
312308 return err;
313309 }
314310
315−void __rxe_drop_index_locked(struct rxe_pool_entry *elem)
311+void __rxe_drop_index_locked(struct rxe_pool_elem *elem)
316312 {
317313 struct rxe_pool *pool = elem->pool;
318314
@@ -320,32 +316,31 @@ void __rxe_drop_index_locked(struct rxe_pool_entry *elem) · 1 unmodified line
320316 rb_erase(&elem->index_node, &pool->index.tree);
321317 }
322318
323−void __rxe_drop_index(struct rxe_pool_entry *elem)
319+void __rxe_drop_index(struct rxe_pool_elem *elem)
324320 {
325321 struct rxe_pool *pool = elem->pool;
326− unsigned long flags;
327322
328− write_lock_irqsave(&pool->pool_lock, flags);
323+ write_lock_bh(&pool->pool_lock);
329324 __rxe_drop_index_locked(elem);
330− write_unlock_irqrestore(&pool->pool_lock, flags);
325+ write_unlock_bh(&pool->pool_lock);
331326 }
332327
333328 void *rxe_alloc_locked(struct rxe_pool *pool)
334329 {
335− const struct rxe_type_info *info = &rxe_type_info[pool->type];
336− struct rxe_pool_entry *elem;
337− u8 *obj;
330+ struct rxe_pool_elem *elem;
331+ void *obj;
338332
339333 if (atomic_inc_return(&pool->num_elem) > pool->max_elem)
340334 goto out_cnt;
341335
342− obj = kzalloc(info->size, GFP_ATOMIC);
336+ obj = kzalloc(pool->elem_size, GFP_ATOMIC);
343337 if (!obj)
344338 goto out_cnt;
345339
346− elem = (struct rxe_pool_entry *)(obj + info->elem_offset);
340+ elem = (struct rxe_pool_elem *)((u8 *)obj + pool->elem_offset);
347341
348342 elem->pool = pool;
343+ elem->obj = obj;
349344 kref_init(&elem->ref_cnt);
350345
351346 return obj;
@@ -357,20 +352,20 @@ out_cnt: · 5 unmodified lines
357352
358353 void *rxe_alloc(struct rxe_pool *pool)
359354 {
360− const struct rxe_type_info *info = &rxe_type_info[pool->type];
361− struct rxe_pool_entry *elem;
362− u8 *obj;
355+ struct rxe_pool_elem *elem;
356+ void *obj;
363357
364358 if (atomic_inc_return(&pool->num_elem) > pool->max_elem)
365359 goto out_cnt;
366360
367− obj = kzalloc(info->size, GFP_KERNEL);
361+ obj = kzalloc(pool->elem_size, GFP_KERNEL);
368362 if (!obj)
369363 goto out_cnt;
370364
371− elem = (struct rxe_pool_entry *)(obj + info->elem_offset);
365+ elem = (struct rxe_pool_elem *)((u8 *)obj + pool->elem_offset);
372366
373367 elem->pool = pool;
368+ elem->obj = obj;
374369 kref_init(&elem->ref_cnt);
375370
376371 return obj;
@@ -380,12 +375,13 @@ out_cnt: · 3 unmodified lines
380375 return NULL;
381376 }
382377
383−int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_entry *elem)
378+int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_elem *elem)
384379 {
385380 if (atomic_inc_return(&pool->num_elem) > pool->max_elem)
386381 goto out_cnt;
387382
388383 elem->pool = pool;
384+ elem->obj = (u8 *)elem - pool->elem_offset;
389385 kref_init(&elem->ref_cnt);
390386
391387 return 0;
@@ -397,17 +393,16 @@ out_cnt: · 5 unmodified lines
397393
398394 void rxe_elem_release(struct kref *kref)
399395 {
400− struct rxe_pool_entry *elem =
401− container_of(kref, struct rxe_pool_entry, ref_cnt);
396+ struct rxe_pool_elem *elem =
397+ container_of(kref, struct rxe_pool_elem, ref_cnt);
402398 struct rxe_pool *pool = elem->pool;
403− const struct rxe_type_info *info = &rxe_type_info[pool->type];
404− u8 *obj;
399+ void *obj;
405400
406401 if (pool->cleanup)
407402 pool->cleanup(elem);
408403
409404 if (!(pool->flags & RXE_POOL_NO_ALLOC)) {
410− obj = (u8 *)elem - info->elem_offset;
405+ obj = elem->obj;
411406 kfree(obj);
412407 }
413408
@@ -416,15 +411,14 @@ void rxe_elem_release(struct kref *kref) · 2 unmodified lines
416411
417412 void *rxe_pool_get_index_locked(struct rxe_pool *pool, u32 index)
418413 {
419− const struct rxe_type_info *info = &rxe_type_info[pool->type];
420414 struct rb_node *node;
421− struct rxe_pool_entry *elem;
422− u8 *obj;
415+ struct rxe_pool_elem *elem;
416+ void *obj;
423417
424418 node = pool->index.tree.rb_node;
425419
426420 while (node) {
427− elem = rb_entry(node, struct rxe_pool_entry, index_node);
421+ elem = rb_entry(node, struct rxe_pool_elem, index_node);
428422
429423 if (elem->index > index)
430424 node = node->rb_left;
@@ -436,7 +430,7 @@ void *rxe_pool_get_index_locked(struct rxe_pool *pool, u32 index) · 5 unmodified lines
436430
437431 if (node) {
438432 kref_get(&elem->ref_cnt);
439− obj = (u8 *)elem - info->elem_offset;
433+ obj = elem->obj;
440434 } else {
441435 obj = NULL;
442436 }
@@ -446,28 +440,26 @@ void *rxe_pool_get_index_locked(struct rxe_pool *pool, u32 index) · 3 unmodified lines
446440
447441 void *rxe_pool_get_index(struct rxe_pool *pool, u32 index)
448442 {
449− u8 *obj;
450− unsigned long flags;
443+ void *obj;
451444
452− read_lock_irqsave(&pool->pool_lock, flags);
445+ read_lock_bh(&pool->pool_lock);
453446 obj = rxe_pool_get_index_locked(pool, index);
454− read_unlock_irqrestore(&pool->pool_lock, flags);
447+ read_unlock_bh(&pool->pool_lock);
455448
456449 return obj;
457450 }
458451
459452 void *rxe_pool_get_key_locked(struct rxe_pool *pool, void *key)
460453 {
461− const struct rxe_type_info *info = &rxe_type_info[pool->type];
462454 struct rb_node *node;
463− struct rxe_pool_entry *elem;
464− u8 *obj;
455+ struct rxe_pool_elem *elem;
456+ void *obj;
465457 int cmp;
466458
467459 node = pool->key.tree.rb_node;
468460
469461 while (node) {
470− elem = rb_entry(node, struct rxe_pool_entry, key_node);
462+ elem = rb_entry(node, struct rxe_pool_elem, key_node);
471463
472464 cmp = memcmp((u8 *)elem + pool->key.key_offset,
473465 key, pool->key.key_size);
@@ -482,7 +474,7 @@ void *rxe_pool_get_key_locked(struct rxe_pool *pool, void *key) · 8 unmodified lines
482474
483475 if (node) {
484476 kref_get(&elem->ref_cnt);
485− obj = (u8 *)elem - info->elem_offset;
477+ obj = elem->obj;
486478 } else {
487479 obj = NULL;
488480 }
@@ -492,12 +484,11 @@ void *rxe_pool_get_key_locked(struct rxe_pool *pool, void *key) · 3 unmodified lines
492484
493485 void *rxe_pool_get_key(struct rxe_pool *pool, void *key)
494486 {
495− u8 *obj;
496− unsigned long flags;
487+ void *obj;
497488
498− read_lock_irqsave(&pool->pool_lock, flags);
489+ read_lock_bh(&pool->pool_lock);
499490 obj = rxe_pool_get_key_locked(pool, key);
500− read_unlock_irqrestore(&pool->pool_lock, flags);
491+ read_unlock_bh(&pool->pool_lock);
501492
502493 return obj;
503494 }
drivers/infiniband/sw/rxe/rxe_pool.h+26−28
@@ -7,9 +7,6 @@ · 6 unmodified lines
77 #ifndef RXE_POOL_H
88 #define RXE_POOL_H
99
10−#define RXE_POOL_ALIGN (16)
11−#define RXE_POOL_CACHE_FLAGS (0)
12−
1310 enum rxe_pool_flags {
1411 RXE_POOL_INDEX = BIT(1),
1512 RXE_POOL_KEY = BIT(2),
@@ -30,10 +27,9 @@ enum rxe_elem_type { · 14 unmodified lines
3027 RXE_NUM_TYPES, /* keep me last */
3128 };
3229
33−struct rxe_pool_entry;
34−
35−struct rxe_pool_entry {
30+struct rxe_pool_elem {
3631 struct rxe_pool *pool;
32+ void *obj;
3733 struct kref ref_cnt;
3834 struct list_head list;
3935
@@ -47,14 +43,16 @@ struct rxe_pool_entry { · 7 unmodified lines
4743
4844 struct rxe_pool {
4945 struct rxe_dev *rxe;
46+ const char *name;
5047 rwlock_t pool_lock; /* protects pool add/del/search */
51− size_t elem_size;
52− void (*cleanup)(struct rxe_pool_entry *obj);
48+ void (*cleanup)(struct rxe_pool_elem *obj);
5349 enum rxe_pool_flags flags;
5450 enum rxe_elem_type type;
5551
5652 unsigned int max_elem;
5753 atomic_t num_elem;
54+ size_t elem_size;
55+ size_t elem_offset;
5856
5957 /* only used if indexed */
6058 struct {
@@ -89,51 +87,51 @@ void *rxe_alloc_locked(struct rxe_pool *pool); · 28 unmodified lines
8987 void *rxe_alloc(struct rxe_pool *pool);
9088
9189 /* connect already allocated object to pool */
92−int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_entry *elem);
90+int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_elem *elem);
9391
94−#define rxe_add_to_pool(pool, obj) __rxe_add_to_pool(pool, &(obj)->pelem)
92+#define rxe_add_to_pool(pool, obj) __rxe_add_to_pool(pool, &(obj)->elem)
9593
9694 /* assign an index to an indexed object and insert object into
9795 * pool's rb tree holding and not holding the pool_lock
9896 */
99−int __rxe_add_index_locked(struct rxe_pool_entry *elem);
97+int __rxe_add_index_locked(struct rxe_pool_elem *elem);
10098
101−#define rxe_add_index_locked(obj) __rxe_add_index_locked(&(obj)->pelem)
99+#define rxe_add_index_locked(obj) __rxe_add_index_locked(&(obj)->elem)
102100
103−int __rxe_add_index(struct rxe_pool_entry *elem);
101+int __rxe_add_index(struct rxe_pool_elem *elem);
104102
105−#define rxe_add_index(obj) __rxe_add_index(&(obj)->pelem)
103+#define rxe_add_index(obj) __rxe_add_index(&(obj)->elem)
106104
107105 /* drop an index and remove object from rb tree
108106 * holding and not holding the pool_lock
109107 */
110−void __rxe_drop_index_locked(struct rxe_pool_entry *elem);
108+void __rxe_drop_index_locked(struct rxe_pool_elem *elem);
111109
112−#define rxe_drop_index_locked(obj) __rxe_drop_index_locked(&(obj)->pelem)
110+#define rxe_drop_index_locked(obj) __rxe_drop_index_locked(&(obj)->elem)
113111
114−void __rxe_drop_index(struct rxe_pool_entry *elem);
112+void __rxe_drop_index(struct rxe_pool_elem *elem);
115113
116−#define rxe_drop_index(obj) __rxe_drop_index(&(obj)->pelem)
114+#define rxe_drop_index(obj) __rxe_drop_index(&(obj)->elem)
117115
118116 /* assign a key to a keyed object and insert object into
119117 * pool's rb tree holding and not holding pool_lock
120118 */
121−int __rxe_add_key_locked(struct rxe_pool_entry *elem, void *key);
119+int __rxe_add_key_locked(struct rxe_pool_elem *elem, void *key);
122120
123−#define rxe_add_key_locked(obj, key) __rxe_add_key_locked(&(obj)->pelem, key)
121+#define rxe_add_key_locked(obj, key) __rxe_add_key_locked(&(obj)->elem, key)
124122
125−int __rxe_add_key(struct rxe_pool_entry *elem, void *key);
123+int __rxe_add_key(struct rxe_pool_elem *elem, void *key);
126124
127−#define rxe_add_key(obj, key) __rxe_add_key(&(obj)->pelem, key)
125+#define rxe_add_key(obj, key) __rxe_add_key(&(obj)->elem, key)
128126
129127 /* remove elem from rb tree holding and not holding the pool_lock */
130−void __rxe_drop_key_locked(struct rxe_pool_entry *elem);
128+void __rxe_drop_key_locked(struct rxe_pool_elem *elem);
131129
132−#define rxe_drop_key_locked(obj) __rxe_drop_key_locked(&(obj)->pelem)
130+#define rxe_drop_key_locked(obj) __rxe_drop_key_locked(&(obj)->elem)
133131
134−void __rxe_drop_key(struct rxe_pool_entry *elem);
132+void __rxe_drop_key(struct rxe_pool_elem *elem);
135133
136−#define rxe_drop_key(obj) __rxe_drop_key(&(obj)->pelem)
134+#define rxe_drop_key(obj) __rxe_drop_key(&(obj)->elem)
137135
138136 /* lookup an indexed object from index holding and not holding the pool_lock.
139137 * takes a reference on object
@@ -153,9 +151,9 @@ void *rxe_pool_get_key(struct rxe_pool *pool, void *key); · 13 unmodified lines
153151 void rxe_elem_release(struct kref *kref);
154152
155153 /* take a reference on an object */
156−#define rxe_add_ref(elem) kref_get(&(elem)->pelem.ref_cnt)
154+#define rxe_add_ref(obj) kref_get(&(obj)->elem.ref_cnt)
157155
158156 /* drop a reference on an object */
159−#define rxe_drop_ref(elem) kref_put(&(elem)->pelem.ref_cnt, rxe_elem_release)
157+#define rxe_drop_ref(obj) kref_put(&(obj)->elem.ref_cnt, rxe_elem_release)
160158
161159 #endif /* RXE_POOL_H */
drivers/infiniband/sw/rxe/rxe_qp.c+3−3
@@ -167,7 +167,7 @@ static void rxe_qp_init_misc(struct rxe_dev *rxe, struct rxe_qp *qp, · 166 unmodified lines
167167 qp->attr.path_mtu = 1;
168168 qp->mtu = ib_mtu_enum_to_int(qp->attr.path_mtu);
169169
170− qpn = qp->pelem.index;
170+ qpn = qp->elem.index;
171171 port = &rxe->port;
172172
173173 switch (init->qp_type) {
@@ -832,9 +832,9 @@ static void rxe_qp_do_cleanup(struct work_struct *work) · 658 unmodified lines
832832 }
833833
834834 /* called when the last reference to the qp is dropped */
835−void rxe_qp_cleanup(struct rxe_pool_entry *arg)
835+void rxe_qp_cleanup(struct rxe_pool_elem *elem)
836836 {
837− struct rxe_qp *qp = container_of(arg, typeof(*qp), pelem);
837+ struct rxe_qp *qp = container_of(elem, typeof(*qp), elem);
838838
839839 execute_in_process_context(rxe_qp_do_cleanup, &qp->cleanup_work);
840840 }
drivers/infiniband/sw/rxe/rxe_queue.c+4−5
@@ -151,7 +151,6 @@ int rxe_queue_resize(struct rxe_queue *q, unsigned int *num_elem_p, · 150 unmodified lines
151151 struct rxe_queue *new_q;
152152 unsigned int num_elem = *num_elem_p;
153153 int err;
154− unsigned long flags = 0, flags1;
155154
156155 new_q = rxe_queue_init(q->rxe, &num_elem, elem_size, q->type);
157156 if (!new_q)
@@ -165,17 +164,17 @@ int rxe_queue_resize(struct rxe_queue *q, unsigned int *num_elem_p, · 7 unmodified lines
165164 goto err1;
166165 }
167166
168− spin_lock_irqsave(consumer_lock, flags1);
167+ spin_lock_bh(consumer_lock);
169168
170169 if (producer_lock) {
171− spin_lock_irqsave(producer_lock, flags);
170+ spin_lock_bh(producer_lock);
172171 err = resize_finish(q, new_q, num_elem);
173− spin_unlock_irqrestore(producer_lock, flags);
172+ spin_unlock_bh(producer_lock);
174173 } else {
175174 err = resize_finish(q, new_q, num_elem);
176175 }
177176
178− spin_unlock_irqrestore(consumer_lock, flags1);
177+ spin_unlock_bh(consumer_lock);
179178
180179 rxe_queue_cleanup(new_q); /* new/old dep on err */
181180 if (err)
drivers/infiniband/sw/rxe/rxe_req.c+5−11
@@ -110,7 +110,6 @@ void rnr_nak_timer(struct timer_list *t) · 109 unmodified lines
110110 static struct rxe_send_wqe *req_next_wqe(struct rxe_qp *qp)
111111 {
112112 struct rxe_send_wqe *wqe;
113− unsigned long flags;
114113 struct rxe_queue *q = qp->sq.queue;
115114 unsigned int index = qp->req.wqe_index;
116115 unsigned int cons;
@@ -124,25 +123,23 @@ static struct rxe_send_wqe *req_next_wqe(struct rxe_qp *qp) · 7 unmodified lines
124123 /* check to see if we are drained;
125124 * state_lock used by requester and completer
126125 */
127− spin_lock_irqsave(&qp->state_lock, flags);
126+ spin_lock_bh(&qp->state_lock);
128127 do {
129128 if (qp->req.state != QP_STATE_DRAIN) {
130129 /* comp just finished */
131− spin_unlock_irqrestore(&qp->state_lock,
132− flags);
130+ spin_unlock_bh(&qp->state_lock);
133131 break;
134132 }
135133
136134 if (wqe && ((index != cons) ||
137135 (wqe->state != wqe_state_posted))) {
138136 /* comp not done yet */
139− spin_unlock_irqrestore(&qp->state_lock,
140− flags);
137+ spin_unlock_bh(&qp->state_lock);
141138 break;
142139 }
143140
144141 qp->req.state = QP_STATE_DRAINED;
145− spin_unlock_irqrestore(&qp->state_lock, flags);
142+ spin_unlock_bh(&qp->state_lock);
146143
147144 if (qp->ibqp.event_handler) {
148145 struct ib_event ev;
@@ -372,7 +369,6 @@ static struct sk_buff *init_req_packet(struct rxe_qp *qp, · 223 unmodified lines
372369 int pad = (-payload) & 0x3;
373370 int paylen;
374371 int solicited;
375− u16 pkey;
376372 u32 qp_num;
377373 int ack_req;
378374
@@ -404,8 +400,6 @@ static struct sk_buff *init_req_packet(struct rxe_qp *qp, · 25 unmodified lines
404400 (pkt->mask & (RXE_WRITE_MASK | RXE_IMMDT_MASK)) ==
405401 (RXE_WRITE_MASK | RXE_IMMDT_MASK));
406402
407− pkey = IB_DEFAULT_PKEY_FULL;
408−
409403 qp_num = (pkt->mask & RXE_DETH_MASK) ? ibwr->wr.ud.remote_qpn :
410404 qp->attr.dest_qp_num;
411405
@@ -414,7 +408,7 @@ static struct sk_buff *init_req_packet(struct rxe_qp *qp, · 2 unmodified lines
414408 if (ack_req)
415409 qp->req.noack_pkts = 0;
416410
417− bth_init(pkt, pkt->opcode, solicited, 0, pad, pkey, qp_num,
411+ bth_init(pkt, pkt->opcode, solicited, 0, pad, IB_DEFAULT_PKEY_FULL, qp_num,
418412 ack_req, pkt->psn);
419413
420414 /* init optional headers */
drivers/infiniband/sw/rxe/rxe_srq.c+1−1
@@ -83,7 +83,7 @@ int rxe_srq_from_init(struct rxe_dev *rxe, struct rxe_srq *srq, · 82 unmodified lines
8383 srq->ibsrq.event_handler = init->event_handler;
8484 srq->ibsrq.srq_context = init->srq_context;
8585 srq->limit = init->attr.srq_limit;
86− srq->srq_num = srq->pelem.index;
86+ srq->srq_num = srq->elem.index;
8787 srq->rq.max_wr = init->attr.max_wr;
8888 srq->rq.max_sge = init->attr.max_sge;
8989
drivers/infiniband/sw/rxe/rxe_sysfs.c+0−119
@@ -1,119 +0,0 @@
1−// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
2−/*
3− * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved.
4− * Copyright (c) 2015 System Fabric Works, Inc. All rights reserved.
5− */
6−
7−#include "rxe.h"
8−#include "rxe_net.h"
9−
10−/* Copy argument and remove trailing CR. Return the new length. */
11−static int sanitize_arg(const char *val, char *intf, int intf_len)
12−{
13− int len;
14−
15− if (!val)
16− return 0;
17−
18− /* Remove newline. */
19− for (len = 0; len < intf_len - 1 && val[len] && val[len] != '\n'; len++)
20− intf[len] = val[len];
21− intf[len] = 0;
22−
23− if (len == 0 || (val[len] != 0 && val[len] != '\n'))
24− return 0;
25−
26− return len;
27−}
28−
29−static int rxe_param_set_add(const char *val, const struct kernel_param *kp)
30−{
31− int len;
32− int err = 0;
33− char intf[32];
34− struct net_device *ndev;
35− struct rxe_dev *exists;
36−
37− if (!rxe_initialized) {
38− pr_err("Module parameters are not supported, use rdma link add or rxe_cfg\n");
39− return -EAGAIN;
40− }
41−
42− len = sanitize_arg(val, intf, sizeof(intf));
43− if (!len) {
44− pr_err("add: invalid interface name\n");
45− return -EINVAL;
46− }
47−
48− ndev = dev_get_by_name(&init_net, intf);
49− if (!ndev) {
50− pr_err("interface %s not found\n", intf);
51− return -EINVAL;
52− }
53−
54− if (is_vlan_dev(ndev)) {
55− pr_err("rxe creation allowed on top of a real device only\n");
56− err = -EPERM;
57− goto err;
58− }
59−
60− exists = rxe_get_dev_from_net(ndev);
61− if (exists) {
62− ib_device_put(&exists->ib_dev);
63− pr_err("already configured on %s\n", intf);
64− err = -EINVAL;
65− goto err;
66− }
67−
68− err = rxe_net_add("rxe%d", ndev);
69− if (err) {
70− pr_err("failed to add %s\n", intf);
71− goto err;
72− }
73−
74−err:
75− dev_put(ndev);
76− return err;
77−}
78−
79−static int rxe_param_set_remove(const char *val, const struct kernel_param *kp)
80−{
81− int len;
82− char intf[32];
83− struct ib_device *ib_dev;
84−
85− len = sanitize_arg(val, intf, sizeof(intf));
86− if (!len) {
87− pr_err("add: invalid interface name\n");
88− return -EINVAL;
89− }
90−
91− if (strncmp("all", intf, len) == 0) {
92− pr_info("rxe_sys: remove all");
93− ib_unregister_driver(RDMA_DRIVER_RXE);
94− return 0;
95− }
96−
97− ib_dev = ib_device_get_by_name(intf, RDMA_DRIVER_RXE);
98− if (!ib_dev) {
99− pr_err("not configured on %s\n", intf);
100− return -EINVAL;
101− }
102−
103− ib_unregister_device_and_put(ib_dev);
104−
105− return 0;
106−}
107−
108−static const struct kernel_param_ops rxe_add_ops = {
109− .set = rxe_param_set_add,
110−};
111−
112−static const struct kernel_param_ops rxe_remove_ops = {
113− .set = rxe_param_set_remove,
114−};
115−
116−module_param_cb(add, &rxe_add_ops, NULL, 0200);
117−MODULE_PARM_DESC(add, "DEPRECATED. Create RXE device over network interface");
118−module_param_cb(remove, &rxe_remove_ops, NULL, 0200);
119−MODULE_PARM_DESC(remove, "DEPRECATED. Remove RXE device over network interface");
drivers/infiniband/sw/rxe/rxe_task.c+8−10
@@ -32,25 +32,24 @@ void rxe_do_task(struct tasklet_struct *t) · 31 unmodified lines
3232 {
3333 int cont;
3434 int ret;
35− unsigned long flags;
3635 struct rxe_task *task = from_tasklet(task, t, tasklet);
3736
38− spin_lock_irqsave(&task->state_lock, flags);
37+ spin_lock_bh(&task->state_lock);
3938 switch (task->state) {
4039 case TASK_STATE_START:
4140 task->state = TASK_STATE_BUSY;
42− spin_unlock_irqrestore(&task->state_lock, flags);
41+ spin_unlock_bh(&task->state_lock);
4342 break;
4443
4544 case TASK_STATE_BUSY:
4645 task->state = TASK_STATE_ARMED;
4746 fallthrough;
4847 case TASK_STATE_ARMED:
49− spin_unlock_irqrestore(&task->state_lock, flags);
48+ spin_unlock_bh(&task->state_lock);
5049 return;
5150
5251 default:
53− spin_unlock_irqrestore(&task->state_lock, flags);
52+ spin_unlock_bh(&task->state_lock);
5453 pr_warn("%s failed with bad state %d\n", __func__, task->state);
5554 return;
5655 }
@@ -59,7 +58,7 @@ void rxe_do_task(struct tasklet_struct *t) · 2 unmodified lines
5958 cont = 0;
6059 ret = task->func(task->arg);
6160
62− spin_lock_irqsave(&task->state_lock, flags);
61+ spin_lock_bh(&task->state_lock);
6362 switch (task->state) {
6463 case TASK_STATE_BUSY:
6564 if (ret)
@@ -81,7 +80,7 @@ void rxe_do_task(struct tasklet_struct *t) · 15 unmodified lines
8180 pr_warn("%s failed with bad state %d\n", __func__,
8281 task->state);
8382 }
84− spin_unlock_irqrestore(&task->state_lock, flags);
83+ spin_unlock_bh(&task->state_lock);
8584 } while (cont);
8685
8786 task->ret = ret;
@@ -106,7 +105,6 @@ int rxe_init_task(void *obj, struct rxe_task *task, · 18 unmodified lines
106105
107106 void rxe_cleanup_task(struct rxe_task *task)
108107 {
109− unsigned long flags;
110108 bool idle;
111109
112110 /*
@@ -116,9 +114,9 @@ void rxe_cleanup_task(struct rxe_task *task) · 3 unmodified lines
116114 task->destroyed = true;
117115
118116 do {
119− spin_lock_irqsave(&task->state_lock, flags);
117+ spin_lock_bh(&task->state_lock);
120118 idle = (task->state == TASK_STATE_START);
121− spin_unlock_irqrestore(&task->state_lock, flags);
119+ spin_unlock_bh(&task->state_lock);
122120 } while (!idle);
123121
124122 tasklet_kill(&task->tasklet);
drivers/infiniband/sw/rxe/rxe_verbs.c+17−17
@@ -182,7 +182,7 @@ static int rxe_create_ah(struct ib_ah *ibah, · 181 unmodified lines
182182
183183 /* create index > 0 */
184184 rxe_add_index(ah);
185− ah->ah_num = ah->pelem.index;
185+ ah->ah_num = ah->elem.index;
186186
187187 if (uresp) {
188188 /* only if new user provider */
@@ -383,10 +383,9 @@ static int rxe_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr, · 194 unmodified lines
383383 const struct ib_recv_wr **bad_wr)
384384 {
385385 int err = 0;
386− unsigned long flags;
387386 struct rxe_srq *srq = to_rsrq(ibsrq);
388387
389− spin_lock_irqsave(&srq->rq.producer_lock, flags);
388+ spin_lock_bh(&srq->rq.producer_lock);
390389
391390 while (wr) {
392391 err = post_one_recv(&srq->rq, wr);
@@ -395,7 +394,7 @@ static int rxe_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr, · 2 unmodified lines
395394 wr = wr->next;
396395 }
397396
398− spin_unlock_irqrestore(&srq->rq.producer_lock, flags);
397+ spin_unlock_bh(&srq->rq.producer_lock);
399398
400399 if (err)
401400 *bad_wr = wr;
@@ -469,6 +468,11 @@ static int rxe_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, · 67 unmodified lines
469468 if (err)
470469 goto err1;
471470
471+ if ((mask & IB_QP_AV) && (attr->ah_attr.ah_flags & IB_AH_GRH))
472+ qp->src_port = rdma_get_udp_sport(attr->ah_attr.grh.flow_label,
473+ qp->ibqp.qp_num,
474+ qp->attr.dest_qp_num);
475+
472476 return 0;
473477
474478 err1:
@@ -634,19 +638,18 @@ static int post_one_send(struct rxe_qp *qp, const struct ib_send_wr *ibwr, · 159 unmodified lines
634638 int err;
635639 struct rxe_sq *sq = &qp->sq;
636640 struct rxe_send_wqe *send_wqe;
637− unsigned long flags;
638641 int full;
639642
640643 err = validate_send_wr(qp, ibwr, mask, length);
641644 if (err)
642645 return err;
643646
644− spin_lock_irqsave(&qp->sq.sq_lock, flags);
647+ spin_lock_bh(&qp->sq.sq_lock);
645648
646649 full = queue_full(sq->queue, QUEUE_TYPE_TO_DRIVER);
647650
648651 if (unlikely(full)) {
649− spin_unlock_irqrestore(&qp->sq.sq_lock, flags);
652+ spin_unlock_bh(&qp->sq.sq_lock);
650653 return -ENOMEM;
651654 }
652655
@@ -655,7 +658,7 @@ static int post_one_send(struct rxe_qp *qp, const struct ib_send_wr *ibwr, · 2 unmodified lines
655658
656659 queue_advance_producer(sq->queue, QUEUE_TYPE_TO_DRIVER);
657660
658− spin_unlock_irqrestore(&qp->sq.sq_lock, flags);
661+ spin_unlock_bh(&qp->sq.sq_lock);
659662
660663 return 0;
661664 }
@@ -735,7 +738,6 @@ static int rxe_post_recv(struct ib_qp *ibqp, const struct ib_recv_wr *wr, · 73 unmodified lines
735738 int err = 0;
736739 struct rxe_qp *qp = to_rqp(ibqp);
737740 struct rxe_rq *rq = &qp->rq;
738− unsigned long flags;
739741
740742 if (unlikely((qp_state(qp) < IB_QPS_INIT) || !qp->valid)) {
741743 *bad_wr = wr;
@@ -749,7 +751,7 @@ static int rxe_post_recv(struct ib_qp *ibqp, const struct ib_recv_wr *wr, · 7 unmodified lines
749751 goto err1;
750752 }
751753
752− spin_lock_irqsave(&rq->producer_lock, flags);
754+ spin_lock_bh(&rq->producer_lock);
753755
754756 while (wr) {
755757 err = post_one_recv(rq, wr);
@@ -760,7 +762,7 @@ static int rxe_post_recv(struct ib_qp *ibqp, const struct ib_recv_wr *wr, · 4 unmodified lines
760762 wr = wr->next;
761763 }
762764
763− spin_unlock_irqrestore(&rq->producer_lock, flags);
765+ spin_unlock_bh(&rq->producer_lock);
764766
765767 if (qp->resp.state == QP_STATE_ERROR)
766768 rxe_run_task(&qp->resp.task, 1);
@@ -841,9 +843,8 @@ static int rxe_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) · 74 unmodified lines
841843 int i;
842844 struct rxe_cq *cq = to_rcq(ibcq);
843845 struct rxe_cqe *cqe;
844− unsigned long flags;
845846
846− spin_lock_irqsave(&cq->cq_lock, flags);
847+ spin_lock_bh(&cq->cq_lock);
847848 for (i = 0; i < num_entries; i++) {
848849 cqe = queue_head(cq->queue, QUEUE_TYPE_FROM_DRIVER);
849850 if (!cqe)
@@ -852,7 +853,7 @@ static int rxe_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) · 2 unmodified lines
852853 memcpy(wc++, &cqe->ibwc, sizeof(*wc));
853854 queue_advance_consumer(cq->queue, QUEUE_TYPE_FROM_DRIVER);
854855 }
855− spin_unlock_irqrestore(&cq->cq_lock, flags);
856+ spin_unlock_bh(&cq->cq_lock);
856857
857858 return i;
858859 }
@@ -870,11 +871,10 @@ static int rxe_peek_cq(struct ib_cq *ibcq, int wc_cnt) · 11 unmodified lines
870871 static int rxe_req_notify_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags)
871872 {
872873 struct rxe_cq *cq = to_rcq(ibcq);
873− unsigned long irq_flags;
874874 int ret = 0;
875875 int empty;
876876
877− spin_lock_irqsave(&cq->cq_lock, irq_flags);
877+ spin_lock_bh(&cq->cq_lock);
878878 if (cq->notify != IB_CQ_NEXT_COMP)
879879 cq->notify = flags & IB_CQ_SOLICITED_MASK;
880880
@@ -883,7 +883,7 @@ static int rxe_req_notify_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags) · 2 unmodified lines
883883 if ((flags & IB_CQ_REPORT_MISSED_EVENTS) && !empty)
884884 ret = 1;
885885
886− spin_unlock_irqrestore(&cq->cq_lock, irq_flags);
886+ spin_unlock_bh(&cq->cq_lock);
887887
888888 return ret;
889889 }
drivers/infiniband/sw/rxe/rxe_verbs.h+11−13
@@ -35,17 +35,17 @@ static inline int psn_compare(u32 psn_a, u32 psn_b) · 34 unmodified lines
3535
3636 struct rxe_ucontext {
3737 struct ib_ucontext ibuc;
38− struct rxe_pool_entry pelem;
38+ struct rxe_pool_elem elem;
3939 };
4040
4141 struct rxe_pd {
4242 struct ib_pd ibpd;
43− struct rxe_pool_entry pelem;
43+ struct rxe_pool_elem elem;
4444 };
4545
4646 struct rxe_ah {
4747 struct ib_ah ibah;
48− struct rxe_pool_entry pelem;
48+ struct rxe_pool_elem elem;
4949 struct rxe_av av;
5050 bool is_user;
5151 int ah_num;
@@ -60,7 +60,7 @@ struct rxe_cqe { · 8 unmodified lines
6060
6161 struct rxe_cq {
6262 struct ib_cq ibcq;
63− struct rxe_pool_entry pelem;
63+ struct rxe_pool_elem elem;
6464 struct rxe_queue *queue;
6565 spinlock_t cq_lock;
6666 u8 notify;
@@ -95,7 +95,7 @@ struct rxe_rq { · 28 unmodified lines
9595
9696 struct rxe_srq {
9797 struct ib_srq ibsrq;
98− struct rxe_pool_entry pelem;
98+ struct rxe_pool_elem elem;
9999 struct rxe_pd *pd;
100100 struct rxe_rq rq;
101101 u32 srq_num;
@@ -209,7 +209,7 @@ struct rxe_resp_info { · 107 unmodified lines
209209
210210 struct rxe_qp {
211211 struct ib_qp ibqp;
212− struct rxe_pool_entry pelem;
212+ struct rxe_pool_elem elem;
213213 struct ib_qp_attr attr;
214214 unsigned int valid;
215215 unsigned int mtu;
@@ -309,7 +309,7 @@ static inline int rkey_is_mw(u32 rkey) · 93 unmodified lines
309309 }
310310
311311 struct rxe_mr {
312− struct rxe_pool_entry pelem;
312+ struct rxe_pool_elem elem;
313313 struct ib_mr ibmr;
314314
315315 struct ib_umem *umem;
@@ -342,7 +342,7 @@ enum rxe_mw_state { · 26 unmodified lines
342342
343343 struct rxe_mw {
344344 struct ib_mw ibmw;
345− struct rxe_pool_entry pelem;
345+ struct rxe_pool_elem elem;
346346 spinlock_t lock;
347347 enum rxe_mw_state state;
348348 struct rxe_qp *qp; /* Type 2 only */
@@ -354,7 +354,7 @@ struct rxe_mw { · 5 unmodified lines
354354 };
355355
356356 struct rxe_mc_grp {
357− struct rxe_pool_entry pelem;
357+ struct rxe_pool_elem elem;
358358 spinlock_t mcg_lock; /* guard group */
359359 struct rxe_dev *rxe;
360360 struct list_head qp_list;
@@ -365,7 +365,7 @@ struct rxe_mc_grp { · 4 unmodified lines
365365 };
366366
367367 struct rxe_mc_elem {
368− struct rxe_pool_entry pelem;
368+ struct rxe_pool_elem elem;
369369 struct list_head qp_list;
370370 struct list_head grp_list;
371371 struct rxe_qp *qp;
@@ -392,8 +392,6 @@ struct rxe_dev { · 20 unmodified lines
392392
393393 struct net_device *ndev;
394394
395− int xmit_errors;
396−
397395 struct rxe_pool uc_pool;
398396 struct rxe_pool pd_pool;
399397 struct rxe_pool ah_pool;
@@ -484,6 +482,6 @@ static inline struct rxe_pd *rxe_mw_pd(struct rxe_mw *mw) · 84 unmodified lines
484482
485483 int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name);
486484
487−void rxe_mc_cleanup(struct rxe_pool_entry *arg);
485+void rxe_mc_cleanup(struct rxe_pool_elem *elem);
488486
489487 #endif /* RXE_VERBS_H */
drivers/infiniband/sw/siw/siw_verbs.c+4−2
@@ -8,6 +8,7 @@ · 7 unmodified lines
88 #include <linux/uaccess.h>
99 #include <linux/vmalloc.h>
1010 #include <linux/xarray.h>
11+#include <net/addrconf.h>
1112
1213 #include <rdma/iw_cm.h>
1314 #include <rdma/ib_verbs.h>
@@ -155,7 +156,8 @@ int siw_query_device(struct ib_device *base_dev, struct ib_device_attr *attr, · 141 unmodified lines
155156 attr->vendor_id = SIW_VENDOR_ID;
156157 attr->vendor_part_id = sdev->vendor_part_id;
157158
158− memcpy(&attr->sys_image_guid, sdev->netdev->dev_addr, 6);
159+ addrconf_addr_eui48((u8 *)&attr->sys_image_guid,
160+ sdev->netdev->dev_addr);
159161
160162 return 0;
161163 }
@@ -660,7 +662,7 @@ static int siw_copy_inline_sgl(const struct ib_send_wr *core_wr, · 498 unmodified lines
660662 kbuf += core_sge->length;
661663 core_sge++;
662664 }
663− sqe->sge[0].length = bytes > 0 ? bytes : 0;
665+ sqe->sge[0].length = max(bytes, 0);
664666 sqe->num_sge = bytes > 0 ? 1 : 0;
665667
666668 return bytes;
drivers/infiniband/ulp/iser/iscsi_iser.c+28−48
@@ -113,10 +113,6 @@ bool iser_pi_enable = false; · 112 unmodified lines
113113 module_param_named(pi_enable, iser_pi_enable, bool, S_IRUGO);
114114 MODULE_PARM_DESC(pi_enable, "Enable T10-PI offload support (default:disabled)");
115115
116−int iser_pi_guard;
117−module_param_named(pi_guard, iser_pi_guard, int, S_IRUGO);
118−MODULE_PARM_DESC(pi_guard, "T10-PI guard_type [deprecated]");
119−
120116 static int iscsi_iser_set(const char *val, const struct kernel_param *kp)
121117 {
122118 int ret;
@@ -139,9 +135,8 @@ static int iscsi_iser_set(const char *val, const struct kernel_param *kp) · 16 unmodified lines
139135 * Notes: In case of data length errors or iscsi PDU completion failures
140136 * this routine will signal iscsi layer of connection failure.
141137 */
142−void
143−iscsi_iser_recv(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
144− char *rx_data, int rx_data_len)
138+void iscsi_iser_recv(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
139+ char *rx_data, int rx_data_len)
145140 {
146141 int rc = 0;
147142 int datalen;
@@ -176,8 +171,7 @@ error: · 28 unmodified lines
176171 * Netes: This routine can't fail, just assign iscsi task
177172 * hdr and max hdr size.
178173 */
179−static int
180−iscsi_iser_pdu_alloc(struct iscsi_task *task, uint8_t opcode)
174+static int iscsi_iser_pdu_alloc(struct iscsi_task *task, uint8_t opcode)
181175 {
182176 struct iscsi_iser_task *iser_task = task->dd_data;
183177
@@ -198,9 +192,8 @@ iscsi_iser_pdu_alloc(struct iscsi_task *task, uint8_t opcode) · 14 unmodified lines
198192 * state mutex to avoid dereferencing the IB device which
199193 * may have already been terminated.
200194 */
201−int
202−iser_initialize_task_headers(struct iscsi_task *task,
203− struct iser_tx_desc *tx_desc)
195+int iser_initialize_task_headers(struct iscsi_task *task,
196+ struct iser_tx_desc *tx_desc)
204197 {
205198 struct iser_conn *iser_conn = task->conn->dd_data;
206199 struct iser_device *device = iser_conn->ib_conn.device;
@@ -237,8 +230,7 @@ iser_initialize_task_headers(struct iscsi_task *task, · 30 unmodified lines
237230 * Return: Returns zero on success or -ENOMEM when failing
238231 * to init task headers (dma mapping error).
239232 */
240−static int
241−iscsi_iser_task_init(struct iscsi_task *task)
233+static int iscsi_iser_task_init(struct iscsi_task *task)
242234 {
243235 struct iscsi_iser_task *iser_task = task->dd_data;
244236 int ret;
@@ -272,8 +264,8 @@ iscsi_iser_task_init(struct iscsi_task *task) · 27 unmodified lines
272264 * xmit.
273265 *
274266 **/
275−static int
276−iscsi_iser_mtask_xmit(struct iscsi_conn *conn, struct iscsi_task *task)
267+static int iscsi_iser_mtask_xmit(struct iscsi_conn *conn,
268+ struct iscsi_task *task)
277269 {
278270 int error = 0;
279271
@@ -290,9 +282,8 @@ iscsi_iser_mtask_xmit(struct iscsi_conn *conn, struct iscsi_task *task) · 10 unmodified lines
290282 return error;
291283 }
292284
293−static int
294−iscsi_iser_task_xmit_unsol_data(struct iscsi_conn *conn,
295− struct iscsi_task *task)
285+static int iscsi_iser_task_xmit_unsol_data(struct iscsi_conn *conn,
286+ struct iscsi_task *task)
296287 {
297288 struct iscsi_r2t_info *r2t = &task->unsol_r2t;
298289 struct iscsi_data hdr;
@@ -326,8 +317,7 @@ iscsi_iser_task_xmit_unsol_data_exit: · 27 unmodified lines
326317 *
327318 * Return: zero on success or escalates $error on failure.
328319 */
329−static int
330−iscsi_iser_task_xmit(struct iscsi_task *task)
320+static int iscsi_iser_task_xmit(struct iscsi_task *task)
331321 {
332322 struct iscsi_conn *conn = task->conn;
333323 struct iscsi_iser_task *iser_task = task->dd_data;
@@ -410,8 +400,7 @@ static void iscsi_iser_cleanup_task(struct iscsi_task *task) · 76 unmodified lines
410400 *
411401 * In addition the error sector is marked.
412402 */
413−static u8
414−iscsi_iser_check_protection(struct iscsi_task *task, sector_t *sector)
403+static u8 iscsi_iser_check_protection(struct iscsi_task *task, sector_t *sector)
415404 {
416405 struct iscsi_iser_task *iser_task = task->dd_data;
417406 enum iser_data_dir dir = iser_task->dir[ISER_DIR_IN] ?
@@ -460,11 +449,9 @@ iscsi_iser_conn_create(struct iscsi_cls_session *cls_session, · 42 unmodified lines
460449 * -EINVAL in case end-point doesn't exsits anymore or iser connection
461450 * state is not UP (teardown already started).
462451 */
463−static int
464−iscsi_iser_conn_bind(struct iscsi_cls_session *cls_session,
465− struct iscsi_cls_conn *cls_conn,
466− uint64_t transport_eph,
467− int is_leading)
452+static int iscsi_iser_conn_bind(struct iscsi_cls_session *cls_session,
453+ struct iscsi_cls_conn *cls_conn,
454+ uint64_t transport_eph, int is_leading)
468455 {
469456 struct iscsi_conn *conn = cls_conn->dd_data;
470457 struct iser_conn *iser_conn;
@@ -519,8 +506,7 @@ out: · 48 unmodified lines
519506 * from this point iscsi must call conn_stop in session/connection
520507 * teardown so iser transport must wait for it.
521508 */
522−static int
523−iscsi_iser_conn_start(struct iscsi_cls_conn *cls_conn)
509+static int iscsi_iser_conn_start(struct iscsi_cls_conn *cls_conn)
524510 {
525511 struct iscsi_conn *iscsi_conn;
526512 struct iser_conn *iser_conn;
@@ -542,8 +528,7 @@ iscsi_iser_conn_start(struct iscsi_cls_conn *cls_conn) · 15 unmodified lines
542528 * handle, so we call it under iser the state lock to protect against
543529 * this kind of race.
544530 */
545−static void
546−iscsi_iser_conn_stop(struct iscsi_cls_conn *cls_conn, int flag)
531+static void iscsi_iser_conn_stop(struct iscsi_cls_conn *cls_conn, int flag)
547532 {
548533 struct iscsi_conn *conn = cls_conn->dd_data;
549534 struct iser_conn *iser_conn = conn->dd_data;
@@ -578,8 +563,7 @@ iscsi_iser_conn_stop(struct iscsi_cls_conn *cls_conn, int flag) · 28 unmodified lines
578563 *
579564 * Removes and free iscsi host.
580565 */
581−static void
582−iscsi_iser_session_destroy(struct iscsi_cls_session *cls_session)
566+static void iscsi_iser_session_destroy(struct iscsi_cls_session *cls_session)
583567 {
584568 struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
585569
@@ -588,8 +572,7 @@ iscsi_iser_session_destroy(struct iscsi_cls_session *cls_session) · 2 unmodified lines
588572 iscsi_host_free(shost);
589573 }
590574
591−static inline unsigned int
592−iser_dif_prot_caps(int prot_caps)
575+static inline unsigned int iser_dif_prot_caps(int prot_caps)
593576 {
594577 int ret = 0;
595578
@@ -708,9 +691,8 @@ free_host: · 112 unmodified lines
708691 return NULL;
709692 }
710693
711−static int
712−iscsi_iser_set_param(struct iscsi_cls_conn *cls_conn,
713− enum iscsi_param param, char *buf, int buflen)
694+static int iscsi_iser_set_param(struct iscsi_cls_conn *cls_conn,
695+ enum iscsi_param param, char *buf, int buflen)
714696 {
715697 int value;
716698
@@ -760,8 +742,8 @@ iscsi_iser_set_param(struct iscsi_cls_conn *cls_conn, · 43 unmodified lines
760742 *
761743 * Output connection statistics.
762744 */
763−static void
764−iscsi_iser_conn_get_stats(struct iscsi_cls_conn *cls_conn, struct iscsi_stats *stats)
745+static void iscsi_iser_conn_get_stats(struct iscsi_cls_conn *cls_conn,
746+ struct iscsi_stats *stats)
765747 {
766748 struct iscsi_conn *conn = cls_conn->dd_data;
767749
@@ -812,9 +794,9 @@ static int iscsi_iser_get_ep_param(struct iscsi_endpoint *ep, · 44 unmodified lines
812794 * Return: iscsi_endpoint created by iscsi layer or ERR_PTR(error)
813795 * if fails.
814796 */
815−static struct iscsi_endpoint *
816−iscsi_iser_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr,
817− int non_blocking)
797+static struct iscsi_endpoint *iscsi_iser_ep_connect(struct Scsi_Host *shost,
798+ struct sockaddr *dst_addr,
799+ int non_blocking)
818800 {
819801 int err;
820802 struct iser_conn *iser_conn;
@@ -857,8 +839,7 @@ failure: · 36 unmodified lines
857839 * or more likely iser connection state transitioned to TEMINATING or
858840 * DOWN during the wait period.
859841 */
860−static int
861−iscsi_iser_ep_poll(struct iscsi_endpoint *ep, int timeout_ms)
842+static int iscsi_iser_ep_poll(struct iscsi_endpoint *ep, int timeout_ms)
862843 {
863844 struct iser_conn *iser_conn = ep->dd_data;
864845 int rc;
@@ -893,8 +874,7 @@ iscsi_iser_ep_poll(struct iscsi_endpoint *ep, int timeout_ms) · 28 unmodified lines
893874 * and cleanup or actually call it immediately in case we didn't pass
894875 * iscsi conn bind/start stage, thus it is safe.
895876 */
896−static void
897−iscsi_iser_ep_disconnect(struct iscsi_endpoint *ep)
877+static void iscsi_iser_ep_disconnect(struct iscsi_endpoint *ep)
898878 {
899879 struct iser_conn *iser_conn = ep->dd_data;
900880
drivers/infiniband/ulp/iser/iscsi_iser.h+3−20
@@ -119,8 +119,6 @@ · 118 unmodified lines
119119
120120 #define ISER_QP_MAX_RECV_DTOS (ISER_DEF_XMIT_CMDS_MAX)
121121
122−#define ISER_MIN_POSTED_RX (ISER_DEF_XMIT_CMDS_MAX >> 2)
123−
124122 /* the max TX (send) WR supported by the iSER QP is defined by *
125123 * max_send_wr = T * (1 + D) + C ; D is how many inflight dataouts we expect *
126124 * to have at max for SCSI command. The tx posting & completion handling code *
@@ -148,8 +146,6 @@ · 21 unmodified lines
148146 - ISER_MAX_RX_MISC_PDUS) / \
149147 (1 + ISER_INFLIGHT_DATAOUTS))
150148
151−#define ISER_SIGNAL_CMD_COUNT 32
152−
153149 /* Constant PDU lengths calculations */
154150 #define ISER_HEADERS_LEN (sizeof(struct iser_ctrl) + sizeof(struct iscsi_hdr))
155151
@@ -366,9 +362,6 @@ struct iser_fr_pool { · 210 unmodified lines
366362 * @qp: Connection Queue-pair
367363 * @cq: Connection completion queue
368364 * @cq_size: The number of max outstanding completions
369− * @post_recv_buf_count: post receive counter
370− * @sig_count: send work request signal count
371− * @rx_wr: receive work request for batch posts
372365 * @device: reference to iser device
373366 * @fr_pool: connection fast registration poool
374367 * @pi_support: Indicate device T10-PI support
@@ -379,9 +372,6 @@ struct ib_conn { · 4 unmodified lines
379372 struct ib_qp *qp;
380373 struct ib_cq *cq;
381374 u32 cq_size;
382− int post_recv_buf_count;
383− u8 sig_count;
384− struct ib_recv_wr rx_wr[ISER_MIN_POSTED_RX];
385375 struct iser_device *device;
386376 struct iser_fr_pool fr_pool;
387377 bool pi_support;
@@ -397,8 +387,6 @@ struct ib_conn { · 9 unmodified lines
397387 * @state: connection logical state
398388 * @qp_max_recv_dtos: maximum number of data outs, corresponds
399389 * to max number of post recvs
400− * @qp_max_recv_dtos_mask: (qp_max_recv_dtos - 1)
401− * @min_posted_rx: (qp_max_recv_dtos >> 2)
402390 * @max_cmds: maximum cmds allowed for this connection
403391 * @name: connection peer portal
404392 * @release_work: deffered work for release job
@@ -409,7 +397,6 @@ struct ib_conn { · 4 unmodified lines
409397 * (state is ISER_CONN_UP)
410398 * @conn_list: entry in ig conn list
411399 * @login_desc: login descriptor
412− * @rx_desc_head: head of rx_descs cyclic buffer
413400 * @rx_descs: rx buffers array (cyclic buffer)
414401 * @num_rx_descs: number of rx descriptors
415402 * @scsi_sg_tablesize: scsi host sg_tablesize
@@ -422,8 +409,6 @@ struct iser_conn { · 6 unmodified lines
422409 struct iscsi_endpoint *ep;
423410 enum iser_conn_state state;
424411 unsigned qp_max_recv_dtos;
425− unsigned qp_max_recv_dtos_mask;
426− unsigned min_posted_rx;
427412 u16 max_cmds;
428413 char name[ISER_OBJECT_NAME_SIZE];
429414 struct work_struct release_work;
@@ -433,7 +418,6 @@ struct iser_conn { · 3 unmodified lines
433418 struct completion up_completion;
434419 struct list_head conn_list;
435420 struct iser_login_desc login_desc;
436− unsigned int rx_desc_head;
437421 struct iser_rx_desc *rx_descs;
438422 u32 num_rx_descs;
439423 unsigned short scsi_sg_tablesize;
@@ -486,7 +470,6 @@ struct iser_global { · 46 unmodified lines
486470 extern struct iser_global ig;
487471 extern int iser_debug_level;
488472 extern bool iser_pi_enable;
489−extern int iser_pi_guard;
490473 extern unsigned int iser_max_sectors;
491474 extern bool iser_always_reg;
492475
@@ -543,9 +526,9 @@ int iser_connect(struct iser_conn *iser_conn, · 50 unmodified lines
543526 int non_blocking);
544527
545528 int iser_post_recvl(struct iser_conn *iser_conn);
546−int iser_post_recvm(struct iser_conn *iser_conn, int count);
547−int iser_post_send(struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc,
548− bool signal);
529+int iser_post_recvm(struct iser_conn *iser_conn,
530+ struct iser_rx_desc *rx_desc);
531+int iser_post_send(struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc);
549532
550533 int iser_dma_map_task_data(struct iscsi_iser_task *iser_task,
551534 struct iser_data_buf *data,
drivers/infiniband/ulp/iser/iser_initiator.c+41−65
@@ -95,11 +95,8 @@ static int iser_prepare_read_cmd(struct iscsi_task *task) · 94 unmodified lines
9595 * task->data[ISER_DIR_OUT].data_len, Protection size
9696 * is stored at task->prot[ISER_DIR_OUT].data_len
9797 */
98−static int
99−iser_prepare_write_cmd(struct iscsi_task *task,
100− unsigned int imm_sz,
101− unsigned int unsol_sz,
102− unsigned int edtl)
98+static int iser_prepare_write_cmd(struct iscsi_task *task, unsigned int imm_sz,
99+ unsigned int unsol_sz, unsigned int edtl)
103100 {
104101 struct iscsi_iser_task *iser_task = task->dd_data;
105102 struct iser_mem_reg *mem_reg;
@@ -160,8 +157,8 @@ iser_prepare_write_cmd(struct iscsi_task *task, · 54 unmodified lines
160157 }
161158
162159 /* creates a new tx descriptor and adds header regd buffer */
163−static void iser_create_send_desc(struct iser_conn *iser_conn,
164− struct iser_tx_desc *tx_desc)
160+static void iser_create_send_desc(struct iser_conn *iser_conn,
161+ struct iser_tx_desc *tx_desc)
165162 {
166163 struct iser_device *device = iser_conn->ib_conn.device;
167164
@@ -247,8 +244,6 @@ int iser_alloc_rx_descriptors(struct iser_conn *iser_conn, · 79 unmodified lines
247244 struct iser_device *device = ib_conn->device;
248245
249246 iser_conn->qp_max_recv_dtos = session->cmds_max;
250− iser_conn->qp_max_recv_dtos_mask = session->cmds_max - 1; /* cmds_max is 2^N */
251− iser_conn->min_posted_rx = iser_conn->qp_max_recv_dtos >> 2;
252247
253248 if (iser_alloc_fastreg_pool(ib_conn, session->scsi_cmds_max,
254249 iser_conn->pages_per_mr))
@@ -280,7 +275,6 @@ int iser_alloc_rx_descriptors(struct iser_conn *iser_conn, · 25 unmodified lines
280275 rx_sg->lkey = device->pd->local_dma_lkey;
281276 }
282277
283− iser_conn->rx_desc_head = 0;
284278 return 0;
285279
286280 rx_desc_dma_map_failed:
@@ -322,37 +316,35 @@ void iser_free_rx_descriptors(struct iser_conn *iser_conn) · 35 unmodified lines
322316 static int iser_post_rx_bufs(struct iscsi_conn *conn, struct iscsi_hdr *req)
323317 {
324318 struct iser_conn *iser_conn = conn->dd_data;
325− struct ib_conn *ib_conn = &iser_conn->ib_conn;
326319 struct iscsi_session *session = conn->session;
320+ int err = 0;
321+ int i;
327322
328323 iser_dbg("req op %x flags %x\n", req->opcode, req->flags);
329324 /* check if this is the last login - going to full feature phase */
330325 if ((req->flags & ISCSI_FULL_FEATURE_PHASE) != ISCSI_FULL_FEATURE_PHASE)
331− return 0;
332−
333− /*
334− * Check that there is one posted recv buffer
335− * (for the last login response).
336− */
337− WARN_ON(ib_conn->post_recv_buf_count != 1);
326+ goto out;
338327
339328 if (session->discovery_sess) {
340329 iser_info("Discovery session, re-using login RX buffer\n");
341− return 0;
342− } else
343− iser_info("Normal session, posting batch of RX %d buffers\n",
344− iser_conn->min_posted_rx);
345−
346− /* Initial post receive buffers */
347− if (iser_post_recvm(iser_conn, iser_conn->min_posted_rx))
348− return -ENOMEM;
330+ goto out;
331+ }
349332
350− return 0;
351−}
333+ iser_info("Normal session, posting batch of RX %d buffers\n",
334+ iser_conn->qp_max_recv_dtos - 1);
352335
353−static inline bool iser_signal_comp(u8 sig_count)
354−{
355− return ((sig_count % ISER_SIGNAL_CMD_COUNT) == 0);
336+ /*
337+ * Initial post receive buffers.
338+ * There is one already posted recv buffer (for the last login
339+ * response). Therefore, the first recv buffer is skipped here.
340+ */
341+ for (i = 1; i < iser_conn->qp_max_recv_dtos; i++) {
342+ err = iser_post_recvm(iser_conn, &iser_conn->rx_descs[i]);
343+ if (err)
344+ goto out;
345+ }
346+out:
347+ return err;
356348 }
357349
358350 /**
@@ -360,8 +352,7 @@ static inline bool iser_signal_comp(u8 sig_count) · 1 unmodified line
360352 * @conn: link to matching iscsi connection
361353 * @task: SCSI command task
362354 */
363−int iser_send_command(struct iscsi_conn *conn,
364− struct iscsi_task *task)
355+int iser_send_command(struct iscsi_conn *conn, struct iscsi_task *task)
365356 {
366357 struct iser_conn *iser_conn = conn->dd_data;
367358 struct iscsi_iser_task *iser_task = task->dd_data;
@@ -371,7 +362,6 @@ int iser_send_command(struct iscsi_conn *conn, · 3 unmodified lines
371362 struct iscsi_scsi_req *hdr = (struct iscsi_scsi_req *)task->hdr;
372363 struct scsi_cmnd *sc = task->sc;
373364 struct iser_tx_desc *tx_desc = &iser_task->desc;
374− u8 sig_count = ++iser_conn->ib_conn.sig_count;
375365
376366 edtl = ntohl(hdr->data_length);
377367
@@ -418,8 +408,7 @@ int iser_send_command(struct iscsi_conn *conn, · 40 unmodified lines
418408
419409 iser_task->status = ISER_TASK_STATUS_STARTED;
420410
421− err = iser_post_send(&iser_conn->ib_conn, tx_desc,
422− iser_signal_comp(sig_count));
411+ err = iser_post_send(&iser_conn->ib_conn, tx_desc);
423412 if (!err)
424413 return 0;
425414
@@ -434,8 +423,7 @@ send_command_error: · 8 unmodified lines
434423 * @task: SCSI command task
435424 * @hdr: pointer to the LLD's iSCSI message header
436425 */
437−int iser_send_data_out(struct iscsi_conn *conn,
438− struct iscsi_task *task,
426+int iser_send_data_out(struct iscsi_conn *conn, struct iscsi_task *task,
439427 struct iscsi_data *hdr)
440428 {
441429 struct iser_conn *iser_conn = conn->dd_data;
@@ -487,7 +475,7 @@ int iser_send_data_out(struct iscsi_conn *conn, · 45 unmodified lines
487475 itt, buf_offset, data_seg_len);
488476
489477
490− err = iser_post_send(&iser_conn->ib_conn, tx_desc, true);
478+ err = iser_post_send(&iser_conn->ib_conn, tx_desc);
491479 if (!err)
492480 return 0;
493481
@@ -497,8 +485,7 @@ send_data_out_error: · 3 unmodified lines
497485 return err;
498486 }
499487
500−int iser_send_control(struct iscsi_conn *conn,
501− struct iscsi_task *task)
488+int iser_send_control(struct iscsi_conn *conn, struct iscsi_task *task)
502489 {
503490 struct iser_conn *iser_conn = conn->dd_data;
504491 struct iscsi_iser_task *iser_task = task->dd_data;
@@ -550,7 +537,7 @@ int iser_send_control(struct iscsi_conn *conn, · 45 unmodified lines
550537 goto send_control_error;
551538 }
552539
553− err = iser_post_send(&iser_conn->ib_conn, mdesc, true);
540+ err = iser_post_send(&iser_conn->ib_conn, mdesc);
554541 if (!err)
555542 return 0;
556543
@@ -590,11 +577,14 @@ void iser_login_rsp(struct ib_cq *cq, struct ib_wc *wc) · 33 unmodified lines
590577 desc->rsp_dma, ISER_RX_LOGIN_SIZE,
591578 DMA_FROM_DEVICE);
592579
593− ib_conn->post_recv_buf_count--;
580+ if (iser_conn->iscsi_conn->session->discovery_sess)
581+ return;
582+
583+ /* Post the first RX buffer that is skipped in iser_post_rx_bufs() */
584+ iser_post_recvm(iser_conn, iser_conn->rx_descs);
594585 }
595586
596−static inline int
597−iser_inv_desc(struct iser_fr_desc *desc, u32 rkey)
587+static inline int iser_inv_desc(struct iser_fr_desc *desc, u32 rkey)
598588 {
599589 if (unlikely((!desc->sig_protected && rkey != desc->rsc.mr->rkey) ||
600590 (desc->sig_protected && rkey != desc->rsc.sig_mr->rkey))) {
@@ -607,10 +597,8 @@ iser_inv_desc(struct iser_fr_desc *desc, u32 rkey) · 6 unmodified lines
607597 return 0;
608598 }
609599
610−static int
611−iser_check_remote_inv(struct iser_conn *iser_conn,
612− struct ib_wc *wc,
613− struct iscsi_hdr *hdr)
600+static int iser_check_remote_inv(struct iser_conn *iser_conn, struct ib_wc *wc,
601+ struct iscsi_hdr *hdr)
614602 {
615603 if (wc->wc_flags & IB_WC_WITH_INVALIDATE) {
616604 struct iscsi_task *task;
@@ -657,8 +645,7 @@ void iser_task_rsp(struct ib_cq *cq, struct ib_wc *wc) · 40 unmodified lines
657645 struct iser_conn *iser_conn = to_iser_conn(ib_conn);
658646 struct iser_rx_desc *desc = iser_rx(wc->wr_cqe);
659647 struct iscsi_hdr *hdr;
660− int length;
661− int outstanding, count, err;
648+ int length, err;
662649
663650 if (unlikely(wc->status != IB_WC_SUCCESS)) {
664651 iser_err_comp(wc, "task_rsp");
@@ -687,20 +674,9 @@ void iser_task_rsp(struct ib_cq *cq, struct ib_wc *wc) · 22 unmodified lines
687674 desc->dma_addr, ISER_RX_PAYLOAD_SIZE,
688675 DMA_FROM_DEVICE);
689676
690− /* decrementing conn->post_recv_buf_count only --after-- freeing the *
691− * task eliminates the need to worry on tasks which are completed in *
692− * parallel to the execution of iser_conn_term. So the code that waits *
693− * for the posted rx bufs refcount to become zero handles everything */
694− ib_conn->post_recv_buf_count--;
695−
696− outstanding = ib_conn->post_recv_buf_count;
697− if (outstanding + iser_conn->min_posted_rx <= iser_conn->qp_max_recv_dtos) {
698− count = min(iser_conn->qp_max_recv_dtos - outstanding,
699− iser_conn->min_posted_rx);
700− err = iser_post_recvm(iser_conn, count);
701− if (err)
702− iser_err("posting %d rx bufs err %d\n", count, err);
703− }
677+ err = iser_post_recvm(iser_conn, desc);
678+ if (err)
679+ iser_err("posting rx buffer err %d\n", err);
704680 }
705681
706682 void iser_cmd_comp(struct ib_cq *cq, struct ib_wc *wc)
drivers/infiniband/ulp/iser/iser_memory.c+24−34
@@ -44,8 +44,7 @@ void iser_reg_comp(struct ib_cq *cq, struct ib_wc *wc) · 43 unmodified lines
4444 iser_err_comp(wc, "memreg");
4545 }
4646
47−static struct iser_fr_desc *
48−iser_reg_desc_get_fr(struct ib_conn *ib_conn)
47+static struct iser_fr_desc *iser_reg_desc_get_fr(struct ib_conn *ib_conn)
4948 {
5049 struct iser_fr_pool *fr_pool = &ib_conn->fr_pool;
5150 struct iser_fr_desc *desc;
@@ -60,9 +59,8 @@ iser_reg_desc_get_fr(struct ib_conn *ib_conn) · 8 unmodified lines
6059 return desc;
6160 }
6261
63−static void
64−iser_reg_desc_put_fr(struct ib_conn *ib_conn,
65− struct iser_fr_desc *desc)
62+static void iser_reg_desc_put_fr(struct ib_conn *ib_conn,
63+ struct iser_fr_desc *desc)
6664 {
6765 struct iser_fr_pool *fr_pool = &ib_conn->fr_pool;
6866 unsigned long flags;
@@ -73,9 +71,9 @@ iser_reg_desc_put_fr(struct ib_conn *ib_conn, · 4 unmodified lines
7371 }
7472
7573 int iser_dma_map_task_data(struct iscsi_iser_task *iser_task,
76− struct iser_data_buf *data,
77− enum iser_data_dir iser_dir,
78− enum dma_data_direction dma_dir)
74+ struct iser_data_buf *data,
75+ enum iser_data_dir iser_dir,
76+ enum dma_data_direction dma_dir)
7977 {
8078 struct ib_device *dev;
8179
@@ -100,9 +98,8 @@ void iser_dma_unmap_task_data(struct iscsi_iser_task *iser_task, · 18 unmodified lines
10098 ib_dma_unmap_sg(dev, data->sg, data->size, dir);
10199 }
102100
103−static int
104−iser_reg_dma(struct iser_device *device, struct iser_data_buf *mem,
105− struct iser_mem_reg *reg)
101+static int iser_reg_dma(struct iser_device *device, struct iser_data_buf *mem,
102+ struct iser_mem_reg *reg)
106103 {
107104 struct scatterlist *sg = mem->sg;
108105
@@ -154,8 +151,8 @@ void iser_unreg_mem_fastreg(struct iscsi_iser_task *iser_task, · 45 unmodified lines
154151 reg->mem_h = NULL;
155152 }
156153
157−static void
158−iser_set_dif_domain(struct scsi_cmnd *sc, struct ib_sig_domain *domain)
154+static void iser_set_dif_domain(struct scsi_cmnd *sc,
155+ struct ib_sig_domain *domain)
159156 {
160157 domain->sig_type = IB_SIG_TYPE_T10_DIF;
161158 domain->sig.dif.pi_interval = scsi_prot_interval(sc);
@@ -171,8 +168,8 @@ iser_set_dif_domain(struct scsi_cmnd *sc, struct ib_sig_domain *domain) · 9 unmodified lines
171168 domain->sig.dif.ref_remap = true;
172169 }
173170
174−static int
175−iser_set_sig_attrs(struct scsi_cmnd *sc, struct ib_sig_attrs *sig_attrs)
171+static int iser_set_sig_attrs(struct scsi_cmnd *sc,
172+ struct ib_sig_attrs *sig_attrs)
176173 {
177174 switch (scsi_get_prot_op(sc)) {
178175 case SCSI_PROT_WRITE_INSERT:
@@ -205,8 +202,7 @@ iser_set_sig_attrs(struct scsi_cmnd *sc, struct ib_sig_attrs *sig_attrs) · 26 unmodified lines
205202 return 0;
206203 }
207204
208−static inline void
209−iser_set_prot_checks(struct scsi_cmnd *sc, u8 *mask)
205+static inline void iser_set_prot_checks(struct scsi_cmnd *sc, u8 *mask)
210206 {
211207 *mask = 0;
212208 if (sc->prot_flags & SCSI_PROT_REF_CHECK)
@@ -215,11 +211,8 @@ iser_set_prot_checks(struct scsi_cmnd *sc, u8 *mask) · 2 unmodified lines
215211 *mask |= IB_SIG_CHECK_GUARD;
216212 }
217213
218−static inline void
219−iser_inv_rkey(struct ib_send_wr *inv_wr,
220− struct ib_mr *mr,
221− struct ib_cqe *cqe,
222− struct ib_send_wr *next_wr)
214+static inline void iser_inv_rkey(struct ib_send_wr *inv_wr, struct ib_mr *mr,
215+ struct ib_cqe *cqe, struct ib_send_wr *next_wr)
223216 {
224217 inv_wr->opcode = IB_WR_LOCAL_INV;
225218 inv_wr->wr_cqe = cqe;
@@ -229,12 +222,11 @@ iser_inv_rkey(struct ib_send_wr *inv_wr, · 3 unmodified lines
229222 inv_wr->next = next_wr;
230223 }
231224
232−static int
233−iser_reg_sig_mr(struct iscsi_iser_task *iser_task,
234− struct iser_data_buf *mem,
235− struct iser_data_buf *sig_mem,
236− struct iser_reg_resources *rsc,
237− struct iser_mem_reg *sig_reg)
225+static int iser_reg_sig_mr(struct iscsi_iser_task *iser_task,
226+ struct iser_data_buf *mem,
227+ struct iser_data_buf *sig_mem,
228+ struct iser_reg_resources *rsc,
229+ struct iser_mem_reg *sig_reg)
238230 {
239231 struct iser_tx_desc *tx_desc = &iser_task->desc;
240232 struct ib_cqe *cqe = &iser_task->iser_conn->ib_conn.reg_cqe;
@@ -335,12 +327,10 @@ static int iser_fast_reg_mr(struct iscsi_iser_task *iser_task, · 94 unmodified lines
335327 return 0;
336328 }
337329
338−static int
339−iser_reg_data_sg(struct iscsi_iser_task *task,
340− struct iser_data_buf *mem,
341− struct iser_fr_desc *desc,
342− bool use_dma_key,
343− struct iser_mem_reg *reg)
330+static int iser_reg_data_sg(struct iscsi_iser_task *task,
331+ struct iser_data_buf *mem,
332+ struct iser_fr_desc *desc, bool use_dma_key,
333+ struct iser_mem_reg *reg)
344334 {
345335 struct iser_device *device = task->iser_conn->ib_conn.device;
346336
drivers/infiniband/ulp/iser/iser_verbs.c+57−81
@@ -265,14 +265,14 @@ static int iser_create_ib_conn_res(struct ib_conn *ib_conn) · 264 unmodified lines
265265 memset(&init_attr, 0, sizeof(init_attr));
266266
267267 init_attr.event_handler = iser_qp_event_callback;
268− init_attr.qp_context = (void *)ib_conn;
269− init_attr.send_cq = ib_conn->cq;
270− init_attr.recv_cq = ib_conn->cq;
271− init_attr.cap.max_recv_wr = ISER_QP_MAX_RECV_DTOS;
268+ init_attr.qp_context = (void *)ib_conn;
269+ init_attr.send_cq = ib_conn->cq;
270+ init_attr.recv_cq = ib_conn->cq;
271+ init_attr.cap.max_recv_wr = ISER_QP_MAX_RECV_DTOS;
272272 init_attr.cap.max_send_sge = 2;
273273 init_attr.cap.max_recv_sge = 1;
274− init_attr.sq_sig_type = IB_SIGNAL_REQ_WR;
275− init_attr.qp_type = IB_QPT_RC;
274+ init_attr.sq_sig_type = IB_SIGNAL_REQ_WR;
275+ init_attr.qp_type = IB_QPT_RC;
276276 init_attr.cap.max_send_wr = max_send_wr;
277277 if (ib_conn->pi_support)
278278 init_attr.create_flags |= IB_QP_CREATE_INTEGRITY_EN;
@@ -283,9 +283,8 @@ static int iser_create_ib_conn_res(struct ib_conn *ib_conn) · 4 unmodified lines
283283 goto out_err;
284284
285285 ib_conn->qp = ib_conn->cma_id->qp;
286− iser_info("setting conn %p cma_id %p qp %p max_send_wr %d\n",
287− ib_conn, ib_conn->cma_id,
288− ib_conn->cma_id->qp, max_send_wr);
286+ iser_info("setting conn %p cma_id %p qp %p max_send_wr %d\n", ib_conn,
287+ ib_conn->cma_id, ib_conn->cma_id->qp, max_send_wr);
289288 return ret;
290289
291290 out_err:
@@ -313,7 +312,7 @@ struct iser_device *iser_device_find_by_ib_device(struct rdma_cm_id *cma_id) · 21 unmodified lines
313312 goto inc_refcnt;
314313
315314 device = kzalloc(sizeof *device, GFP_KERNEL);
316− if (device == NULL)
315+ if (!device)
317316 goto out;
318317
319318 /* assign this device to the device */
@@ -392,8 +391,7 @@ void iser_release_work(struct work_struct *work) · 72 unmodified lines
392391 * so the cm_id removal is out of here. It is Safe to
393392 * be invoked multiple times.
394393 */
395−static void iser_free_ib_conn_res(struct iser_conn *iser_conn,
396− bool destroy)
394+static void iser_free_ib_conn_res(struct iser_conn *iser_conn, bool destroy)
397395 {
398396 struct ib_conn *ib_conn = &iser_conn->ib_conn;
399397 struct iser_device *device = ib_conn->device;
@@ -401,7 +399,7 @@ static void iser_free_ib_conn_res(struct iser_conn *iser_conn, · 1 unmodified line
401399 iser_info("freeing conn %p cma_id %p qp %p\n",
402400 iser_conn, ib_conn->cma_id, ib_conn->qp);
403401
404− if (ib_conn->qp != NULL) {
402+ if (ib_conn->qp) {
405403 rdma_destroy_qp(ib_conn->cma_id);
406404 ib_cq_pool_put(ib_conn->cq, ib_conn->cq_size);
407405 ib_conn->qp = NULL;
@@ -411,7 +409,7 @@ static void iser_free_ib_conn_res(struct iser_conn *iser_conn, · 3 unmodified lines
411409 if (iser_conn->rx_descs)
412410 iser_free_rx_descriptors(iser_conn);
413411
414− if (device != NULL) {
412+ if (device) {
415413 iser_device_try_release(device);
416414 ib_conn->device = NULL;
417415 }
@@ -445,7 +443,7 @@ void iser_conn_release(struct iser_conn *iser_conn) · 27 unmodified lines
445443 iser_free_ib_conn_res(iser_conn, true);
446444 mutex_unlock(&iser_conn->state_mutex);
447445
448− if (ib_conn->cma_id != NULL) {
446+ if (ib_conn->cma_id) {
449447 rdma_destroy_id(ib_conn->cma_id);
450448 ib_conn->cma_id = NULL;
451449 }
@@ -501,13 +499,12 @@ static void iser_connect_error(struct rdma_cm_id *cma_id) · 49 unmodified lines
501499 {
502500 struct iser_conn *iser_conn;
503501
504− iser_conn = (struct iser_conn *)cma_id->context;
502+ iser_conn = cma_id->context;
505503 iser_conn->state = ISER_CONN_TERMINATING;
506504 }
507505
508−static void
509−iser_calc_scsi_params(struct iser_conn *iser_conn,
510− unsigned int max_sectors)
506+static void iser_calc_scsi_params(struct iser_conn *iser_conn,
507+ unsigned int max_sectors)
511508 {
512509 struct iser_device *device = iser_conn->ib_conn.device;
513510 struct ib_device_attr *attr = &device->ib_device->attrs;
@@ -545,11 +542,11 @@ iser_calc_scsi_params(struct iser_conn *iser_conn, · 31 unmodified lines
545542 static void iser_addr_handler(struct rdma_cm_id *cma_id)
546543 {
547544 struct iser_device *device;
548− struct iser_conn *iser_conn;
549− struct ib_conn *ib_conn;
545+ struct iser_conn *iser_conn;
546+ struct ib_conn *ib_conn;
550547 int ret;
551548
552− iser_conn = (struct iser_conn *)cma_id->context;
549+ iser_conn = cma_id->context;
553550 if (iser_conn->state != ISER_CONN_PENDING)
554551 /* bailout */
555552 return;
@@ -593,9 +590,9 @@ static void iser_addr_handler(struct rdma_cm_id *cma_id) · 37 unmodified lines
593590 static void iser_route_handler(struct rdma_cm_id *cma_id)
594591 {
595592 struct rdma_conn_param conn_param;
596− int ret;
593+ int ret;
597594 struct iser_cm_hdr req_hdr;
598− struct iser_conn *iser_conn = (struct iser_conn *)cma_id->context;
595+ struct iser_conn *iser_conn = cma_id->context;
599596 struct ib_conn *ib_conn = &iser_conn->ib_conn;
600597 struct ib_device *ib_dev = ib_conn->device->ib_device;
601598
@@ -609,9 +606,9 @@ static void iser_route_handler(struct rdma_cm_id *cma_id) · 7 unmodified lines
609606
610607 memset(&conn_param, 0, sizeof conn_param);
611608 conn_param.responder_resources = ib_dev->attrs.max_qp_rd_atom;
612− conn_param.initiator_depth = 1;
613− conn_param.retry_count = 7;
614− conn_param.rnr_retry_count = 6;
609+ conn_param.initiator_depth = 1;
610+ conn_param.retry_count = 7;
611+ conn_param.rnr_retry_count = 6;
615612
616613 memset(&req_hdr, 0, sizeof(req_hdr));
617614 req_hdr.flags = ISER_ZBVA_NOT_SUP;
@@ -638,7 +635,7 @@ static void iser_connected_handler(struct rdma_cm_id *cma_id, · 20 unmodified lines
638635 struct ib_qp_attr attr;
639636 struct ib_qp_init_attr init_attr;
640637
641− iser_conn = (struct iser_conn *)cma_id->context;
638+ iser_conn = cma_id->context;
642639 if (iser_conn->state != ISER_CONN_PENDING)
643640 /* bailout */
644641 return;
@@ -661,7 +658,7 @@ static void iser_connected_handler(struct rdma_cm_id *cma_id, · 16 unmodified lines
661658
662659 static void iser_disconnected_handler(struct rdma_cm_id *cma_id)
663660 {
664− struct iser_conn *iser_conn = (struct iser_conn *)cma_id->context;
661+ struct iser_conn *iser_conn = cma_id->context;
665662
666663 if (iser_conn_terminate(iser_conn)) {
667664 if (iser_conn->iscsi_conn)
@@ -675,7 +672,7 @@ static void iser_disconnected_handler(struct rdma_cm_id *cma_id) · 7 unmodified lines
675672 static void iser_cleanup_handler(struct rdma_cm_id *cma_id,
676673 bool destroy)
677674 {
678− struct iser_conn *iser_conn = (struct iser_conn *)cma_id->context;
675+ struct iser_conn *iser_conn = cma_id->context;
679676
680677 /*
681678 * We are not guaranteed that we visited disconnected_handler
@@ -687,12 +684,13 @@ static void iser_cleanup_handler(struct rdma_cm_id *cma_id, · 5 unmodified lines
687684 complete(&iser_conn->ib_completion);
688685 }
689686
690−static int iser_cma_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *event)
687+static int iser_cma_handler(struct rdma_cm_id *cma_id,
688+ struct rdma_cm_event *event)
691689 {
692690 struct iser_conn *iser_conn;
693691 int ret = 0;
694692
695− iser_conn = (struct iser_conn *)cma_id->context;
693+ iser_conn = cma_id->context;
696694 iser_info("%s (%d): status %d conn %p id %p\n",
697695 rdma_event_msg(event->event), event->event,
698696 event->status, cma_id->context, cma_id);
@@ -757,7 +755,6 @@ void iser_conn_init(struct iser_conn *iser_conn) · 58 unmodified lines
757755 INIT_LIST_HEAD(&iser_conn->conn_list);
758756 mutex_init(&iser_conn->state_mutex);
759757
760− ib_conn->post_recv_buf_count = 0;
761758 ib_conn->reg_cqe.done = iser_reg_comp;
762759 }
763760
@@ -765,10 +762,8 @@ void iser_conn_init(struct iser_conn *iser_conn) · 1 unmodified line
765762 * starts the process of connecting to the target
766763 * sleeps until the connection is established or rejected
767764 */
768−int iser_connect(struct iser_conn *iser_conn,
769− struct sockaddr *src_addr,
770− struct sockaddr *dst_addr,
771− int non_blocking)
765+int iser_connect(struct iser_conn *iser_conn, struct sockaddr *src_addr,
766+ struct sockaddr *dst_addr, int non_blocking)
772767 {
773768 struct ib_conn *ib_conn = &iser_conn->ib_conn;
774769 int err = 0;
@@ -785,8 +780,7 @@ int iser_connect(struct iser_conn *iser_conn, · 10 unmodified lines
785780 iser_conn->state = ISER_CONN_PENDING;
786781
787782 ib_conn->cma_id = rdma_create_id(&init_net, iser_cma_handler,
788− (void *)iser_conn,
789− RDMA_PS_TCP, IB_QPT_RC);
783+ iser_conn, RDMA_PS_TCP, IB_QPT_RC);
790784 if (IS_ERR(ib_conn->cma_id)) {
791785 err = PTR_ERR(ib_conn->cma_id);
792786 iser_err("rdma_create_id failed: %d\n", err);
@@ -829,7 +823,7 @@ int iser_post_recvl(struct iser_conn *iser_conn) · 36 unmodified lines
829823 struct ib_conn *ib_conn = &iser_conn->ib_conn;
830824 struct iser_login_desc *desc = &iser_conn->login_desc;
831825 struct ib_recv_wr wr;
832− int ib_ret;
826+ int ret;
833827
834828 desc->sge.addr = desc->rsp_dma;
835829 desc->sge.length = ISER_RX_LOGIN_SIZE;
@@ -841,46 +835,30 @@ int iser_post_recvl(struct iser_conn *iser_conn) · 5 unmodified lines
841835 wr.num_sge = 1;
842836 wr.next = NULL;
843837
844− ib_conn->post_recv_buf_count++;
845− ib_ret = ib_post_recv(ib_conn->qp, &wr, NULL);
846− if (ib_ret) {
847− iser_err("ib_post_recv failed ret=%d\n", ib_ret);
848− ib_conn->post_recv_buf_count--;
849− }
838+ ret = ib_post_recv(ib_conn->qp, &wr, NULL);
839+ if (unlikely(ret))
840+ iser_err("ib_post_recv login failed ret=%d\n", ret);
850841
851− return ib_ret;
842+ return ret;
852843 }
853844
854−int iser_post_recvm(struct iser_conn *iser_conn, int count)
845+int iser_post_recvm(struct iser_conn *iser_conn, struct iser_rx_desc *rx_desc)
855846 {
856847 struct ib_conn *ib_conn = &iser_conn->ib_conn;
857− unsigned int my_rx_head = iser_conn->rx_desc_head;
858− struct iser_rx_desc *rx_desc;
859− struct ib_recv_wr *wr;
860− int i, ib_ret;
861−
862− for (wr = ib_conn->rx_wr, i = 0; i < count; i++, wr++) {
863− rx_desc = &iser_conn->rx_descs[my_rx_head];
864− rx_desc->cqe.done = iser_task_rsp;
865− wr->wr_cqe = &rx_desc->cqe;
866− wr->sg_list = &rx_desc->rx_sg;
867− wr->num_sge = 1;
868− wr->next = wr + 1;
869− my_rx_head = (my_rx_head + 1) & iser_conn->qp_max_recv_dtos_mask;
870− }
848+ struct ib_recv_wr wr;
849+ int ret;
871850
872− wr--;
873− wr->next = NULL; /* mark end of work requests list */
851+ rx_desc->cqe.done = iser_task_rsp;
852+ wr.wr_cqe = &rx_desc->cqe;
853+ wr.sg_list = &rx_desc->rx_sg;
854+ wr.num_sge = 1;
855+ wr.next = NULL;
874856
875− ib_conn->post_recv_buf_count += count;
876− ib_ret = ib_post_recv(ib_conn->qp, ib_conn->rx_wr, NULL);
877− if (unlikely(ib_ret)) {
878− iser_err("ib_post_recv failed ret=%d\n", ib_ret);
879− ib_conn->post_recv_buf_count -= count;
880− } else
881− iser_conn->rx_desc_head = my_rx_head;
857+ ret = ib_post_recv(ib_conn->qp, &wr, NULL);
858+ if (unlikely(ret))
859+ iser_err("ib_post_recv failed ret=%d\n", ret);
882860
883− return ib_ret;
861+ return ret;
884862 }
885863
886864
@@ -888,16 +866,14 @@ int iser_post_recvm(struct iser_conn *iser_conn, int count) · 1 unmodified line
888866 * iser_post_send - Initiate a Send DTO operation
889867 * @ib_conn: connection RDMA resources
890868 * @tx_desc: iSER TX descriptor
891− * @signal: true to send work request as SIGNALED
892869 *
893870 * Return: 0 on success, -1 on failure
894871 */
895−int iser_post_send(struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc,
896− bool signal)
872+int iser_post_send(struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc)
897873 {
898874 struct ib_send_wr *wr = &tx_desc->send_wr;
899875 struct ib_send_wr *first_wr;
900− int ib_ret;
876+ int ret;
901877
902878 ib_dma_sync_single_for_device(ib_conn->device->ib_device,
903879 tx_desc->dma_addr, ISER_HEADERS_LEN,
@@ -908,7 +884,7 @@ int iser_post_send(struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc, · 4 unmodified lines
908884 wr->sg_list = tx_desc->tx_sg;
909885 wr->num_sge = tx_desc->num_sge;
910886 wr->opcode = IB_WR_SEND;
911− wr->send_flags = signal ? IB_SEND_SIGNALED : 0;
887+ wr->send_flags = IB_SEND_SIGNALED;
912888
913889 if (tx_desc->inv_wr.next)
914890 first_wr = &tx_desc->inv_wr;
@@ -917,12 +893,12 @@ int iser_post_send(struct ib_conn *ib_conn, struct iser_tx_desc *tx_desc, · 2 unmodified lines
917893 else
918894 first_wr = wr;
919895
920− ib_ret = ib_post_send(ib_conn->qp, first_wr, NULL);
921− if (unlikely(ib_ret))
896+ ret = ib_post_send(ib_conn->qp, first_wr, NULL);
897+ if (unlikely(ret))
922898 iser_err("ib_post_send failed, ret:%d opcode:%d\n",
923− ib_ret, wr->opcode);
899+ ret, wr->opcode);
924900
925− return ib_ret;
901+ return ret;
926902 }
927903
928904 u8 iser_check_task_pi_status(struct iscsi_iser_task *iser_task,
drivers/infiniband/ulp/rtrs/rtrs-clt-stats.c+4−4
@@ -13,8 +13,8 @@ · 12 unmodified lines
1313
1414 void rtrs_clt_update_wc_stats(struct rtrs_clt_con *con)
1515 {
16− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
17− struct rtrs_clt_stats *stats = sess->stats;
16+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
17+ struct rtrs_clt_stats *stats = clt_path->stats;
1818 struct rtrs_clt_stats_pcpu *s;
1919 int cpu;
2020
@@ -180,8 +180,8 @@ static inline void rtrs_clt_update_rdma_stats(struct rtrs_clt_stats *stats, · 159 unmodified lines
180180 void rtrs_clt_update_all_stats(struct rtrs_clt_io_req *req, int dir)
181181 {
182182 struct rtrs_clt_con *con = req->con;
183− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
184− struct rtrs_clt_stats *stats = sess->stats;
183+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
184+ struct rtrs_clt_stats *stats = clt_path->stats;
185185 unsigned int len;
186186
187187 len = req->usr_len + req->data_len;
drivers/infiniband/ulp/rtrs/rtrs-clt-sysfs.c+74−71
@@ -16,21 +16,21 @@ · 15 unmodified lines
1616 #define MIN_MAX_RECONN_ATT -1
1717 #define MAX_MAX_RECONN_ATT 9999
1818
19−static void rtrs_clt_sess_release(struct kobject *kobj)
19+static void rtrs_clt_path_release(struct kobject *kobj)
2020 {
21− struct rtrs_clt_sess *sess;
21+ struct rtrs_clt_path *clt_path;
2222
23− sess = container_of(kobj, struct rtrs_clt_sess, kobj);
23+ clt_path = container_of(kobj, struct rtrs_clt_path, kobj);
2424
25− free_sess(sess);
25+ free_path(clt_path);
2626 }
2727
2828 static struct kobj_type ktype_sess = {
2929 .sysfs_ops = &kobj_sysfs_ops,
30− .release = rtrs_clt_sess_release
30+ .release = rtrs_clt_path_release
3131 };
3232
33−static void rtrs_clt_sess_stats_release(struct kobject *kobj)
33+static void rtrs_clt_path_stats_release(struct kobject *kobj)
3434 {
3535 struct rtrs_clt_stats *stats;
3636
@@ -43,14 +43,15 @@ static void rtrs_clt_sess_stats_release(struct kobject *kobj) · 6 unmodified lines
4343
4444 static struct kobj_type ktype_stats = {
4545 .sysfs_ops = &kobj_sysfs_ops,
46− .release = rtrs_clt_sess_stats_release,
46+ .release = rtrs_clt_path_stats_release,
4747 };
4848
4949 static ssize_t max_reconnect_attempts_show(struct device *dev,
5050 struct device_attribute *attr,
5151 char *page)
5252 {
53− struct rtrs_clt *clt = container_of(dev, struct rtrs_clt, dev);
53+ struct rtrs_clt_sess *clt = container_of(dev, struct rtrs_clt_sess,
54+ dev);
5455
5556 return sysfs_emit(page, "%d\n",
5657 rtrs_clt_get_max_reconnect_attempts(clt));
@@ -63,7 +64,8 @@ static ssize_t max_reconnect_attempts_store(struct device *dev, · 6 unmodified lines
6364 {
6465 int value;
6566 int ret;
66− struct rtrs_clt *clt = container_of(dev, struct rtrs_clt, dev);
67+ struct rtrs_clt_sess *clt = container_of(dev, struct rtrs_clt_sess,
68+ dev);
6769
6870 ret = kstrtoint(buf, 10, &value);
6971 if (ret) {
@@ -90,9 +92,9 @@ static ssize_t mpath_policy_show(struct device *dev, · 20 unmodified lines
9092 struct device_attribute *attr,
9193 char *page)
9294 {
93− struct rtrs_clt *clt;
95+ struct rtrs_clt_sess *clt;
9496
95− clt = container_of(dev, struct rtrs_clt, dev);
97+ clt = container_of(dev, struct rtrs_clt_sess, dev);
9698
9799 switch (clt->mp_policy) {
98100 case MP_POLICY_RR:
@@ -114,12 +116,12 @@ static ssize_t mpath_policy_store(struct device *dev, · 15 unmodified lines
114116 const char *buf,
115117 size_t count)
116118 {
117− struct rtrs_clt *clt;
119+ struct rtrs_clt_sess *clt;
118120 int value;
119121 int ret;
120122 size_t len = 0;
121123
122− clt = container_of(dev, struct rtrs_clt, dev);
124+ clt = container_of(dev, struct rtrs_clt_sess, dev);
123125
124126 ret = kstrtoint(buf, 10, &value);
125127 if (!ret && (value == MP_POLICY_RR ||
@@ -169,12 +171,12 @@ static ssize_t add_path_store(struct device *dev, · 43 unmodified lines
169171 .src = &srcaddr,
170172 .dst = &dstaddr
171173 };
172− struct rtrs_clt *clt;
174+ struct rtrs_clt_sess *clt;
173175 const char *nl;
174176 size_t len;
175177 int err;
176178
177− clt = container_of(dev, struct rtrs_clt, dev);
179+ clt = container_of(dev, struct rtrs_clt_sess, dev);
178180
179181 nl = strchr(buf, '\n');
180182 if (nl)
@@ -197,10 +199,10 @@ static DEVICE_ATTR_RW(add_path); · 16 unmodified lines
197199 static ssize_t rtrs_clt_state_show(struct kobject *kobj,
198200 struct kobj_attribute *attr, char *page)
199201 {
200− struct rtrs_clt_sess *sess;
202+ struct rtrs_clt_path *clt_path;
201203
202− sess = container_of(kobj, struct rtrs_clt_sess, kobj);
203− if (sess->state == RTRS_CLT_CONNECTED)
204+ clt_path = container_of(kobj, struct rtrs_clt_path, kobj);
205+ if (clt_path->state == RTRS_CLT_CONNECTED)
204206 return sysfs_emit(page, "connected\n");
205207
206208 return sysfs_emit(page, "disconnected\n");
@@ -219,16 +221,16 @@ static ssize_t rtrs_clt_reconnect_store(struct kobject *kobj, · 12 unmodified lines
219221 struct kobj_attribute *attr,
220222 const char *buf, size_t count)
221223 {
222− struct rtrs_clt_sess *sess;
224+ struct rtrs_clt_path *clt_path;
223225 int ret;
224226
225− sess = container_of(kobj, struct rtrs_clt_sess, kobj);
227+ clt_path = container_of(kobj, struct rtrs_clt_path, kobj);
226228 if (!sysfs_streq(buf, "1")) {
227− rtrs_err(sess->clt, "%s: unknown value: '%s'\n",
229+ rtrs_err(clt_path->clt, "%s: unknown value: '%s'\n",
228230 attr->attr.name, buf);
229231 return -EINVAL;
230232 }
231− ret = rtrs_clt_reconnect_from_sysfs(sess);
233+ ret = rtrs_clt_reconnect_from_sysfs(clt_path);
232234 if (ret)
233235 return ret;
234236
@@ -249,15 +251,15 @@ static ssize_t rtrs_clt_disconnect_store(struct kobject *kobj, · 14 unmodified lines
249251 struct kobj_attribute *attr,
250252 const char *buf, size_t count)
251253 {
252− struct rtrs_clt_sess *sess;
254+ struct rtrs_clt_path *clt_path;
253255
254− sess = container_of(kobj, struct rtrs_clt_sess, kobj);
256+ clt_path = container_of(kobj, struct rtrs_clt_path, kobj);
255257 if (!sysfs_streq(buf, "1")) {
256− rtrs_err(sess->clt, "%s: unknown value: '%s'\n",
258+ rtrs_err(clt_path->clt, "%s: unknown value: '%s'\n",
257259 attr->attr.name, buf);
258260 return -EINVAL;
259261 }
260− rtrs_clt_close_conns(sess, true);
262+ rtrs_clt_close_conns(clt_path, true);
261263
262264 return count;
263265 }
@@ -276,16 +278,16 @@ static ssize_t rtrs_clt_remove_path_store(struct kobject *kobj, · 12 unmodified lines
276278 struct kobj_attribute *attr,
277279 const char *buf, size_t count)
278280 {
279− struct rtrs_clt_sess *sess;
281+ struct rtrs_clt_path *clt_path;
280282 int ret;
281283
282− sess = container_of(kobj, struct rtrs_clt_sess, kobj);
284+ clt_path = container_of(kobj, struct rtrs_clt_path, kobj);
283285 if (!sysfs_streq(buf, "1")) {
284− rtrs_err(sess->clt, "%s: unknown value: '%s'\n",
286+ rtrs_err(clt_path->clt, "%s: unknown value: '%s'\n",
285287 attr->attr.name, buf);
286288 return -EINVAL;
287289 }
288− ret = rtrs_clt_remove_path_from_sysfs(sess, &attr->attr);
290+ ret = rtrs_clt_remove_path_from_sysfs(clt_path, &attr->attr);
289291 if (ret)
290292 return ret;
291293
@@ -333,11 +335,11 @@ static ssize_t rtrs_clt_hca_port_show(struct kobject *kobj, · 41 unmodified lines
333335 struct kobj_attribute *attr,
334336 char *page)
335337 {
336− struct rtrs_clt_sess *sess;
338+ struct rtrs_clt_path *clt_path;
337339
338− sess = container_of(kobj, typeof(*sess), kobj);
340+ clt_path = container_of(kobj, typeof(*clt_path), kobj);
339341
340− return sysfs_emit(page, "%u\n", sess->hca_port);
342+ return sysfs_emit(page, "%u\n", clt_path->hca_port);
341343 }
342344
343345 static struct kobj_attribute rtrs_clt_hca_port_attr =
@@ -347,11 +349,11 @@ static ssize_t rtrs_clt_hca_name_show(struct kobject *kobj, · 3 unmodified lines
347349 struct kobj_attribute *attr,
348350 char *page)
349351 {
350− struct rtrs_clt_sess *sess;
352+ struct rtrs_clt_path *clt_path;
351353
352− sess = container_of(kobj, struct rtrs_clt_sess, kobj);
354+ clt_path = container_of(kobj, struct rtrs_clt_path, kobj);
353355
354− return sysfs_emit(page, "%s\n", sess->hca_name);
356+ return sysfs_emit(page, "%s\n", clt_path->hca_name);
355357 }
356358
357359 static struct kobj_attribute rtrs_clt_hca_name_attr =
@@ -361,12 +363,12 @@ static ssize_t rtrs_clt_cur_latency_show(struct kobject *kobj, · 3 unmodified lines
361363 struct kobj_attribute *attr,
362364 char *page)
363365 {
364− struct rtrs_clt_sess *sess;
366+ struct rtrs_clt_path *clt_path;
365367
366− sess = container_of(kobj, struct rtrs_clt_sess, kobj);
368+ clt_path = container_of(kobj, struct rtrs_clt_path, kobj);
367369
368370 return sysfs_emit(page, "%lld ns\n",
369− ktime_to_ns(sess->s.hb_cur_latency));
371+ ktime_to_ns(clt_path->s.hb_cur_latency));
370372 }
371373
372374 static struct kobj_attribute rtrs_clt_cur_latency_attr =
@@ -376,11 +378,11 @@ static ssize_t rtrs_clt_src_addr_show(struct kobject *kobj, · 3 unmodified lines
376378 struct kobj_attribute *attr,
377379 char *page)
378380 {
379− struct rtrs_clt_sess *sess;
381+ struct rtrs_clt_path *clt_path;
380382 int len;
381383
382− sess = container_of(kobj, struct rtrs_clt_sess, kobj);
383− len = sockaddr_to_str((struct sockaddr *)&sess->s.src_addr, page,
384+ clt_path = container_of(kobj, struct rtrs_clt_path, kobj);
385+ len = sockaddr_to_str((struct sockaddr *)&clt_path->s.src_addr, page,
384386 PAGE_SIZE);
385387 len += sysfs_emit_at(page, len, "\n");
386388 return len;
@@ -393,11 +395,11 @@ static ssize_t rtrs_clt_dst_addr_show(struct kobject *kobj, · 6 unmodified lines
393395 struct kobj_attribute *attr,
394396 char *page)
395397 {
396− struct rtrs_clt_sess *sess;
398+ struct rtrs_clt_path *clt_path;
397399 int len;
398400
399− sess = container_of(kobj, struct rtrs_clt_sess, kobj);
400− len = sockaddr_to_str((struct sockaddr *)&sess->s.dst_addr, page,
401+ clt_path = container_of(kobj, struct rtrs_clt_path, kobj);
402+ len = sockaddr_to_str((struct sockaddr *)&clt_path->s.dst_addr, page,
401403 PAGE_SIZE);
402404 len += sysfs_emit_at(page, len, "\n");
403405 return len;
@@ -406,7 +408,7 @@ static ssize_t rtrs_clt_dst_addr_show(struct kobject *kobj, · 2 unmodified lines
406408 static struct kobj_attribute rtrs_clt_dst_addr_attr =
407409 __ATTR(dst_addr, 0444, rtrs_clt_dst_addr_show, NULL);
408410
409−static struct attribute *rtrs_clt_sess_attrs[] = {
411+static struct attribute *rtrs_clt_path_attrs[] = {
410412 &rtrs_clt_hca_name_attr.attr,
411413 &rtrs_clt_hca_port_attr.attr,
412414 &rtrs_clt_src_addr_attr.attr,
@@ -419,42 +421,43 @@ static struct attribute *rtrs_clt_sess_attrs[] = { · 6 unmodified lines
419421 NULL,
420422 };
421423
422−static const struct attribute_group rtrs_clt_sess_attr_group = {
423− .attrs = rtrs_clt_sess_attrs,
424+static const struct attribute_group rtrs_clt_path_attr_group = {
425+ .attrs = rtrs_clt_path_attrs,
424426 };
425427
426−int rtrs_clt_create_sess_files(struct rtrs_clt_sess *sess)
428+int rtrs_clt_create_path_files(struct rtrs_clt_path *clt_path)
427429 {
428− struct rtrs_clt *clt = sess->clt;
430+ struct rtrs_clt_sess *clt = clt_path->clt;
429431 char str[NAME_MAX];
430432 int err;
431433 struct rtrs_addr path = {
432− .src = &sess->s.src_addr,
433− .dst = &sess->s.dst_addr,
434+ .src = &clt_path->s.src_addr,
435+ .dst = &clt_path->s.dst_addr,
434436 };
435437
436438 rtrs_addr_to_str(&path, str, sizeof(str));
437− err = kobject_init_and_add(&sess->kobj, &ktype_sess, clt->kobj_paths,
439+ err = kobject_init_and_add(&clt_path->kobj, &ktype_sess,
440+ clt->kobj_paths,
438441 "%s", str);
439442 if (err) {
440443 pr_err("kobject_init_and_add: %d\n", err);
441− kobject_put(&sess->kobj);
444+ kobject_put(&clt_path->kobj);
442445 return err;
443446 }
444− err = sysfs_create_group(&sess->kobj, &rtrs_clt_sess_attr_group);
447+ err = sysfs_create_group(&clt_path->kobj, &rtrs_clt_path_attr_group);
445448 if (err) {
446449 pr_err("sysfs_create_group(): %d\n", err);
447450 goto put_kobj;
448451 }
449− err = kobject_init_and_add(&sess->stats->kobj_stats, &ktype_stats,
450− &sess->kobj, "stats");
452+ err = kobject_init_and_add(&clt_path->stats->kobj_stats, &ktype_stats,
453+ &clt_path->kobj, "stats");
451454 if (err) {
452455 pr_err("kobject_init_and_add: %d\n", err);
453− kobject_put(&sess->stats->kobj_stats);
456+ kobject_put(&clt_path->stats->kobj_stats);
454457 goto remove_group;
455458 }
456459
457− err = sysfs_create_group(&sess->stats->kobj_stats,
460+ err = sysfs_create_group(&clt_path->stats->kobj_stats,
458461 &rtrs_clt_stats_attr_group);
459462 if (err) {
460463 pr_err("failed to create stats sysfs group, err: %d\n", err);
@@ -464,25 +467,25 @@ int rtrs_clt_create_sess_files(struct rtrs_clt_sess *sess) · 3 unmodified lines
464467 return 0;
465468
466469 put_kobj_stats:
467− kobject_del(&sess->stats->kobj_stats);
468− kobject_put(&sess->stats->kobj_stats);
470+ kobject_del(&clt_path->stats->kobj_stats);
471+ kobject_put(&clt_path->stats->kobj_stats);
469472 remove_group:
470− sysfs_remove_group(&sess->kobj, &rtrs_clt_sess_attr_group);
473+ sysfs_remove_group(&clt_path->kobj, &rtrs_clt_path_attr_group);
471474 put_kobj:
472− kobject_del(&sess->kobj);
473− kobject_put(&sess->kobj);
475+ kobject_del(&clt_path->kobj);
476+ kobject_put(&clt_path->kobj);
474477
475478 return err;
476479 }
477480
478−void rtrs_clt_destroy_sess_files(struct rtrs_clt_sess *sess,
481+void rtrs_clt_destroy_path_files(struct rtrs_clt_path *clt_path,
479482 const struct attribute *sysfs_self)
480483 {
481− kobject_del(&sess->stats->kobj_stats);
482− kobject_put(&sess->stats->kobj_stats);
484+ kobject_del(&clt_path->stats->kobj_stats);
485+ kobject_put(&clt_path->stats->kobj_stats);
483486 if (sysfs_self)
484− sysfs_remove_file_self(&sess->kobj, sysfs_self);
485− kobject_del(&sess->kobj);
487+ sysfs_remove_file_self(&clt_path->kobj, sysfs_self);
488+ kobject_del(&clt_path->kobj);
486489 }
487490
488491 static struct attribute *rtrs_clt_attrs[] = {
@@ -496,12 +499,12 @@ static const struct attribute_group rtrs_clt_attr_group = { · 7 unmodified lines
496499 .attrs = rtrs_clt_attrs,
497500 };
498501
499−int rtrs_clt_create_sysfs_root_files(struct rtrs_clt *clt)
502+int rtrs_clt_create_sysfs_root_files(struct rtrs_clt_sess *clt)
500503 {
501504 return sysfs_create_group(&clt->dev.kobj, &rtrs_clt_attr_group);
502505 }
503506
504−void rtrs_clt_destroy_sysfs_root(struct rtrs_clt *clt)
507+void rtrs_clt_destroy_sysfs_root(struct rtrs_clt_sess *clt)
505508 {
506509 sysfs_remove_group(&clt->dev.kobj, &rtrs_clt_attr_group);
507510
drivers/infiniband/ulp/rtrs/rtrs-clt.c+554−535
@@ -46,21 +46,21 @@ static struct rtrs_rdma_dev_pd dev_pd = { · 45 unmodified lines
4646 static struct workqueue_struct *rtrs_wq;
4747 static struct class *rtrs_clt_dev_class;
4848
49−static inline bool rtrs_clt_is_connected(const struct rtrs_clt *clt)
49+static inline bool rtrs_clt_is_connected(const struct rtrs_clt_sess *clt)
5050 {
51− struct rtrs_clt_sess *sess;
51+ struct rtrs_clt_path *clt_path;
5252 bool connected = false;
5353
5454 rcu_read_lock();
55− list_for_each_entry_rcu(sess, &clt->paths_list, s.entry)
56− connected |= READ_ONCE(sess->state) == RTRS_CLT_CONNECTED;
55+ list_for_each_entry_rcu(clt_path, &clt->paths_list, s.entry)
56+ connected |= READ_ONCE(clt_path->state) == RTRS_CLT_CONNECTED;
5757 rcu_read_unlock();
5858
5959 return connected;
6060 }
6161
6262 static struct rtrs_permit *
63−__rtrs_get_permit(struct rtrs_clt *clt, enum rtrs_clt_con_type con_type)
63+__rtrs_get_permit(struct rtrs_clt_sess *clt, enum rtrs_clt_con_type con_type)
6464 {
6565 size_t max_depth = clt->queue_depth;
6666 struct rtrs_permit *permit;
@@ -87,7 +87,7 @@ __rtrs_get_permit(struct rtrs_clt *clt, enum rtrs_clt_con_type con_type) · 20 unmodified lines
8787 return permit;
8888 }
8989
90−static inline void __rtrs_put_permit(struct rtrs_clt *clt,
90+static inline void __rtrs_put_permit(struct rtrs_clt_sess *clt,
9191 struct rtrs_permit *permit)
9292 {
9393 clear_bit_unlock(permit->mem_id, clt->permits_map);
@@ -107,7 +107,7 @@ static inline void __rtrs_put_permit(struct rtrs_clt *clt, · 13 unmodified lines
107107 * Context:
108108 * Can sleep if @wait == RTRS_PERMIT_WAIT
109109 */
110−struct rtrs_permit *rtrs_clt_get_permit(struct rtrs_clt *clt,
110+struct rtrs_permit *rtrs_clt_get_permit(struct rtrs_clt_sess *clt,
111111 enum rtrs_clt_con_type con_type,
112112 enum wait_type can_wait)
113113 {
@@ -142,7 +142,8 @@ EXPORT_SYMBOL(rtrs_clt_get_permit); · 28 unmodified lines
142142 * Context:
143143 * Does not matter
144144 */
145−void rtrs_clt_put_permit(struct rtrs_clt *clt, struct rtrs_permit *permit)
145+void rtrs_clt_put_permit(struct rtrs_clt_sess *clt,
146+ struct rtrs_permit *permit)
146147 {
147148 if (WARN_ON(!test_bit(permit->mem_id, clt->permits_map)))
148149 return;
@@ -163,29 +164,29 @@ EXPORT_SYMBOL(rtrs_clt_put_permit); · 14 unmodified lines
163164
164165 /**
165166 * rtrs_permit_to_clt_con() - returns RDMA connection pointer by the permit
166− * @sess: client session pointer
167+ * @clt_path: client path pointer
167168 * @permit: permit for the allocation of the RDMA buffer
168169 * Note:
169170 * IO connection starts from 1.
170171 * 0 connection is for user messages.
171172 */
172173 static
173−struct rtrs_clt_con *rtrs_permit_to_clt_con(struct rtrs_clt_sess *sess,
174+struct rtrs_clt_con *rtrs_permit_to_clt_con(struct rtrs_clt_path *clt_path,
174175 struct rtrs_permit *permit)
175176 {
176177 int id = 0;
177178
178179 if (permit->con_type == RTRS_IO_CON)
179− id = (permit->cpu_id % (sess->s.irq_con_num - 1)) + 1;
180+ id = (permit->cpu_id % (clt_path->s.irq_con_num - 1)) + 1;
180181
181− return to_clt_con(sess->s.con[id]);
182+ return to_clt_con(clt_path->s.con[id]);
182183 }
183184
184185 /**
185186 * rtrs_clt_change_state() - change the session state through session state
186187 * machine.
187188 *
188− * @sess: client session to change the state of.
189+ * @clt_path: client path to change the state of.
189190 * @new_state: state to change to.
190191 *
191192 * returns true if sess's state is changed to new state, otherwise return false.
@@ -193,15 +194,15 @@ struct rtrs_clt_con *rtrs_permit_to_clt_con(struct rtrs_clt_sess *sess, · 1 unmodified line
193194 * Locks:
194195 * state_wq lock must be hold.
195196 */
196−static bool rtrs_clt_change_state(struct rtrs_clt_sess *sess,
197+static bool rtrs_clt_change_state(struct rtrs_clt_path *clt_path,
197198 enum rtrs_clt_state new_state)
198199 {
199200 enum rtrs_clt_state old_state;
200201 bool changed = false;
201202
202− lockdep_assert_held(&sess->state_wq.lock);
203+ lockdep_assert_held(&clt_path->state_wq.lock);
203204
204− old_state = sess->state;
205+ old_state = clt_path->state;
205206 switch (new_state) {
206207 case RTRS_CLT_CONNECTING:
207208 switch (old_state) {
@@ -275,42 +276,42 @@ static bool rtrs_clt_change_state(struct rtrs_clt_sess *sess, · 67 unmodified lines
275276 break;
276277 }
277278 if (changed) {
278− sess->state = new_state;
279− wake_up_locked(&sess->state_wq);
279+ clt_path->state = new_state;
280+ wake_up_locked(&clt_path->state_wq);
280281 }
281282
282283 return changed;
283284 }
284285
285−static bool rtrs_clt_change_state_from_to(struct rtrs_clt_sess *sess,
286+static bool rtrs_clt_change_state_from_to(struct rtrs_clt_path *clt_path,
286287 enum rtrs_clt_state old_state,
287288 enum rtrs_clt_state new_state)
288289 {
289290 bool changed = false;
290291
291− spin_lock_irq(&sess->state_wq.lock);
292− if (sess->state == old_state)
293− changed = rtrs_clt_change_state(sess, new_state);
294− spin_unlock_irq(&sess->state_wq.lock);
292+ spin_lock_irq(&clt_path->state_wq.lock);
293+ if (clt_path->state == old_state)
294+ changed = rtrs_clt_change_state(clt_path, new_state);
295+ spin_unlock_irq(&clt_path->state_wq.lock);
295296
296297 return changed;
297298 }
298299
299300 static void rtrs_rdma_error_recovery(struct rtrs_clt_con *con)
300301 {
301− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
302+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
302303
303− if (rtrs_clt_change_state_from_to(sess,
304+ if (rtrs_clt_change_state_from_to(clt_path,
304305 RTRS_CLT_CONNECTED,
305306 RTRS_CLT_RECONNECTING)) {
306− struct rtrs_clt *clt = sess->clt;
307+ struct rtrs_clt_sess *clt = clt_path->clt;
307308 unsigned int delay_ms;
308309
309310 /*
310311 * Normal scenario, reconnect if we were successfully connected
311312 */
312313 delay_ms = clt->reconnect_delay_sec * 1000;
313− queue_delayed_work(rtrs_wq, &sess->reconnect_dwork,
314+ queue_delayed_work(rtrs_wq, &clt_path->reconnect_dwork,
314315 msecs_to_jiffies(delay_ms +
315316 prandom_u32() % RTRS_RECONNECT_SEED));
316317 } else {
@@ -319,7 +320,7 @@ static void rtrs_rdma_error_recovery(struct rtrs_clt_con *con) · 2 unmodified lines
319320 * so notify waiter with error state, waiter is responsible
320321 * for cleaning the rest and reconnect if needed.
321322 */
322− rtrs_clt_change_state_from_to(sess,
323+ rtrs_clt_change_state_from_to(clt_path,
323324 RTRS_CLT_CONNECTING,
324325 RTRS_CLT_CONNECTING_ERR);
325326 }
@@ -330,7 +331,7 @@ static void rtrs_clt_fast_reg_done(struct ib_cq *cq, struct ib_wc *wc) · 4 unmodified lines
330331 struct rtrs_clt_con *con = to_clt_con(wc->qp->qp_context);
331332
332333 if (wc->status != IB_WC_SUCCESS) {
333− rtrs_err(con->c.sess, "Failed IB_WR_REG_MR: %s\n",
334+ rtrs_err(con->c.path, "Failed IB_WR_REG_MR: %s\n",
334335 ib_wc_status_msg(wc->status));
335336 rtrs_rdma_error_recovery(con);
336337 }
@@ -350,7 +351,7 @@ static void rtrs_clt_inv_rkey_done(struct ib_cq *cq, struct ib_wc *wc) · 13 unmodified lines
350351 struct rtrs_clt_con *con = to_clt_con(wc->qp->qp_context);
351352
352353 if (wc->status != IB_WC_SUCCESS) {
353− rtrs_err(con->c.sess, "Failed IB_WR_LOCAL_INV: %s\n",
354+ rtrs_err(con->c.path, "Failed IB_WR_LOCAL_INV: %s\n",
354355 ib_wc_status_msg(wc->status));
355356 rtrs_rdma_error_recovery(con);
356357 }
@@ -380,14 +381,14 @@ static void complete_rdma_req(struct rtrs_clt_io_req *req, int errno, · 23 unmodified lines
380381 bool notify, bool can_wait)
381382 {
382383 struct rtrs_clt_con *con = req->con;
383− struct rtrs_clt_sess *sess;
384+ struct rtrs_clt_path *clt_path;
384385 int err;
385386
386387 if (WARN_ON(!req->in_use))
387388 return;
388389 if (WARN_ON(!req->con))
389390 return;
390− sess = to_clt_sess(con->c.sess);
391+ clt_path = to_clt_path(con->c.path);
391392
392393 if (req->sg_cnt) {
393394 if (req->dir == DMA_FROM_DEVICE && req->need_inv) {
@@ -417,7 +418,7 @@ static void complete_rdma_req(struct rtrs_clt_io_req *req, int errno, · 23 unmodified lines
417418 refcount_inc(&req->ref);
418419 err = rtrs_inv_rkey(req);
419420 if (err) {
420− rtrs_err(con->c.sess, "Send INV WR key=%#x: %d\n",
421+ rtrs_err(con->c.path, "Send INV WR key=%#x: %d\n",
421422 req->mr->rkey, err);
422423 } else if (can_wait) {
423424 wait_for_completion(&req->inv_comp);
@@ -433,21 +434,21 @@ static void complete_rdma_req(struct rtrs_clt_io_req *req, int errno, · 9 unmodified lines
433434 if (!refcount_dec_and_test(&req->ref))
434435 return;
435436 }
436− ib_dma_unmap_sg(sess->s.dev->ib_dev, req->sglist,
437+ ib_dma_unmap_sg(clt_path->s.dev->ib_dev, req->sglist,
437438 req->sg_cnt, req->dir);
438439 }
439440 if (!refcount_dec_and_test(&req->ref))
440441 return;
441442 if (req->mp_policy == MP_POLICY_MIN_INFLIGHT)
442− atomic_dec(&sess->stats->inflight);
443+ atomic_dec(&clt_path->stats->inflight);
443444
444445 req->in_use = false;
445446 req->con = NULL;
446447
447448 if (errno) {
448− rtrs_err_rl(con->c.sess, "IO request failed: error=%d path=%s [%s:%u] notify=%d\n",
449− errno, kobject_name(&sess->kobj), sess->hca_name,
450− sess->hca_port, notify);
449+ rtrs_err_rl(con->c.path, "IO request failed: error=%d path=%s [%s:%u] notify=%d\n",
450+ errno, kobject_name(&clt_path->kobj), clt_path->hca_name,
451+ clt_path->hca_port, notify);
451452 }
452453
453454 if (notify)
@@ -459,12 +460,12 @@ static int rtrs_post_send_rdma(struct rtrs_clt_con *con, · 5 unmodified lines
459460 struct rtrs_rbuf *rbuf, u32 off,
460461 u32 imm, struct ib_send_wr *wr)
461462 {
462− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
463+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
463464 enum ib_send_flags flags;
464465 struct ib_sge sge;
465466
466467 if (!req->sg_size) {
467− rtrs_wrn(con->c.sess,
468+ rtrs_wrn(con->c.path,
468469 "Doing RDMA Write failed, no data supplied\n");
469470 return -EINVAL;
470471 }
@@ -472,16 +473,17 @@ static int rtrs_post_send_rdma(struct rtrs_clt_con *con, · 1 unmodified line
472473 /* user data and user message in the first list element */
473474 sge.addr = req->iu->dma_addr;
474475 sge.length = req->sg_size;
475− sge.lkey = sess->s.dev->ib_pd->local_dma_lkey;
476+ sge.lkey = clt_path->s.dev->ib_pd->local_dma_lkey;
476477
477478 /*
478479 * From time to time we have to post signalled sends,
479480 * or send queue will fill up and only QP reset can help.
480481 */
481− flags = atomic_inc_return(&con->c.wr_cnt) % sess->s.signal_interval ?
482+ flags = atomic_inc_return(&con->c.wr_cnt) % clt_path->s.signal_interval ?
482483 0 : IB_SEND_SIGNALED;
483484
484− ib_dma_sync_single_for_device(sess->s.dev->ib_dev, req->iu->dma_addr,
485+ ib_dma_sync_single_for_device(clt_path->s.dev->ib_dev,
486+ req->iu->dma_addr,
485487 req->sg_size, DMA_TO_DEVICE);
486488
487489 return rtrs_iu_post_rdma_write_imm(&con->c, req->iu, &sge, 1,
@@ -489,15 +491,15 @@ static int rtrs_post_send_rdma(struct rtrs_clt_con *con, · 1 unmodified line
489491 imm, flags, wr, NULL);
490492 }
491493
492−static void process_io_rsp(struct rtrs_clt_sess *sess, u32 msg_id,
494+static void process_io_rsp(struct rtrs_clt_path *clt_path, u32 msg_id,
493495 s16 errno, bool w_inval)
494496 {
495497 struct rtrs_clt_io_req *req;
496498
497− if (WARN_ON(msg_id >= sess->queue_depth))
499+ if (WARN_ON(msg_id >= clt_path->queue_depth))
498500 return;
499501
500− req = &sess->reqs[msg_id];
502+ req = &clt_path->reqs[msg_id];
501503 /* Drop need_inv if server responded with send with invalidation */
502504 req->need_inv &= !w_inval;
503505 complete_rdma_req(req, errno, true, false);
@@ -507,21 +509,21 @@ static void rtrs_clt_recv_done(struct rtrs_clt_con *con, struct ib_wc *wc) · 3 unmodified lines
507509 {
508510 struct rtrs_iu *iu;
509511 int err;
510− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
512+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
511513
512− WARN_ON((sess->flags & RTRS_MSG_NEW_RKEY_F) == 0);
514+ WARN_ON((clt_path->flags & RTRS_MSG_NEW_RKEY_F) == 0);
513515 iu = container_of(wc->wr_cqe, struct rtrs_iu,
514516 cqe);
515517 err = rtrs_iu_post_recv(&con->c, iu);
516518 if (err) {
517− rtrs_err(con->c.sess, "post iu failed %d\n", err);
519+ rtrs_err(con->c.path, "post iu failed %d\n", err);
518520 rtrs_rdma_error_recovery(con);
519521 }
520522 }
521523
522524 static void rtrs_clt_rkey_rsp_done(struct rtrs_clt_con *con, struct ib_wc *wc)
523525 {
524− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
526+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
525527 struct rtrs_msg_rkey_rsp *msg;
526528 u32 imm_type, imm_payload;
527529 bool w_inval = false;
@@ -529,25 +531,26 @@ static void rtrs_clt_rkey_rsp_done(struct rtrs_clt_con *con, struct ib_wc *wc) · 1 unmodified line
529531 u32 buf_id;
530532 int err;
531533
532− WARN_ON((sess->flags & RTRS_MSG_NEW_RKEY_F) == 0);
534+ WARN_ON((clt_path->flags & RTRS_MSG_NEW_RKEY_F) == 0);
533535
534536 iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe);
535537
536538 if (wc->byte_len < sizeof(*msg)) {
537− rtrs_err(con->c.sess, "rkey response is malformed: size %d\n",
539+ rtrs_err(con->c.path, "rkey response is malformed: size %d\n",
538540 wc->byte_len);
539541 goto out;
540542 }
541− ib_dma_sync_single_for_cpu(sess->s.dev->ib_dev, iu->dma_addr,
543+ ib_dma_sync_single_for_cpu(clt_path->s.dev->ib_dev, iu->dma_addr,
542544 iu->size, DMA_FROM_DEVICE);
543545 msg = iu->buf;
544546 if (le16_to_cpu(msg->type) != RTRS_MSG_RKEY_RSP) {
545− rtrs_err(sess->clt, "rkey response is malformed: type %d\n",
547+ rtrs_err(clt_path->clt,
548+ "rkey response is malformed: type %d\n",
546549 le16_to_cpu(msg->type));
547550 goto out;
548551 }
549552 buf_id = le16_to_cpu(msg->buf_id);
550− if (WARN_ON(buf_id >= sess->queue_depth))
553+ if (WARN_ON(buf_id >= clt_path->queue_depth))
551554 goto out;
552555
553556 rtrs_from_imm(be32_to_cpu(wc->ex.imm_data), &imm_type, &imm_payload);
@@ -560,10 +563,10 @@ static void rtrs_clt_rkey_rsp_done(struct rtrs_clt_con *con, struct ib_wc *wc) · 6 unmodified lines
560563
561564 if (WARN_ON(buf_id != msg_id))
562565 goto out;
563− sess->rbufs[buf_id].rkey = le32_to_cpu(msg->rkey);
564− process_io_rsp(sess, msg_id, err, w_inval);
566+ clt_path->rbufs[buf_id].rkey = le32_to_cpu(msg->rkey);
567+ process_io_rsp(clt_path, msg_id, err, w_inval);
565568 }
566− ib_dma_sync_single_for_device(sess->s.dev->ib_dev, iu->dma_addr,
569+ ib_dma_sync_single_for_device(clt_path->s.dev->ib_dev, iu->dma_addr,
567570 iu->size, DMA_FROM_DEVICE);
568571 return rtrs_clt_recv_done(con, wc);
569572 out:
@@ -600,14 +603,14 @@ static int rtrs_post_recv_empty_x2(struct rtrs_con *con, struct ib_cqe *cqe) · 30 unmodified lines
600603 static void rtrs_clt_rdma_done(struct ib_cq *cq, struct ib_wc *wc)
601604 {
602605 struct rtrs_clt_con *con = to_clt_con(wc->qp->qp_context);
603− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
606+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
604607 u32 imm_type, imm_payload;
605608 bool w_inval = false;
606609 int err;
607610
608611 if (wc->status != IB_WC_SUCCESS) {
609612 if (wc->status != IB_WC_WR_FLUSH_ERR) {
610− rtrs_err(sess->clt, "RDMA failed: %s\n",
613+ rtrs_err(clt_path->clt, "RDMA failed: %s\n",
611614 ib_wc_status_msg(wc->status));
612615 rtrs_rdma_error_recovery(con);
613616 }
@@ -632,21 +635,21 @@ static void rtrs_clt_rdma_done(struct ib_cq *cq, struct ib_wc *wc) · 18 unmodified lines
632635 w_inval = (imm_type == RTRS_IO_RSP_W_INV_IMM);
633636 rtrs_from_io_rsp_imm(imm_payload, &msg_id, &err);
634637
635− process_io_rsp(sess, msg_id, err, w_inval);
638+ process_io_rsp(clt_path, msg_id, err, w_inval);
636639 } else if (imm_type == RTRS_HB_MSG_IMM) {
637640 WARN_ON(con->c.cid);
638− rtrs_send_hb_ack(&sess->s);
639− if (sess->flags & RTRS_MSG_NEW_RKEY_F)
641+ rtrs_send_hb_ack(&clt_path->s);
642+ if (clt_path->flags & RTRS_MSG_NEW_RKEY_F)
640643 return rtrs_clt_recv_done(con, wc);
641644 } else if (imm_type == RTRS_HB_ACK_IMM) {
642645 WARN_ON(con->c.cid);
643− sess->s.hb_missed_cnt = 0;
644− sess->s.hb_cur_latency =
645− ktime_sub(ktime_get(), sess->s.hb_last_sent);
646− if (sess->flags & RTRS_MSG_NEW_RKEY_F)
646+ clt_path->s.hb_missed_cnt = 0;
647+ clt_path->s.hb_cur_latency =
648+ ktime_sub(ktime_get(), clt_path->s.hb_last_sent);
649+ if (clt_path->flags & RTRS_MSG_NEW_RKEY_F)
647650 return rtrs_clt_recv_done(con, wc);
648651 } else {
649− rtrs_wrn(con->c.sess, "Unknown IMM type %u\n",
652+ rtrs_wrn(con->c.path, "Unknown IMM type %u\n",
650653 imm_type);
651654 }
652655 if (w_inval)
@@ -658,7 +661,7 @@ static void rtrs_clt_rdma_done(struct ib_cq *cq, struct ib_wc *wc) · 5 unmodified lines
658661 else
659662 err = rtrs_post_recv_empty(&con->c, &io_comp_cqe);
660663 if (err) {
661− rtrs_err(con->c.sess, "rtrs_post_recv_empty(): %d\n",
664+ rtrs_err(con->c.path, "rtrs_post_recv_empty(): %d\n",
662665 err);
663666 rtrs_rdma_error_recovery(con);
664667 }
@@ -670,7 +673,7 @@ static void rtrs_clt_rdma_done(struct ib_cq *cq, struct ib_wc *wc) · 5 unmodified lines
670673 WARN_ON(!(wc->wc_flags & IB_WC_WITH_INVALIDATE ||
671674 wc->wc_flags & IB_WC_WITH_IMM));
672675 WARN_ON(wc->wr_cqe->done != rtrs_clt_rdma_done);
673− if (sess->flags & RTRS_MSG_NEW_RKEY_F) {
676+ if (clt_path->flags & RTRS_MSG_NEW_RKEY_F) {
674677 if (wc->wc_flags & IB_WC_WITH_INVALIDATE)
675678 return rtrs_clt_recv_done(con, wc);
676679
@@ -685,7 +688,7 @@ static void rtrs_clt_rdma_done(struct ib_cq *cq, struct ib_wc *wc) · 8 unmodified lines
685688 break;
686689
687690 default:
688− rtrs_wrn(sess->clt, "Unexpected WC type: %d\n", wc->opcode);
691+ rtrs_wrn(clt_path->clt, "Unexpected WC type: %d\n", wc->opcode);
689692 return;
690693 }
691694 }
@@ -693,10 +696,10 @@ static void rtrs_clt_rdma_done(struct ib_cq *cq, struct ib_wc *wc) · 1 unmodified line
693696 static int post_recv_io(struct rtrs_clt_con *con, size_t q_size)
694697 {
695698 int err, i;
696− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
699+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
697700
698701 for (i = 0; i < q_size; i++) {
699− if (sess->flags & RTRS_MSG_NEW_RKEY_F) {
702+ if (clt_path->flags & RTRS_MSG_NEW_RKEY_F) {
700703 struct rtrs_iu *iu = &con->rsp_ius[i];
701704
702705 err = rtrs_iu_post_recv(&con->c, iu);
@@ -710,16 +713,16 @@ static int post_recv_io(struct rtrs_clt_con *con, size_t q_size) · 7 unmodified lines
710713 return 0;
711714 }
712715
713−static int post_recv_sess(struct rtrs_clt_sess *sess)
716+static int post_recv_path(struct rtrs_clt_path *clt_path)
714717 {
715718 size_t q_size = 0;
716719 int err, cid;
717720
718− for (cid = 0; cid < sess->s.con_num; cid++) {
721+ for (cid = 0; cid < clt_path->s.con_num; cid++) {
719722 if (cid == 0)
720723 q_size = SERVICE_CON_QUEUE_DEPTH;
721724 else
722− q_size = sess->queue_depth;
725+ q_size = clt_path->queue_depth;
723726
724727 /*
725728 * x2 for RDMA read responses + FR key invalidations,
@@ -727,9 +730,10 @@ static int post_recv_sess(struct rtrs_clt_sess *sess) · 1 unmodified line
727730 */
728731 q_size *= 2;
729732
730− err = post_recv_io(to_clt_con(sess->s.con[cid]), q_size);
733+ err = post_recv_io(to_clt_con(clt_path->s.con[cid]), q_size);
731734 if (err) {
732− rtrs_err(sess->clt, "post_recv_io(), err: %d\n", err);
735+ rtrs_err(clt_path->clt, "post_recv_io(), err: %d\n",
736+ err);
733737 return err;
734738 }
735739 }
@@ -740,8 +744,8 @@ static int post_recv_sess(struct rtrs_clt_sess *sess) · 4 unmodified lines
740744 struct path_it {
741745 int i;
742746 struct list_head skip_list;
743− struct rtrs_clt *clt;
744− struct rtrs_clt_sess *(*next_path)(struct path_it *it);
747+ struct rtrs_clt_sess *clt;
748+ struct rtrs_clt_path *(*next_path)(struct path_it *it);
745749 };
746750
747751 /**
@@ -773,11 +777,11 @@ struct path_it { · 25 unmodified lines
773777 * Locks:
774778 * rcu_read_lock() must be hold.
775779 */
776−static struct rtrs_clt_sess *get_next_path_rr(struct path_it *it)
780+static struct rtrs_clt_path *get_next_path_rr(struct path_it *it)
777781 {
778− struct rtrs_clt_sess __rcu **ppcpu_path;
779− struct rtrs_clt_sess *path;
780− struct rtrs_clt *clt;
782+ struct rtrs_clt_path __rcu **ppcpu_path;
783+ struct rtrs_clt_path *path;
784+ struct rtrs_clt_sess *clt;
781785
782786 clt = it->clt;
783787
@@ -811,26 +815,26 @@ static struct rtrs_clt_sess *get_next_path_rr(struct path_it *it) · 27 unmodified lines
811815 * Locks:
812816 * rcu_read_lock() must be hold.
813817 */
814−static struct rtrs_clt_sess *get_next_path_min_inflight(struct path_it *it)
818+static struct rtrs_clt_path *get_next_path_min_inflight(struct path_it *it)
815819 {
816− struct rtrs_clt_sess *min_path = NULL;
817− struct rtrs_clt *clt = it->clt;
818− struct rtrs_clt_sess *sess;
820+ struct rtrs_clt_path *min_path = NULL;
821+ struct rtrs_clt_sess *clt = it->clt;
822+ struct rtrs_clt_path *clt_path;
819823 int min_inflight = INT_MAX;
820824 int inflight;
821825
822− list_for_each_entry_rcu(sess, &clt->paths_list, s.entry) {
823− if (READ_ONCE(sess->state) != RTRS_CLT_CONNECTED)
826+ list_for_each_entry_rcu(clt_path, &clt->paths_list, s.entry) {
827+ if (READ_ONCE(clt_path->state) != RTRS_CLT_CONNECTED)
824828 continue;
825829
826− if (!list_empty(raw_cpu_ptr(sess->mp_skip_entry)))
830+ if (!list_empty(raw_cpu_ptr(clt_path->mp_skip_entry)))
827831 continue;
828832
829− inflight = atomic_read(&sess->stats->inflight);
833+ inflight = atomic_read(&clt_path->stats->inflight);
830834
831835 if (inflight < min_inflight) {
832836 min_inflight = inflight;
833− min_path = sess;
837+ min_path = clt_path;
834838 }
835839 }
836840
@@ -862,26 +866,26 @@ static struct rtrs_clt_sess *get_next_path_min_inflight(struct path_it *it) · 25 unmodified lines
862866 * Therefore the caller MUST check the returned
863867 * path is NULL and trigger the IO error.
864868 */
865−static struct rtrs_clt_sess *get_next_path_min_latency(struct path_it *it)
869+static struct rtrs_clt_path *get_next_path_min_latency(struct path_it *it)
866870 {
867− struct rtrs_clt_sess *min_path = NULL;
868− struct rtrs_clt *clt = it->clt;
869− struct rtrs_clt_sess *sess;
870− ktime_t min_latency = INT_MAX;
871+ struct rtrs_clt_path *min_path = NULL;
872+ struct rtrs_clt_sess *clt = it->clt;
873+ struct rtrs_clt_path *clt_path;
874+ ktime_t min_latency = KTIME_MAX;
871875 ktime_t latency;
872876
873− list_for_each_entry_rcu(sess, &clt->paths_list, s.entry) {
874− if (READ_ONCE(sess->state) != RTRS_CLT_CONNECTED)
877+ list_for_each_entry_rcu(clt_path, &clt->paths_list, s.entry) {
878+ if (READ_ONCE(clt_path->state) != RTRS_CLT_CONNECTED)
875879 continue;
876880
877− if (!list_empty(raw_cpu_ptr(sess->mp_skip_entry)))
881+ if (!list_empty(raw_cpu_ptr(clt_path->mp_skip_entry)))
878882 continue;
879883
880− latency = sess->s.hb_cur_latency;
884+ latency = clt_path->s.hb_cur_latency;
881885
882886 if (latency < min_latency) {
883887 min_latency = latency;
884− min_path = sess;
888+ min_path = clt_path;
885889 }
886890 }
887891
@@ -895,7 +899,7 @@ static struct rtrs_clt_sess *get_next_path_min_latency(struct path_it *it) · 7 unmodified lines
895899 return min_path;
896900 }
897901
898−static inline void path_it_init(struct path_it *it, struct rtrs_clt *clt)
902+static inline void path_it_init(struct path_it *it, struct rtrs_clt_sess *clt)
899903 {
900904 INIT_LIST_HEAD(&it->skip_list);
901905 it->clt = clt;
@@ -928,7 +932,7 @@ static inline void path_it_deinit(struct path_it *it) · 26 unmodified lines
928932 * the corresponding buffer of rtrs_iu (req->iu->buf), which later on will
929933 * also hold the control message of rtrs.
930934 * @req: an io request holding information about IO.
931− * @sess: client session
935+ * @clt_path: client path
932936 * @conf: conformation callback function to notify upper layer.
933937 * @permit: permit for allocation of RDMA remote buffer
934938 * @priv: private pointer
@@ -940,7 +944,7 @@ static inline void path_it_deinit(struct path_it *it) · 5 unmodified lines
940944 * @dir: direction of the IO.
941945 */
942946 static void rtrs_clt_init_req(struct rtrs_clt_io_req *req,
943− struct rtrs_clt_sess *sess,
947+ struct rtrs_clt_path *clt_path,
944948 void (*conf)(void *priv, int errno),
945949 struct rtrs_permit *permit, void *priv,
946950 const struct kvec *vec, size_t usr_len,
@@ -958,13 +962,13 @@ static void rtrs_clt_init_req(struct rtrs_clt_io_req *req, · 11 unmodified lines
958962 req->sg_cnt = sg_cnt;
959963 req->priv = priv;
960964 req->dir = dir;
961− req->con = rtrs_permit_to_clt_con(sess, permit);
965+ req->con = rtrs_permit_to_clt_con(clt_path, permit);
962966 req->conf = conf;
963967 req->need_inv = false;
964968 req->need_inv_comp = false;
965969 req->inv_errno = 0;
966970 refcount_set(&req->ref, 1);
967− req->mp_policy = sess->clt->mp_policy;
971+ req->mp_policy = clt_path->clt->mp_policy;
968972
969973 iov_iter_kvec(&iter, READ, vec, 1, usr_len);
970974 len = _copy_from_iter(req->iu->buf, usr_len, &iter);
@@ -974,7 +978,7 @@ static void rtrs_clt_init_req(struct rtrs_clt_io_req *req, · 3 unmodified lines
974978 }
975979
976980 static struct rtrs_clt_io_req *
977−rtrs_clt_get_req(struct rtrs_clt_sess *sess,
981+rtrs_clt_get_req(struct rtrs_clt_path *clt_path,
978982 void (*conf)(void *priv, int errno),
979983 struct rtrs_permit *permit, void *priv,
980984 const struct kvec *vec, size_t usr_len,
@@ -983,14 +987,14 @@ rtrs_clt_get_req(struct rtrs_clt_sess *sess, · 2 unmodified lines
983987 {
984988 struct rtrs_clt_io_req *req;
985989
986− req = &sess->reqs[permit->mem_id];
987− rtrs_clt_init_req(req, sess, conf, permit, priv, vec, usr_len,
990+ req = &clt_path->reqs[permit->mem_id];
991+ rtrs_clt_init_req(req, clt_path, conf, permit, priv, vec, usr_len,
988992 sg, sg_cnt, data_len, dir);
989993 return req;
990994 }
991995
992996 static struct rtrs_clt_io_req *
993−rtrs_clt_get_copy_req(struct rtrs_clt_sess *alive_sess,
997+rtrs_clt_get_copy_req(struct rtrs_clt_path *alive_path,
994998 struct rtrs_clt_io_req *fail_req)
995999 {
9961000 struct rtrs_clt_io_req *req;
@@ -999,8 +1003,8 @@ rtrs_clt_get_copy_req(struct rtrs_clt_sess *alive_sess, · 2 unmodified lines
9991003 .iov_len = fail_req->usr_len
10001004 };
10011005
1002− req = &alive_sess->reqs[fail_req->permit->mem_id];
1003− rtrs_clt_init_req(req, alive_sess, fail_req->conf, fail_req->permit,
1006+ req = &alive_path->reqs[fail_req->permit->mem_id];
1007+ rtrs_clt_init_req(req, alive_path, fail_req->conf, fail_req->permit,
10041008 fail_req->priv, &vec, fail_req->usr_len,
10051009 fail_req->sglist, fail_req->sg_cnt,
10061010 fail_req->data_len, fail_req->dir);
@@ -1013,7 +1017,7 @@ static int rtrs_post_rdma_write_sg(struct rtrs_clt_con *con, · 6 unmodified lines
10131017 u32 size, u32 imm, struct ib_send_wr *wr,
10141018 struct ib_send_wr *tail)
10151019 {
1016− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
1020+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
10171021 struct ib_sge *sge = req->sge;
10181022 enum ib_send_flags flags;
10191023 struct scatterlist *sg;
@@ -1033,22 +1037,23 @@ static int rtrs_post_rdma_write_sg(struct rtrs_clt_con *con, · 13 unmodified lines
10331037 for_each_sg(req->sglist, sg, req->sg_cnt, i) {
10341038 sge[i].addr = sg_dma_address(sg);
10351039 sge[i].length = sg_dma_len(sg);
1036− sge[i].lkey = sess->s.dev->ib_pd->local_dma_lkey;
1040+ sge[i].lkey = clt_path->s.dev->ib_pd->local_dma_lkey;
10371041 }
10381042 num_sge = 1 + req->sg_cnt;
10391043 }
10401044 sge[i].addr = req->iu->dma_addr;
10411045 sge[i].length = size;
1042− sge[i].lkey = sess->s.dev->ib_pd->local_dma_lkey;
1046+ sge[i].lkey = clt_path->s.dev->ib_pd->local_dma_lkey;
10431047
10441048 /*
10451049 * From time to time we have to post signalled sends,
10461050 * or send queue will fill up and only QP reset can help.
10471051 */
1048− flags = atomic_inc_return(&con->c.wr_cnt) % sess->s.signal_interval ?
1052+ flags = atomic_inc_return(&con->c.wr_cnt) % clt_path->s.signal_interval ?
10491053 0 : IB_SEND_SIGNALED;
10501054
1051− ib_dma_sync_single_for_device(sess->s.dev->ib_dev, req->iu->dma_addr,
1055+ ib_dma_sync_single_for_device(clt_path->s.dev->ib_dev,
1056+ req->iu->dma_addr,
10521057 size, DMA_TO_DEVICE);
10531058
10541059 return rtrs_iu_post_rdma_write_imm(&con->c, req->iu, sge, num_sge,
@@ -1074,8 +1079,8 @@ static int rtrs_map_sg_fr(struct rtrs_clt_io_req *req, size_t count) · 19 unmodified lines
10741079 static int rtrs_clt_write_req(struct rtrs_clt_io_req *req)
10751080 {
10761081 struct rtrs_clt_con *con = req->con;
1077− struct rtrs_sess *s = con->c.sess;
1078− struct rtrs_clt_sess *sess = to_clt_sess(s);
1082+ struct rtrs_path *s = con->c.path;
1083+ struct rtrs_clt_path *clt_path = to_clt_path(s);
10791084 struct rtrs_msg_rdma_write *msg;
10801085
10811086 struct rtrs_rbuf *rbuf;
@@ -1088,13 +1093,13 @@ static int rtrs_clt_write_req(struct rtrs_clt_io_req *req) · 6 unmodified lines
10881093
10891094 const size_t tsize = sizeof(*msg) + req->data_len + req->usr_len;
10901095
1091− if (tsize > sess->chunk_size) {
1096+ if (tsize > clt_path->chunk_size) {
10921097 rtrs_wrn(s, "Write request failed, size too big %zu > %d\n",
1093− tsize, sess->chunk_size);
1098+ tsize, clt_path->chunk_size);
10941099 return -EMSGSIZE;
10951100 }
10961101 if (req->sg_cnt) {
1097− count = ib_dma_map_sg(sess->s.dev->ib_dev, req->sglist,
1102+ count = ib_dma_map_sg(clt_path->s.dev->ib_dev, req->sglist,
10981103 req->sg_cnt, req->dir);
10991104 if (!count) {
11001105 rtrs_wrn(s, "Write request failed, map failed\n");
@@ -1111,7 +1116,7 @@ static int rtrs_clt_write_req(struct rtrs_clt_io_req *req) · 10 unmodified lines
11111116 imm = rtrs_to_io_req_imm(imm);
11121117 buf_id = req->permit->mem_id;
11131118 req->sg_size = tsize;
1114− rbuf = &sess->rbufs[buf_id];
1119+ rbuf = &clt_path->rbufs[buf_id];
11151120
11161121 if (count) {
11171122 ret = rtrs_map_sg_fr(req, count);
@@ -1119,7 +1124,7 @@ static int rtrs_clt_write_req(struct rtrs_clt_io_req *req) · 1 unmodified line
11191124 rtrs_err_rl(s,
11201125 "Write request failed, failed to map fast reg. data, err: %d\n",
11211126 ret);
1122− ib_dma_unmap_sg(sess->s.dev->ib_dev, req->sglist,
1127+ ib_dma_unmap_sg(clt_path->s.dev->ib_dev, req->sglist,
11231128 req->sg_cnt, req->dir);
11241129 return ret;
11251130 }
@@ -1153,12 +1158,12 @@ static int rtrs_clt_write_req(struct rtrs_clt_io_req *req) · 27 unmodified lines
11531158 if (ret) {
11541159 rtrs_err_rl(s,
11551160 "Write request failed: error=%d path=%s [%s:%u]\n",
1156− ret, kobject_name(&sess->kobj), sess->hca_name,
1157− sess->hca_port);
1161+ ret, kobject_name(&clt_path->kobj), clt_path->hca_name,
1162+ clt_path->hca_port);
11581163 if (req->mp_policy == MP_POLICY_MIN_INFLIGHT)
1159− atomic_dec(&sess->stats->inflight);
1164+ atomic_dec(&clt_path->stats->inflight);
11601165 if (req->sg_cnt)
1161− ib_dma_unmap_sg(sess->s.dev->ib_dev, req->sglist,
1166+ ib_dma_unmap_sg(clt_path->s.dev->ib_dev, req->sglist,
11621167 req->sg_cnt, req->dir);
11631168 }
11641169
@@ -1168,10 +1173,10 @@ static int rtrs_clt_write_req(struct rtrs_clt_io_req *req) · 3 unmodified lines
11681173 static int rtrs_clt_read_req(struct rtrs_clt_io_req *req)
11691174 {
11701175 struct rtrs_clt_con *con = req->con;
1171− struct rtrs_sess *s = con->c.sess;
1172− struct rtrs_clt_sess *sess = to_clt_sess(s);
1176+ struct rtrs_path *s = con->c.path;
1177+ struct rtrs_clt_path *clt_path = to_clt_path(s);
11731178 struct rtrs_msg_rdma_read *msg;
1174− struct rtrs_ib_dev *dev = sess->s.dev;
1179+ struct rtrs_ib_dev *dev = clt_path->s.dev;
11751180
11761181 struct ib_reg_wr rwr;
11771182 struct ib_send_wr *wr = NULL;
@@ -1181,10 +1186,10 @@ static int rtrs_clt_read_req(struct rtrs_clt_io_req *req) · 3 unmodified lines
11811186
11821187 const size_t tsize = sizeof(*msg) + req->data_len + req->usr_len;
11831188
1184− if (tsize > sess->chunk_size) {
1189+ if (tsize > clt_path->chunk_size) {
11851190 rtrs_wrn(s,
11861191 "Read request failed, message size is %zu, bigger than CHUNK_SIZE %d\n",
1187− tsize, sess->chunk_size);
1192+ tsize, clt_path->chunk_size);
11881193 return -EMSGSIZE;
11891194 }
11901195
@@ -1254,15 +1259,15 @@ static int rtrs_clt_read_req(struct rtrs_clt_io_req *req) · 63 unmodified lines
12541259 */
12551260 rtrs_clt_update_all_stats(req, READ);
12561261
1257− ret = rtrs_post_send_rdma(req->con, req, &sess->rbufs[buf_id],
1262+ ret = rtrs_post_send_rdma(req->con, req, &clt_path->rbufs[buf_id],
12581263 req->data_len, imm, wr);
12591264 if (ret) {
12601265 rtrs_err_rl(s,
12611266 "Read request failed: error=%d path=%s [%s:%u]\n",
1262− ret, kobject_name(&sess->kobj), sess->hca_name,
1263− sess->hca_port);
1267+ ret, kobject_name(&clt_path->kobj), clt_path->hca_name,
1268+ clt_path->hca_port);
12641269 if (req->mp_policy == MP_POLICY_MIN_INFLIGHT)
1265− atomic_dec(&sess->stats->inflight);
1270+ atomic_dec(&clt_path->stats->inflight);
12661271 req->need_inv = false;
12671272 if (req->sg_cnt)
12681273 ib_dma_unmap_sg(dev->ib_dev, req->sglist,
@@ -1277,21 +1282,21 @@ static int rtrs_clt_read_req(struct rtrs_clt_io_req *req) · 8 unmodified lines
12771282 * @clt: clt context
12781283 * @fail_req: a failed io request.
12791284 */
1280−static int rtrs_clt_failover_req(struct rtrs_clt *clt,
1285+static int rtrs_clt_failover_req(struct rtrs_clt_sess *clt,
12811286 struct rtrs_clt_io_req *fail_req)
12821287 {
1283− struct rtrs_clt_sess *alive_sess;
1288+ struct rtrs_clt_path *alive_path;
12841289 struct rtrs_clt_io_req *req;
12851290 int err = -ECONNABORTED;
12861291 struct path_it it;
12871292
12881293 rcu_read_lock();
12891294 for (path_it_init(&it, clt);
1290− (alive_sess = it.next_path(&it)) && it.i < it.clt->paths_num;
1295+ (alive_path = it.next_path(&it)) && it.i < it.clt->paths_num;
12911296 it.i++) {
1292− if (READ_ONCE(alive_sess->state) != RTRS_CLT_CONNECTED)
1297+ if (READ_ONCE(alive_path->state) != RTRS_CLT_CONNECTED)
12931298 continue;
1294− req = rtrs_clt_get_copy_req(alive_sess, fail_req);
1299+ req = rtrs_clt_get_copy_req(alive_path, fail_req);
12951300 if (req->dir == DMA_TO_DEVICE)
12961301 err = rtrs_clt_write_req(req);
12971302 else
@@ -1301,7 +1306,7 @@ static int rtrs_clt_failover_req(struct rtrs_clt *clt, · 3 unmodified lines
13011306 continue;
13021307 }
13031308 /* Success path */
1304− rtrs_clt_inc_failover_cnt(alive_sess->stats);
1309+ rtrs_clt_inc_failover_cnt(alive_path->stats);
13051310 break;
13061311 }
13071312 path_it_deinit(&it);
@@ -1310,16 +1315,16 @@ static int rtrs_clt_failover_req(struct rtrs_clt *clt, · 2 unmodified lines
13101315 return err;
13111316 }
13121317
1313−static void fail_all_outstanding_reqs(struct rtrs_clt_sess *sess)
1318+static void fail_all_outstanding_reqs(struct rtrs_clt_path *clt_path)
13141319 {
1315− struct rtrs_clt *clt = sess->clt;
1320+ struct rtrs_clt_sess *clt = clt_path->clt;
13161321 struct rtrs_clt_io_req *req;
13171322 int i, err;
13181323
1319− if (!sess->reqs)
1324+ if (!clt_path->reqs)
13201325 return;
1321− for (i = 0; i < sess->queue_depth; ++i) {
1322− req = &sess->reqs[i];
1326+ for (i = 0; i < clt_path->queue_depth; ++i) {
1327+ req = &clt_path->reqs[i];
13231328 if (!req->in_use)
13241329 continue;
13251330
@@ -1337,38 +1342,39 @@ static void fail_all_outstanding_reqs(struct rtrs_clt_sess *sess) · 11 unmodified lines
13371342 }
13381343 }
13391344
1340−static void free_sess_reqs(struct rtrs_clt_sess *sess)
1345+static void free_path_reqs(struct rtrs_clt_path *clt_path)
13411346 {
13421347 struct rtrs_clt_io_req *req;
13431348 int i;
13441349
1345− if (!sess->reqs)
1350+ if (!clt_path->reqs)
13461351 return;
1347− for (i = 0; i < sess->queue_depth; ++i) {
1348− req = &sess->reqs[i];
1352+ for (i = 0; i < clt_path->queue_depth; ++i) {
1353+ req = &clt_path->reqs[i];
13491354 if (req->mr)
13501355 ib_dereg_mr(req->mr);
13511356 kfree(req->sge);
1352− rtrs_iu_free(req->iu, sess->s.dev->ib_dev, 1);
1357+ rtrs_iu_free(req->iu, clt_path->s.dev->ib_dev, 1);
13531358 }
1354− kfree(sess->reqs);
1355− sess->reqs = NULL;
1359+ kfree(clt_path->reqs);
1360+ clt_path->reqs = NULL;
13561361 }
13571362
1358−static int alloc_sess_reqs(struct rtrs_clt_sess *sess)
1363+static int alloc_path_reqs(struct rtrs_clt_path *clt_path)
13591364 {
13601365 struct rtrs_clt_io_req *req;
13611366 int i, err = -ENOMEM;
13621367
1363− sess->reqs = kcalloc(sess->queue_depth, sizeof(*sess->reqs),
1364− GFP_KERNEL);
1365− if (!sess->reqs)
1368+ clt_path->reqs = kcalloc(clt_path->queue_depth,
1369+ sizeof(*clt_path->reqs),
1370+ GFP_KERNEL);
1371+ if (!clt_path->reqs)
13661372 return -ENOMEM;
13671373
1368− for (i = 0; i < sess->queue_depth; ++i) {
1369− req = &sess->reqs[i];
1370− req->iu = rtrs_iu_alloc(1, sess->max_hdr_size, GFP_KERNEL,
1371− sess->s.dev->ib_dev,
1374+ for (i = 0; i < clt_path->queue_depth; ++i) {
1375+ req = &clt_path->reqs[i];
1376+ req->iu = rtrs_iu_alloc(1, clt_path->max_hdr_size, GFP_KERNEL,
1377+ clt_path->s.dev->ib_dev,
13721378 DMA_TO_DEVICE,
13731379 rtrs_clt_rdma_done);
13741380 if (!req->iu)
@@ -1378,13 +1384,14 @@ static int alloc_sess_reqs(struct rtrs_clt_sess *sess) · 3 unmodified lines
13781384 if (!req->sge)
13791385 goto out;
13801386
1381− req->mr = ib_alloc_mr(sess->s.dev->ib_pd, IB_MR_TYPE_MEM_REG,
1382− sess->max_pages_per_mr);
1387+ req->mr = ib_alloc_mr(clt_path->s.dev->ib_pd,
1388+ IB_MR_TYPE_MEM_REG,
1389+ clt_path->max_pages_per_mr);
13831390 if (IS_ERR(req->mr)) {
13841391 err = PTR_ERR(req->mr);
13851392 req->mr = NULL;
1386− pr_err("Failed to alloc sess->max_pages_per_mr %d\n",
1387− sess->max_pages_per_mr);
1393+ pr_err("Failed to alloc clt_path->max_pages_per_mr %d\n",
1394+ clt_path->max_pages_per_mr);
13881395 goto out;
13891396 }
13901397
@@ -1394,12 +1401,12 @@ static int alloc_sess_reqs(struct rtrs_clt_sess *sess) · 3 unmodified lines
13941401 return 0;
13951402
13961403 out:
1397− free_sess_reqs(sess);
1404+ free_path_reqs(clt_path);
13981405
13991406 return err;
14001407 }
14011408
1402−static int alloc_permits(struct rtrs_clt *clt)
1409+static int alloc_permits(struct rtrs_clt_sess *clt)
14031410 {
14041411 unsigned int chunk_bits;
14051412 int err, i;
@@ -1433,7 +1440,7 @@ out_err: · 27 unmodified lines
14331440 return err;
14341441 }
14351442
1436−static void free_permits(struct rtrs_clt *clt)
1443+static void free_permits(struct rtrs_clt_sess *clt)
14371444 {
14381445 if (clt->permits_map) {
14391446 size_t sz = clt->queue_depth;
@@ -1447,13 +1454,13 @@ static void free_permits(struct rtrs_clt *clt) · 7 unmodified lines
14471454 clt->permits = NULL;
14481455 }
14491456
1450−static void query_fast_reg_mode(struct rtrs_clt_sess *sess)
1457+static void query_fast_reg_mode(struct rtrs_clt_path *clt_path)
14511458 {
14521459 struct ib_device *ib_dev;
14531460 u64 max_pages_per_mr;
14541461 int mr_page_shift;
14551462
1456− ib_dev = sess->s.dev->ib_dev;
1463+ ib_dev = clt_path->s.dev->ib_dev;
14571464
14581465 /*
14591466 * Use the smallest page size supported by the HCA, down to a
@@ -1463,24 +1470,24 @@ static void query_fast_reg_mode(struct rtrs_clt_sess *sess) · 3 unmodified lines
14631470 mr_page_shift = max(12, ffs(ib_dev->attrs.page_size_cap) - 1);
14641471 max_pages_per_mr = ib_dev->attrs.max_mr_size;
14651472 do_div(max_pages_per_mr, (1ull << mr_page_shift));
1466− sess->max_pages_per_mr =
1467− min3(sess->max_pages_per_mr, (u32)max_pages_per_mr,
1473+ clt_path->max_pages_per_mr =
1474+ min3(clt_path->max_pages_per_mr, (u32)max_pages_per_mr,
14681475 ib_dev->attrs.max_fast_reg_page_list_len);
1469− sess->clt->max_segments =
1470− min(sess->max_pages_per_mr, sess->clt->max_segments);
1476+ clt_path->clt->max_segments =
1477+ min(clt_path->max_pages_per_mr, clt_path->clt->max_segments);
14711478 }
14721479
1473−static bool rtrs_clt_change_state_get_old(struct rtrs_clt_sess *sess,
1480+static bool rtrs_clt_change_state_get_old(struct rtrs_clt_path *clt_path,
14741481 enum rtrs_clt_state new_state,
14751482 enum rtrs_clt_state *old_state)
14761483 {
14771484 bool changed;
14781485
1479− spin_lock_irq(&sess->state_wq.lock);
1486+ spin_lock_irq(&clt_path->state_wq.lock);
14801487 if (old_state)
1481− *old_state = sess->state;
1482− changed = rtrs_clt_change_state(sess, new_state);
1483− spin_unlock_irq(&sess->state_wq.lock);
1488+ *old_state = clt_path->state;
1489+ changed = rtrs_clt_change_state(clt_path, new_state);
1490+ spin_unlock_irq(&clt_path->state_wq.lock);
14841491
14851492 return changed;
14861493 }
@@ -1492,9 +1499,9 @@ static void rtrs_clt_hb_err_handler(struct rtrs_con *c) · 5 unmodified lines
14921499 rtrs_rdma_error_recovery(con);
14931500 }
14941501
1495−static void rtrs_clt_init_hb(struct rtrs_clt_sess *sess)
1502+static void rtrs_clt_init_hb(struct rtrs_clt_path *clt_path)
14961503 {
1497− rtrs_init_hb(&sess->s, &io_comp_cqe,
1504+ rtrs_init_hb(&clt_path->s, &io_comp_cqe,
14981505 RTRS_HB_INTERVAL_MS,
14991506 RTRS_HB_MISSED_MAX,
15001507 rtrs_clt_hb_err_handler,
@@ -1504,17 +1511,17 @@ static void rtrs_clt_init_hb(struct rtrs_clt_sess *sess) · 3 unmodified lines
15041511 static void rtrs_clt_reconnect_work(struct work_struct *work);
15051512 static void rtrs_clt_close_work(struct work_struct *work);
15061513
1507−static struct rtrs_clt_sess *alloc_sess(struct rtrs_clt *clt,
1514+static struct rtrs_clt_path *alloc_path(struct rtrs_clt_sess *clt,
15081515 const struct rtrs_addr *path,
15091516 size_t con_num, u32 nr_poll_queues)
15101517 {
1511− struct rtrs_clt_sess *sess;
1518+ struct rtrs_clt_path *clt_path;
15121519 int err = -ENOMEM;
15131520 int cpu;
15141521 size_t total_con;
15151522
1516− sess = kzalloc(sizeof(*sess), GFP_KERNEL);
1517− if (!sess)
1523+ clt_path = kzalloc(sizeof(*clt_path), GFP_KERNEL);
1524+ if (!clt_path)
15181525 goto err;
15191526
15201527 /*
@@ -1522,20 +1529,21 @@ static struct rtrs_clt_sess *alloc_sess(struct rtrs_clt *clt, · 1 unmodified line
15221529 * +1: Extra connection for user messages
15231530 */
15241531 total_con = con_num + nr_poll_queues + 1;
1525− sess->s.con = kcalloc(total_con, sizeof(*sess->s.con), GFP_KERNEL);
1526− if (!sess->s.con)
1527− goto err_free_sess;
1532+ clt_path->s.con = kcalloc(total_con, sizeof(*clt_path->s.con),
1533+ GFP_KERNEL);
1534+ if (!clt_path->s.con)
1535+ goto err_free_path;
15281536
1529− sess->s.con_num = total_con;
1530− sess->s.irq_con_num = con_num + 1;
1537+ clt_path->s.con_num = total_con;
1538+ clt_path->s.irq_con_num = con_num + 1;
15311539
1532− sess->stats = kzalloc(sizeof(*sess->stats), GFP_KERNEL);
1533− if (!sess->stats)
1540+ clt_path->stats = kzalloc(sizeof(*clt_path->stats), GFP_KERNEL);
1541+ if (!clt_path->stats)
15341542 goto err_free_con;
15351543
1536− mutex_init(&sess->init_mutex);
1537− uuid_gen(&sess->s.uuid);
1538− memcpy(&sess->s.dst_addr, path->dst,
1544+ mutex_init(&clt_path->init_mutex);
1545+ uuid_gen(&clt_path->s.uuid);
1546+ memcpy(&clt_path->s.dst_addr, path->dst,
15391547 rdma_addr_size((struct sockaddr *)path->dst));
15401548
15411549 /*
@@ -1544,53 +1552,54 @@ static struct rtrs_clt_sess *alloc_sess(struct rtrs_clt *clt, · 2 unmodified lines
15441552 * the sess->src_addr will contain only zeros, which is then fine.
15451553 */
15461554 if (path->src)
1547− memcpy(&sess->s.src_addr, path->src,
1555+ memcpy(&clt_path->s.src_addr, path->src,
15481556 rdma_addr_size((struct sockaddr *)path->src));
1549− strscpy(sess->s.sessname, clt->sessname, sizeof(sess->s.sessname));
1550− sess->clt = clt;
1551− sess->max_pages_per_mr = RTRS_MAX_SEGMENTS;
1552− init_waitqueue_head(&sess->state_wq);
1553− sess->state = RTRS_CLT_CONNECTING;
1554− atomic_set(&sess->connected_cnt, 0);
1555− INIT_WORK(&sess->close_work, rtrs_clt_close_work);
1556− INIT_DELAYED_WORK(&sess->reconnect_dwork, rtrs_clt_reconnect_work);
1557− rtrs_clt_init_hb(sess);
1558−
1559− sess->mp_skip_entry = alloc_percpu(typeof(*sess->mp_skip_entry));
1560− if (!sess->mp_skip_entry)
1557+ strscpy(clt_path->s.sessname, clt->sessname,
1558+ sizeof(clt_path->s.sessname));
1559+ clt_path->clt = clt;
1560+ clt_path->max_pages_per_mr = RTRS_MAX_SEGMENTS;
1561+ init_waitqueue_head(&clt_path->state_wq);
1562+ clt_path->state = RTRS_CLT_CONNECTING;
1563+ atomic_set(&clt_path->connected_cnt, 0);
1564+ INIT_WORK(&clt_path->close_work, rtrs_clt_close_work);
1565+ INIT_DELAYED_WORK(&clt_path->reconnect_dwork, rtrs_clt_reconnect_work);
1566+ rtrs_clt_init_hb(clt_path);
1567+
1568+ clt_path->mp_skip_entry = alloc_percpu(typeof(*clt_path->mp_skip_entry));
1569+ if (!clt_path->mp_skip_entry)
15611570 goto err_free_stats;
15621571
15631572 for_each_possible_cpu(cpu)
1564− INIT_LIST_HEAD(per_cpu_ptr(sess->mp_skip_entry, cpu));
1573+ INIT_LIST_HEAD(per_cpu_ptr(clt_path->mp_skip_entry, cpu));
15651574
1566− err = rtrs_clt_init_stats(sess->stats);
1575+ err = rtrs_clt_init_stats(clt_path->stats);
15671576 if (err)
15681577 goto err_free_percpu;
15691578
1570− return sess;
1579+ return clt_path;
15711580
15721581 err_free_percpu:
1573− free_percpu(sess->mp_skip_entry);
1582+ free_percpu(clt_path->mp_skip_entry);
15741583 err_free_stats:
1575− kfree(sess->stats);
1584+ kfree(clt_path->stats);
15761585 err_free_con:
1577− kfree(sess->s.con);
1578−err_free_sess:
1579− kfree(sess);
1586+ kfree(clt_path->s.con);
1587+err_free_path:
1588+ kfree(clt_path);
15801589 err:
15811590 return ERR_PTR(err);
15821591 }
15831592
1584−void free_sess(struct rtrs_clt_sess *sess)
1593+void free_path(struct rtrs_clt_path *clt_path)
15851594 {
1586− free_percpu(sess->mp_skip_entry);
1587− mutex_destroy(&sess->init_mutex);
1588− kfree(sess->s.con);
1589− kfree(sess->rbufs);
1590− kfree(sess);
1595+ free_percpu(clt_path->mp_skip_entry);
1596+ mutex_destroy(&clt_path->init_mutex);
1597+ kfree(clt_path->s.con);
1598+ kfree(clt_path->rbufs);
1599+ kfree(clt_path);
15911600 }
15921601
1593−static int create_con(struct rtrs_clt_sess *sess, unsigned int cid)
1602+static int create_con(struct rtrs_clt_path *clt_path, unsigned int cid)
15941603 {
15951604 struct rtrs_clt_con *con;
15961605
@@ -1601,28 +1610,28 @@ static int create_con(struct rtrs_clt_sess *sess, unsigned int cid) · 4 unmodified lines
16011610 /* Map first two connections to the first CPU */
16021611 con->cpu = (cid ? cid - 1 : 0) % nr_cpu_ids;
16031612 con->c.cid = cid;
1604− con->c.sess = &sess->s;
1613+ con->c.path = &clt_path->s;
16051614 /* Align with srv, init as 1 */
16061615 atomic_set(&con->c.wr_cnt, 1);
16071616 mutex_init(&con->con_mutex);
16081617
1609− sess->s.con[cid] = &con->c;
1618+ clt_path->s.con[cid] = &con->c;
16101619
16111620 return 0;
16121621 }
16131622
16141623 static void destroy_con(struct rtrs_clt_con *con)
16151624 {
1616− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
1625+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
16171626
1618− sess->s.con[con->c.cid] = NULL;
1627+ clt_path->s.con[con->c.cid] = NULL;
16191628 mutex_destroy(&con->con_mutex);
16201629 kfree(con);
16211630 }
16221631
16231632 static int create_con_cq_qp(struct rtrs_clt_con *con)
16241633 {
1625− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
1634+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
16261635 u32 max_send_wr, max_recv_wr, cq_num, max_send_sge, wr_limit;
16271636 int err, cq_vector;
16281637 struct rtrs_msg_rkey_rsp *rsp;
@@ -1631,7 +1640,7 @@ static int create_con_cq_qp(struct rtrs_clt_con *con) · 2 unmodified lines
16311640 if (con->c.cid == 0) {
16321641 max_send_sge = 1;
16331642 /* We must be the first here */
1634− if (WARN_ON(sess->s.dev))
1643+ if (WARN_ON(clt_path->s.dev))
16351644 return -EINVAL;
16361645
16371646 /*
@@ -1639,16 +1648,16 @@ static int create_con_cq_qp(struct rtrs_clt_con *con) · 1 unmodified line
16391648 * Be careful not to close user connection before ib dev
16401649 * is gracefully put.
16411650 */
1642− sess->s.dev = rtrs_ib_dev_find_or_add(con->c.cm_id->device,
1651+ clt_path->s.dev = rtrs_ib_dev_find_or_add(con->c.cm_id->device,
16431652 &dev_pd);
1644− if (!sess->s.dev) {
1645− rtrs_wrn(sess->clt,
1653+ if (!clt_path->s.dev) {
1654+ rtrs_wrn(clt_path->clt,
16461655 "rtrs_ib_dev_find_get_or_add(): no memory\n");
16471656 return -ENOMEM;
16481657 }
1649− sess->s.dev_ref = 1;
1650− query_fast_reg_mode(sess);
1651− wr_limit = sess->s.dev->ib_dev->attrs.max_qp_wr;
1658+ clt_path->s.dev_ref = 1;
1659+ query_fast_reg_mode(clt_path);
1660+ wr_limit = clt_path->s.dev->ib_dev->attrs.max_qp_wr;
16521661 /*
16531662 * Two (request + registration) completion for send
16541663 * Two for recv if always_invalidate is set on server
@@ -1665,27 +1674,28 @@ static int create_con_cq_qp(struct rtrs_clt_con *con) · 10 unmodified lines
16651674 * This is always true if user connection (cid == 0) is
16661675 * established first.
16671676 */
1668− if (WARN_ON(!sess->s.dev))
1677+ if (WARN_ON(!clt_path->s.dev))
16691678 return -EINVAL;
1670− if (WARN_ON(!sess->queue_depth))
1679+ if (WARN_ON(!clt_path->queue_depth))
16711680 return -EINVAL;
16721681
1673− wr_limit = sess->s.dev->ib_dev->attrs.max_qp_wr;
1682+ wr_limit = clt_path->s.dev->ib_dev->attrs.max_qp_wr;
16741683 /* Shared between connections */
1675− sess->s.dev_ref++;
1684+ clt_path->s.dev_ref++;
16761685 max_send_wr = min_t(int, wr_limit,
16771686 /* QD * (REQ + RSP + FR REGS or INVS) + drain */
1678− sess->queue_depth * 3 + 1);
1687+ clt_path->queue_depth * 3 + 1);
16791688 max_recv_wr = min_t(int, wr_limit,
1680− sess->queue_depth * 3 + 1);
1689+ clt_path->queue_depth * 3 + 1);
16811690 max_send_sge = 2;
16821691 }
16831692 atomic_set(&con->c.sq_wr_avail, max_send_wr);
16841693 cq_num = max_send_wr + max_recv_wr;
16851694 /* alloc iu to recv new rkey reply when server reports flags set */
1686− if (sess->flags & RTRS_MSG_NEW_RKEY_F || con->c.cid == 0) {
1695+ if (clt_path->flags & RTRS_MSG_NEW_RKEY_F || con->c.cid == 0) {
16871696 con->rsp_ius = rtrs_iu_alloc(cq_num, sizeof(*rsp),
1688− GFP_KERNEL, sess->s.dev->ib_dev,
1697+ GFP_KERNEL,
1698+ clt_path->s.dev->ib_dev,
16891699 DMA_FROM_DEVICE,
16901700 rtrs_clt_rdma_done);
16911701 if (!con->rsp_ius)
@@ -1693,13 +1703,13 @@ static int create_con_cq_qp(struct rtrs_clt_con *con) · 1 unmodified line
16931703 con->queue_num = cq_num;
16941704 }
16951705 cq_num = max_send_wr + max_recv_wr;
1696− cq_vector = con->cpu % sess->s.dev->ib_dev->num_comp_vectors;
1697− if (con->c.cid >= sess->s.irq_con_num)
1698− err = rtrs_cq_qp_create(&sess->s, &con->c, max_send_sge,
1706+ cq_vector = con->cpu % clt_path->s.dev->ib_dev->num_comp_vectors;
1707+ if (con->c.cid >= clt_path->s.irq_con_num)
1708+ err = rtrs_cq_qp_create(&clt_path->s, &con->c, max_send_sge,
16991709 cq_vector, cq_num, max_send_wr,
17001710 max_recv_wr, IB_POLL_DIRECT);
17011711 else
1702− err = rtrs_cq_qp_create(&sess->s, &con->c, max_send_sge,
1712+ err = rtrs_cq_qp_create(&clt_path->s, &con->c, max_send_sge,
17031713 cq_vector, cq_num, max_send_wr,
17041714 max_recv_wr, IB_POLL_SOFTIRQ);
17051715 /*
@@ -1711,7 +1721,7 @@ static int create_con_cq_qp(struct rtrs_clt_con *con) · 5 unmodified lines
17111721
17121722 static void destroy_con_cq_qp(struct rtrs_clt_con *con)
17131723 {
1714− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
1724+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
17151725
17161726 /*
17171727 * Be careful here: destroy_con_cq_qp() can be called even
@@ -1720,13 +1730,14 @@ static void destroy_con_cq_qp(struct rtrs_clt_con *con) · 2 unmodified lines
17201730 lockdep_assert_held(&con->con_mutex);
17211731 rtrs_cq_qp_destroy(&con->c);
17221732 if (con->rsp_ius) {
1723− rtrs_iu_free(con->rsp_ius, sess->s.dev->ib_dev, con->queue_num);
1733+ rtrs_iu_free(con->rsp_ius, clt_path->s.dev->ib_dev,
1734+ con->queue_num);
17241735 con->rsp_ius = NULL;
17251736 con->queue_num = 0;
17261737 }
1727− if (sess->s.dev_ref && !--sess->s.dev_ref) {
1728− rtrs_ib_dev_put(sess->s.dev);
1729− sess->s.dev = NULL;
1738+ if (clt_path->s.dev_ref && !--clt_path->s.dev_ref) {
1739+ rtrs_ib_dev_put(clt_path->s.dev);
1740+ clt_path->s.dev = NULL;
17301741 }
17311742 }
17321743
@@ -1745,7 +1756,7 @@ static void destroy_cm(struct rtrs_clt_con *con) · 12 unmodified lines
17451756
17461757 static int rtrs_rdma_addr_resolved(struct rtrs_clt_con *con)
17471758 {
1748− struct rtrs_sess *s = con->c.sess;
1759+ struct rtrs_path *s = con->c.path;
17491760 int err;
17501761
17511762 mutex_lock(&con->con_mutex);
@@ -1764,8 +1775,8 @@ static int rtrs_rdma_addr_resolved(struct rtrs_clt_con *con) · 12 unmodified lines
17641775
17651776 static int rtrs_rdma_route_resolved(struct rtrs_clt_con *con)
17661777 {
1767− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
1768− struct rtrs_clt *clt = sess->clt;
1778+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
1779+ struct rtrs_clt_sess *clt = clt_path->clt;
17691780 struct rtrs_msg_conn_req msg;
17701781 struct rdma_conn_param param;
17711782
@@ -1782,11 +1793,11 @@ static int rtrs_rdma_route_resolved(struct rtrs_clt_con *con) · 10 unmodified lines
17821793 .magic = cpu_to_le16(RTRS_MAGIC),
17831794 .version = cpu_to_le16(RTRS_PROTO_VER),
17841795 .cid = cpu_to_le16(con->c.cid),
1785− .cid_num = cpu_to_le16(sess->s.con_num),
1786− .recon_cnt = cpu_to_le16(sess->s.recon_cnt),
1796+ .cid_num = cpu_to_le16(clt_path->s.con_num),
1797+ .recon_cnt = cpu_to_le16(clt_path->s.recon_cnt),
17871798 };
1788− msg.first_conn = sess->for_new_clt ? FIRST_CONN : 0;
1789− uuid_copy(&msg.sess_uuid, &sess->s.uuid);
1799+ msg.first_conn = clt_path->for_new_clt ? FIRST_CONN : 0;
1800+ uuid_copy(&msg.sess_uuid, &clt_path->s.uuid);
17901801 uuid_copy(&msg.paths_uuid, &clt->paths_uuid);
17911802
17921803 err = rdma_connect_locked(con->c.cm_id, &param);
@@ -1799,8 +1810,8 @@ static int rtrs_rdma_route_resolved(struct rtrs_clt_con *con) · 6 unmodified lines
17991810 static int rtrs_rdma_conn_established(struct rtrs_clt_con *con,
18001811 struct rdma_cm_event *ev)
18011812 {
1802− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
1803− struct rtrs_clt *clt = sess->clt;
1813+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
1814+ struct rtrs_clt_sess *clt = clt_path->clt;
18041815 const struct rtrs_msg_conn_rsp *msg;
18051816 u16 version, queue_depth;
18061817 int errno;
@@ -1831,31 +1842,32 @@ static int rtrs_rdma_conn_established(struct rtrs_clt_con *con, · 24 unmodified lines
18311842 if (con->c.cid == 0) {
18321843 queue_depth = le16_to_cpu(msg->queue_depth);
18331844
1834− if (sess->queue_depth > 0 && queue_depth != sess->queue_depth) {
1845+ if (clt_path->queue_depth > 0 && queue_depth != clt_path->queue_depth) {
18351846 rtrs_err(clt, "Error: queue depth changed\n");
18361847
18371848 /*
18381849 * Stop any more reconnection attempts
18391850 */
1840− sess->reconnect_attempts = -1;
1851+ clt_path->reconnect_attempts = -1;
18411852 rtrs_err(clt,
18421853 "Disabling auto-reconnect. Trigger a manual reconnect after issue is resolved\n");
18431854 return -ECONNRESET;
18441855 }
18451856
1846− if (!sess->rbufs) {
1847− sess->rbufs = kcalloc(queue_depth, sizeof(*sess->rbufs),
1848− GFP_KERNEL);
1849− if (!sess->rbufs)
1857+ if (!clt_path->rbufs) {
1858+ clt_path->rbufs = kcalloc(queue_depth,
1859+ sizeof(*clt_path->rbufs),
1860+ GFP_KERNEL);
1861+ if (!clt_path->rbufs)
18501862 return -ENOMEM;
18511863 }
1852− sess->queue_depth = queue_depth;
1853− sess->s.signal_interval = min_not_zero(queue_depth,
1864+ clt_path->queue_depth = queue_depth;
1865+ clt_path->s.signal_interval = min_not_zero(queue_depth,
18541866 (unsigned short) SERVICE_CON_QUEUE_DEPTH);
1855− sess->max_hdr_size = le32_to_cpu(msg->max_hdr_size);
1856− sess->max_io_size = le32_to_cpu(msg->max_io_size);
1857− sess->flags = le32_to_cpu(msg->flags);
1858− sess->chunk_size = sess->max_io_size + sess->max_hdr_size;
1867+ clt_path->max_hdr_size = le32_to_cpu(msg->max_hdr_size);
1868+ clt_path->max_io_size = le32_to_cpu(msg->max_io_size);
1869+ clt_path->flags = le32_to_cpu(msg->flags);
1870+ clt_path->chunk_size = clt_path->max_io_size + clt_path->max_hdr_size;
18591871
18601872 /*
18611873 * Global IO size is always a minimum.
@@ -1866,20 +1878,20 @@ static int rtrs_rdma_conn_established(struct rtrs_clt_con *con, · 4 unmodified lines
18661878 * connections in parallel, use lock.
18671879 */
18681880 mutex_lock(&clt->paths_mutex);
1869− clt->queue_depth = sess->queue_depth;
1870− clt->max_io_size = min_not_zero(sess->max_io_size,
1881+ clt->queue_depth = clt_path->queue_depth;
1882+ clt->max_io_size = min_not_zero(clt_path->max_io_size,
18711883 clt->max_io_size);
18721884 mutex_unlock(&clt->paths_mutex);
18731885
18741886 /*
18751887 * Cache the hca_port and hca_name for sysfs
18761888 */
1877− sess->hca_port = con->c.cm_id->port_num;
1878− scnprintf(sess->hca_name, sizeof(sess->hca_name),
1879− sess->s.dev->ib_dev->name);
1880− sess->s.src_addr = con->c.cm_id->route.addr.src_addr;
1889+ clt_path->hca_port = con->c.cm_id->port_num;
1890+ scnprintf(clt_path->hca_name, sizeof(clt_path->hca_name),
1891+ clt_path->s.dev->ib_dev->name);
1892+ clt_path->s.src_addr = con->c.cm_id->route.addr.src_addr;
18811893 /* set for_new_clt, to allow future reconnect on any path */
1882− sess->for_new_clt = 1;
1894+ clt_path->for_new_clt = 1;
18831895 }
18841896
18851897 return 0;
@@ -1887,16 +1899,16 @@ static int rtrs_rdma_conn_established(struct rtrs_clt_con *con, · 1 unmodified line
18871899
18881900 static inline void flag_success_on_conn(struct rtrs_clt_con *con)
18891901 {
1890− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
1902+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
18911903
1892− atomic_inc(&sess->connected_cnt);
1904+ atomic_inc(&clt_path->connected_cnt);
18931905 con->cm_err = 1;
18941906 }
18951907
18961908 static int rtrs_rdma_conn_rejected(struct rtrs_clt_con *con,
18971909 struct rdma_cm_event *ev)
18981910 {
1899− struct rtrs_sess *s = con->c.sess;
1911+ struct rtrs_path *s = con->c.path;
19001912 const struct rtrs_msg_conn_rsp *msg;
19011913 const char *rej_msg;
19021914 int status, errno;
@@ -1924,23 +1936,23 @@ static int rtrs_rdma_conn_rejected(struct rtrs_clt_con *con, · 21 unmodified lines
19241936 return -ECONNRESET;
19251937 }
19261938
1927−void rtrs_clt_close_conns(struct rtrs_clt_sess *sess, bool wait)
1939+void rtrs_clt_close_conns(struct rtrs_clt_path *clt_path, bool wait)
19281940 {
1929− if (rtrs_clt_change_state_get_old(sess, RTRS_CLT_CLOSING, NULL))
1930− queue_work(rtrs_wq, &sess->close_work);
1941+ if (rtrs_clt_change_state_get_old(clt_path, RTRS_CLT_CLOSING, NULL))
1942+ queue_work(rtrs_wq, &clt_path->close_work);
19311943 if (wait)
1932− flush_work(&sess->close_work);
1944+ flush_work(&clt_path->close_work);
19331945 }
19341946
19351947 static inline void flag_error_on_conn(struct rtrs_clt_con *con, int cm_err)
19361948 {
19371949 if (con->cm_err == 1) {
1938− struct rtrs_clt_sess *sess;
1950+ struct rtrs_clt_path *clt_path;
19391951
1940− sess = to_clt_sess(con->c.sess);
1941− if (atomic_dec_and_test(&sess->connected_cnt))
1952+ clt_path = to_clt_path(con->c.path);
1953+ if (atomic_dec_and_test(&clt_path->connected_cnt))
19421954
1943− wake_up(&sess->state_wq);
1955+ wake_up(&clt_path->state_wq);
19441956 }
19451957 con->cm_err = cm_err;
19461958 }
@@ -1949,8 +1961,8 @@ static int rtrs_clt_rdma_cm_handler(struct rdma_cm_id *cm_id, · 2 unmodified lines
19491961 struct rdma_cm_event *ev)
19501962 {
19511963 struct rtrs_clt_con *con = cm_id->context;
1952− struct rtrs_sess *s = con->c.sess;
1953− struct rtrs_clt_sess *sess = to_clt_sess(s);
1964+ struct rtrs_path *s = con->c.path;
1965+ struct rtrs_clt_path *clt_path = to_clt_path(s);
19541966 int cm_err = 0;
19551967
19561968 switch (ev->event) {
@@ -1968,7 +1980,7 @@ static int rtrs_clt_rdma_cm_handler(struct rdma_cm_id *cm_id, · 11 unmodified lines
19681980 * i.e. wake up without state change, but we set cm_err.
19691981 */
19701982 flag_success_on_conn(con);
1971− wake_up(&sess->state_wq);
1983+ wake_up(&clt_path->state_wq);
19721984 return 0;
19731985 }
19741986 break;
@@ -1997,7 +2009,7 @@ static int rtrs_clt_rdma_cm_handler(struct rdma_cm_id *cm_id, · 22 unmodified lines
19972009 /*
19982010 * Device removal is a special case. Queue close and return 0.
19992011 */
2000− rtrs_clt_close_conns(sess, false);
2012+ rtrs_clt_close_conns(clt_path, false);
20012013 return 0;
20022014 default:
20032015 rtrs_err(s, "Unexpected RDMA CM error (CM event: %s, err: %d)\n",
@@ -2020,13 +2032,13 @@ static int rtrs_clt_rdma_cm_handler(struct rdma_cm_id *cm_id, · 16 unmodified lines
20202032
20212033 static int create_cm(struct rtrs_clt_con *con)
20222034 {
2023− struct rtrs_sess *s = con->c.sess;
2024− struct rtrs_clt_sess *sess = to_clt_sess(s);
2035+ struct rtrs_path *s = con->c.path;
2036+ struct rtrs_clt_path *clt_path = to_clt_path(s);
20252037 struct rdma_cm_id *cm_id;
20262038 int err;
20272039
20282040 cm_id = rdma_create_id(&init_net, rtrs_clt_rdma_cm_handler, con,
2029− sess->s.dst_addr.ss_family == AF_IB ?
2041+ clt_path->s.dst_addr.ss_family == AF_IB ?
20302042 RDMA_PS_IB : RDMA_PS_TCP, IB_QPT_RC);
20312043 if (IS_ERR(cm_id)) {
20322044 err = PTR_ERR(cm_id);
@@ -2042,8 +2054,8 @@ static int create_cm(struct rtrs_clt_con *con) · 9 unmodified lines
20422054 rtrs_err(s, "Set address reuse failed, err: %d\n", err);
20432055 goto destroy_cm;
20442056 }
2045− err = rdma_resolve_addr(cm_id, (struct sockaddr *)&sess->s.src_addr,
2046− (struct sockaddr *)&sess->s.dst_addr,
2057+ err = rdma_resolve_addr(cm_id, (struct sockaddr *)&clt_path->s.src_addr,
2058+ (struct sockaddr *)&clt_path->s.dst_addr,
20472059 RTRS_CONNECT_TIMEOUT_MS);
20482060 if (err) {
20492061 rtrs_err(s, "Failed to resolve address, err: %d\n", err);
@@ -2055,8 +2067,8 @@ static int create_cm(struct rtrs_clt_con *con) · 5 unmodified lines
20552067 * or session state was really changed to error by device removal.
20562068 */
20572069 err = wait_event_interruptible_timeout(
2058− sess->state_wq,
2059− con->cm_err || sess->state != RTRS_CLT_CONNECTING,
2070+ clt_path->state_wq,
2071+ con->cm_err || clt_path->state != RTRS_CLT_CONNECTING,
20602072 msecs_to_jiffies(RTRS_CONNECT_TIMEOUT_MS));
20612073 if (err == 0 || err == -ERESTARTSYS) {
20622074 if (err == 0)
@@ -2068,7 +2080,7 @@ static int create_cm(struct rtrs_clt_con *con) · 5 unmodified lines
20682080 err = con->cm_err;
20692081 goto errr;
20702082 }
2071− if (READ_ONCE(sess->state) != RTRS_CLT_CONNECTING) {
2083+ if (READ_ONCE(clt_path->state) != RTRS_CLT_CONNECTING) {
20722084 /* Device removal */
20732085 err = -ECONNABORTED;
20742086 goto errr;
@@ -2087,9 +2099,9 @@ destroy_cm: · 12 unmodified lines
20872099 return err;
20882100 }
20892101
2090−static void rtrs_clt_sess_up(struct rtrs_clt_sess *sess)
2102+static void rtrs_clt_path_up(struct rtrs_clt_path *clt_path)
20912103 {
2092− struct rtrs_clt *clt = sess->clt;
2104+ struct rtrs_clt_sess *clt = clt_path->clt;
20932105 int up;
20942106
20952107 /*
@@ -2113,19 +2125,19 @@ static void rtrs_clt_sess_up(struct rtrs_clt_sess *sess) · 17 unmodified lines
21132125 mutex_unlock(&clt->paths_ev_mutex);
21142126
21152127 /* Mark session as established */
2116− sess->established = true;
2117− sess->reconnect_attempts = 0;
2118− sess->stats->reconnects.successful_cnt++;
2128+ clt_path->established = true;
2129+ clt_path->reconnect_attempts = 0;
2130+ clt_path->stats->reconnects.successful_cnt++;
21192131 }
21202132
2121−static void rtrs_clt_sess_down(struct rtrs_clt_sess *sess)
2133+static void rtrs_clt_path_down(struct rtrs_clt_path *clt_path)
21222134 {
2123− struct rtrs_clt *clt = sess->clt;
2135+ struct rtrs_clt_sess *clt = clt_path->clt;
21242136
2125− if (!sess->established)
2137+ if (!clt_path->established)
21262138 return;
21272139
2128− sess->established = false;
2140+ clt_path->established = false;
21292141 mutex_lock(&clt->paths_ev_mutex);
21302142 WARN_ON(!clt->paths_up);
21312143 if (--clt->paths_up == 0)
@@ -2133,19 +2145,19 @@ static void rtrs_clt_sess_down(struct rtrs_clt_sess *sess) · 1 unmodified line
21332145 mutex_unlock(&clt->paths_ev_mutex);
21342146 }
21352147
2136−static void rtrs_clt_stop_and_destroy_conns(struct rtrs_clt_sess *sess)
2148+static void rtrs_clt_stop_and_destroy_conns(struct rtrs_clt_path *clt_path)
21372149 {
21382150 struct rtrs_clt_con *con;
21392151 unsigned int cid;
21402152
2141− WARN_ON(READ_ONCE(sess->state) == RTRS_CLT_CONNECTED);
2153+ WARN_ON(READ_ONCE(clt_path->state) == RTRS_CLT_CONNECTED);
21422154
21432155 /*
21442156 * Possible race with rtrs_clt_open(), when DEVICE_REMOVAL comes
21452157 * exactly in between. Start destroying after it finishes.
21462158 */
2147− mutex_lock(&sess->init_mutex);
2148− mutex_unlock(&sess->init_mutex);
2159+ mutex_lock(&clt_path->init_mutex);
2160+ mutex_unlock(&clt_path->init_mutex);
21492161
21502162 /*
21512163 * All IO paths must observe !CONNECTED state before we
@@ -2153,7 +2165,7 @@ static void rtrs_clt_stop_and_destroy_conns(struct rtrs_clt_sess *sess) · 1 unmodified line
21532165 */
21542166 synchronize_rcu();
21552167
2156− rtrs_stop_hb(&sess->s);
2168+ rtrs_stop_hb(&clt_path->s);
21572169
21582170 /*
21592171 * The order it utterly crucial: firstly disconnect and complete all
@@ -2162,15 +2174,15 @@ static void rtrs_clt_stop_and_destroy_conns(struct rtrs_clt_sess *sess) · 2 unmodified lines
21622174 * eventually notify upper layer about session disconnection.
21632175 */
21642176
2165− for (cid = 0; cid < sess->s.con_num; cid++) {
2166− if (!sess->s.con[cid])
2177+ for (cid = 0; cid < clt_path->s.con_num; cid++) {
2178+ if (!clt_path->s.con[cid])
21672179 break;
2168− con = to_clt_con(sess->s.con[cid]);
2180+ con = to_clt_con(clt_path->s.con[cid]);
21692181 stop_cm(con);
21702182 }
2171− fail_all_outstanding_reqs(sess);
2172− free_sess_reqs(sess);
2173− rtrs_clt_sess_down(sess);
2183+ fail_all_outstanding_reqs(clt_path);
2184+ free_path_reqs(clt_path);
2185+ rtrs_clt_path_down(clt_path);
21742186
21752187 /*
21762188 * Wait for graceful shutdown, namely when peer side invokes
@@ -2180,13 +2192,14 @@ static void rtrs_clt_stop_and_destroy_conns(struct rtrs_clt_sess *sess) · 3 unmodified lines
21802192 * since CM does not fire anything. That is fine, we are not in
21812193 * hurry.
21822194 */
2183− wait_event_timeout(sess->state_wq, !atomic_read(&sess->connected_cnt),
2195+ wait_event_timeout(clt_path->state_wq,
2196+ !atomic_read(&clt_path->connected_cnt),
21842197 msecs_to_jiffies(RTRS_CONNECT_TIMEOUT_MS));
21852198
2186− for (cid = 0; cid < sess->s.con_num; cid++) {
2187− if (!sess->s.con[cid])
2199+ for (cid = 0; cid < clt_path->s.con_num; cid++) {
2200+ if (!clt_path->s.con[cid])
21882201 break;
2189− con = to_clt_con(sess->s.con[cid]);
2202+ con = to_clt_con(clt_path->s.con[cid]);
21902203 mutex_lock(&con->con_mutex);
21912204 destroy_con_cq_qp(con);
21922205 mutex_unlock(&con->con_mutex);
@@ -2195,26 +2208,26 @@ static void rtrs_clt_stop_and_destroy_conns(struct rtrs_clt_sess *sess) · 2 unmodified lines
21952208 }
21962209 }
21972210
2198−static inline bool xchg_sessions(struct rtrs_clt_sess __rcu **rcu_ppcpu_path,
2199− struct rtrs_clt_sess *sess,
2200− struct rtrs_clt_sess *next)
2211+static inline bool xchg_paths(struct rtrs_clt_path __rcu **rcu_ppcpu_path,
2212+ struct rtrs_clt_path *clt_path,
2213+ struct rtrs_clt_path *next)
22012214 {
2202− struct rtrs_clt_sess **ppcpu_path;
2215+ struct rtrs_clt_path **ppcpu_path;
22032216
22042217 /* Call cmpxchg() without sparse warnings */
22052218 ppcpu_path = (typeof(ppcpu_path))rcu_ppcpu_path;
2206− return sess == cmpxchg(ppcpu_path, sess, next);
2219+ return clt_path == cmpxchg(ppcpu_path, clt_path, next);
22072220 }
22082221
2209−static void rtrs_clt_remove_path_from_arr(struct rtrs_clt_sess *sess)
2222+static void rtrs_clt_remove_path_from_arr(struct rtrs_clt_path *clt_path)
22102223 {
2211− struct rtrs_clt *clt = sess->clt;
2212− struct rtrs_clt_sess *next;
2224+ struct rtrs_clt_sess *clt = clt_path->clt;
2225+ struct rtrs_clt_path *next;
22132226 bool wait_for_grace = false;
22142227 int cpu;
22152228
22162229 mutex_lock(&clt->paths_mutex);
2217− list_del_rcu(&sess->s.entry);
2230+ list_del_rcu(&clt_path->s.entry);
22182231
22192232 /* Make sure everybody observes path removal. */
22202233 synchronize_rcu();
@@ -2255,7 +2268,7 @@ static void rtrs_clt_remove_path_from_arr(struct rtrs_clt_sess *sess) · 34 unmodified lines
22552268 * removed. If @sess is the last element, then @next is NULL.
22562269 */
22572270 rcu_read_lock();
2258− next = list_next_or_null_rr_rcu(&clt->paths_list, &sess->s.entry,
2271+ next = list_next_or_null_rr_rcu(&clt->paths_list, &clt_path->s.entry,
22592272 typeof(*next), s.entry);
22602273 rcu_read_unlock();
22612274
@@ -2264,11 +2277,11 @@ static void rtrs_clt_remove_path_from_arr(struct rtrs_clt_sess *sess) · 2 unmodified lines
22642277 * removed, so change the pointer manually.
22652278 */
22662279 for_each_possible_cpu(cpu) {
2267− struct rtrs_clt_sess __rcu **ppcpu_path;
2280+ struct rtrs_clt_path __rcu **ppcpu_path;
22682281
22692282 ppcpu_path = per_cpu_ptr(clt->pcpu_path, cpu);
22702283 if (rcu_dereference_protected(*ppcpu_path,
2271− lockdep_is_held(&clt->paths_mutex)) != sess)
2284+ lockdep_is_held(&clt->paths_mutex)) != clt_path)
22722285 /*
22732286 * synchronize_rcu() was called just after deleting
22742287 * entry from the list, thus IO code path cannot
@@ -2281,7 +2294,7 @@ static void rtrs_clt_remove_path_from_arr(struct rtrs_clt_sess *sess) · 6 unmodified lines
22812294 * We race with IO code path, which also changes pointer,
22822295 * thus we have to be careful not to overwrite it.
22832296 */
2284− if (xchg_sessions(ppcpu_path, sess, next))
2297+ if (xchg_paths(ppcpu_path, clt_path, next))
22852298 /*
22862299 * @ppcpu_path was successfully replaced with @next,
22872300 * that means that someone could also pick up the
@@ -2296,29 +2309,29 @@ static void rtrs_clt_remove_path_from_arr(struct rtrs_clt_sess *sess) · 8 unmodified lines
22962309 mutex_unlock(&clt->paths_mutex);
22972310 }
22982311
2299−static void rtrs_clt_add_path_to_arr(struct rtrs_clt_sess *sess)
2312+static void rtrs_clt_add_path_to_arr(struct rtrs_clt_path *clt_path)
23002313 {
2301− struct rtrs_clt *clt = sess->clt;
2314+ struct rtrs_clt_sess *clt = clt_path->clt;
23022315
23032316 mutex_lock(&clt->paths_mutex);
23042317 clt->paths_num++;
23052318
2306− list_add_tail_rcu(&sess->s.entry, &clt->paths_list);
2319+ list_add_tail_rcu(&clt_path->s.entry, &clt->paths_list);
23072320 mutex_unlock(&clt->paths_mutex);
23082321 }
23092322
23102323 static void rtrs_clt_close_work(struct work_struct *work)
23112324 {
2312− struct rtrs_clt_sess *sess;
2325+ struct rtrs_clt_path *clt_path;
23132326
2314− sess = container_of(work, struct rtrs_clt_sess, close_work);
2327+ clt_path = container_of(work, struct rtrs_clt_path, close_work);
23152328
2316− cancel_delayed_work_sync(&sess->reconnect_dwork);
2317− rtrs_clt_stop_and_destroy_conns(sess);
2318− rtrs_clt_change_state_get_old(sess, RTRS_CLT_CLOSED, NULL);
2329+ cancel_delayed_work_sync(&clt_path->reconnect_dwork);
2330+ rtrs_clt_stop_and_destroy_conns(clt_path);
2331+ rtrs_clt_change_state_get_old(clt_path, RTRS_CLT_CLOSED, NULL);
23192332 }
23202333
2321−static int init_conns(struct rtrs_clt_sess *sess)
2334+static int init_conns(struct rtrs_clt_path *clt_path)
23222335 {
23232336 unsigned int cid;
23242337 int err;
@@ -2328,31 +2341,31 @@ static int init_conns(struct rtrs_clt_sess *sess) · 3 unmodified lines
23282341 * to avoid clashes with previous sessions not yet closed
23292342 * sessions on a server side.
23302343 */
2331− sess->s.recon_cnt++;
2344+ clt_path->s.recon_cnt++;
23322345
23332346 /* Establish all RDMA connections */
2334− for (cid = 0; cid < sess->s.con_num; cid++) {
2335− err = create_con(sess, cid);
2347+ for (cid = 0; cid < clt_path->s.con_num; cid++) {
2348+ err = create_con(clt_path, cid);
23362349 if (err)
23372350 goto destroy;
23382351
2339− err = create_cm(to_clt_con(sess->s.con[cid]));
2352+ err = create_cm(to_clt_con(clt_path->s.con[cid]));
23402353 if (err) {
2341− destroy_con(to_clt_con(sess->s.con[cid]));
2354+ destroy_con(to_clt_con(clt_path->s.con[cid]));
23422355 goto destroy;
23432356 }
23442357 }
2345− err = alloc_sess_reqs(sess);
2358+ err = alloc_path_reqs(clt_path);
23462359 if (err)
23472360 goto destroy;
23482361
2349− rtrs_start_hb(&sess->s);
2362+ rtrs_start_hb(&clt_path->s);
23502363
23512364 return 0;
23522365
23532366 destroy:
23542367 while (cid--) {
2355− struct rtrs_clt_con *con = to_clt_con(sess->s.con[cid]);
2368+ struct rtrs_clt_con *con = to_clt_con(clt_path->s.con[cid]);
23562369
23572370 stop_cm(con);
23582371
@@ -2367,7 +2380,7 @@ destroy: · 8 unmodified lines
23672380 * doing rdma_resolve_addr(), switch to CONNECTION_ERR state
23682381 * manually to keep reconnecting.
23692382 */
2370− rtrs_clt_change_state_get_old(sess, RTRS_CLT_CONNECTING_ERR, NULL);
2383+ rtrs_clt_change_state_get_old(clt_path, RTRS_CLT_CONNECTING_ERR, NULL);
23712384
23722385 return err;
23732386 }
@@ -2375,31 +2388,32 @@ destroy: · 1 unmodified line
23752388 static void rtrs_clt_info_req_done(struct ib_cq *cq, struct ib_wc *wc)
23762389 {
23772390 struct rtrs_clt_con *con = to_clt_con(wc->qp->qp_context);
2378− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
2391+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
23792392 struct rtrs_iu *iu;
23802393
23812394 iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe);
2382− rtrs_iu_free(iu, sess->s.dev->ib_dev, 1);
2395+ rtrs_iu_free(iu, clt_path->s.dev->ib_dev, 1);
23832396
23842397 if (wc->status != IB_WC_SUCCESS) {
2385− rtrs_err(sess->clt, "Sess info request send failed: %s\n",
2398+ rtrs_err(clt_path->clt, "Path info request send failed: %s\n",
23862399 ib_wc_status_msg(wc->status));
2387− rtrs_clt_change_state_get_old(sess, RTRS_CLT_CONNECTING_ERR, NULL);
2400+ rtrs_clt_change_state_get_old(clt_path, RTRS_CLT_CONNECTING_ERR, NULL);
23882401 return;
23892402 }
23902403
23912404 rtrs_clt_update_wc_stats(con);
23922405 }
23932406
2394−static int process_info_rsp(struct rtrs_clt_sess *sess,
2407+static int process_info_rsp(struct rtrs_clt_path *clt_path,
23952408 const struct rtrs_msg_info_rsp *msg)
23962409 {
23972410 unsigned int sg_cnt, total_len;
23982411 int i, sgi;
23992412
24002413 sg_cnt = le16_to_cpu(msg->sg_cnt);
2401− if (!sg_cnt || (sess->queue_depth % sg_cnt)) {
2402− rtrs_err(sess->clt, "Incorrect sg_cnt %d, is not multiple\n",
2414+ if (!sg_cnt || (clt_path->queue_depth % sg_cnt)) {
2415+ rtrs_err(clt_path->clt,
2416+ "Incorrect sg_cnt %d, is not multiple\n",
24032417 sg_cnt);
24042418 return -EINVAL;
24052419 }
@@ -2408,15 +2422,15 @@ static int process_info_rsp(struct rtrs_clt_sess *sess, · 2 unmodified lines
24082422 * Check if IB immediate data size is enough to hold the mem_id and
24092423 * the offset inside the memory chunk.
24102424 */
2411− if ((ilog2(sg_cnt - 1) + 1) + (ilog2(sess->chunk_size - 1) + 1) >
2425+ if ((ilog2(sg_cnt - 1) + 1) + (ilog2(clt_path->chunk_size - 1) + 1) >
24122426 MAX_IMM_PAYL_BITS) {
2413− rtrs_err(sess->clt,
2427+ rtrs_err(clt_path->clt,
24142428 "RDMA immediate size (%db) not enough to encode %d buffers of size %dB\n",
2415− MAX_IMM_PAYL_BITS, sg_cnt, sess->chunk_size);
2429+ MAX_IMM_PAYL_BITS, sg_cnt, clt_path->chunk_size);
24162430 return -EINVAL;
24172431 }
24182432 total_len = 0;
2419− for (sgi = 0, i = 0; sgi < sg_cnt && i < sess->queue_depth; sgi++) {
2433+ for (sgi = 0, i = 0; sgi < sg_cnt && i < clt_path->queue_depth; sgi++) {
24202434 const struct rtrs_sg_desc *desc = &msg->desc[sgi];
24212435 u32 len, rkey;
24222436 u64 addr;
@@ -2427,26 +2441,28 @@ static int process_info_rsp(struct rtrs_clt_sess *sess, · 4 unmodified lines
24272441
24282442 total_len += len;
24292443
2430− if (!len || (len % sess->chunk_size)) {
2431− rtrs_err(sess->clt, "Incorrect [%d].len %d\n", sgi,
2444+ if (!len || (len % clt_path->chunk_size)) {
2445+ rtrs_err(clt_path->clt, "Incorrect [%d].len %d\n",
2446+ sgi,
24322447 len);
24332448 return -EINVAL;
24342449 }
2435− for ( ; len && i < sess->queue_depth; i++) {
2436− sess->rbufs[i].addr = addr;
2437− sess->rbufs[i].rkey = rkey;
2450+ for ( ; len && i < clt_path->queue_depth; i++) {
2451+ clt_path->rbufs[i].addr = addr;
2452+ clt_path->rbufs[i].rkey = rkey;
24382453
2439− len -= sess->chunk_size;
2440− addr += sess->chunk_size;
2454+ len -= clt_path->chunk_size;
2455+ addr += clt_path->chunk_size;
24412456 }
24422457 }
24432458 /* Sanity check */
2444− if (sgi != sg_cnt || i != sess->queue_depth) {
2445− rtrs_err(sess->clt, "Incorrect sg vector, not fully mapped\n");
2459+ if (sgi != sg_cnt || i != clt_path->queue_depth) {
2460+ rtrs_err(clt_path->clt,
2461+ "Incorrect sg vector, not fully mapped\n");
24462462 return -EINVAL;
24472463 }
2448− if (total_len != sess->chunk_size * sess->queue_depth) {
2449− rtrs_err(sess->clt, "Incorrect total_len %d\n", total_len);
2464+ if (total_len != clt_path->chunk_size * clt_path->queue_depth) {
2465+ rtrs_err(clt_path->clt, "Incorrect total_len %d\n", total_len);
24502466 return -EINVAL;
24512467 }
24522468
@@ -2456,7 +2472,7 @@ static int process_info_rsp(struct rtrs_clt_sess *sess, · 3 unmodified lines
24562472 static void rtrs_clt_info_rsp_done(struct ib_cq *cq, struct ib_wc *wc)
24572473 {
24582474 struct rtrs_clt_con *con = to_clt_con(wc->qp->qp_context);
2459− struct rtrs_clt_sess *sess = to_clt_sess(con->c.sess);
2475+ struct rtrs_clt_path *clt_path = to_clt_path(con->c.path);
24602476 struct rtrs_msg_info_rsp *msg;
24612477 enum rtrs_clt_state state;
24622478 struct rtrs_iu *iu;
@@ -2468,37 +2484,37 @@ static void rtrs_clt_info_rsp_done(struct ib_cq *cq, struct ib_wc *wc) · 5 unmodified lines
24682484 WARN_ON(con->c.cid);
24692485 iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe);
24702486 if (wc->status != IB_WC_SUCCESS) {
2471− rtrs_err(sess->clt, "Sess info response recv failed: %s\n",
2487+ rtrs_err(clt_path->clt, "Path info response recv failed: %s\n",
24722488 ib_wc_status_msg(wc->status));
24732489 goto out;
24742490 }
24752491 WARN_ON(wc->opcode != IB_WC_RECV);
24762492
24772493 if (wc->byte_len < sizeof(*msg)) {
2478− rtrs_err(sess->clt, "Sess info response is malformed: size %d\n",
2494+ rtrs_err(clt_path->clt, "Path info response is malformed: size %d\n",
24792495 wc->byte_len);
24802496 goto out;
24812497 }
2482− ib_dma_sync_single_for_cpu(sess->s.dev->ib_dev, iu->dma_addr,
2498+ ib_dma_sync_single_for_cpu(clt_path->s.dev->ib_dev, iu->dma_addr,
24832499 iu->size, DMA_FROM_DEVICE);
24842500 msg = iu->buf;
24852501 if (le16_to_cpu(msg->type) != RTRS_MSG_INFO_RSP) {
2486− rtrs_err(sess->clt, "Sess info response is malformed: type %d\n",
2502+ rtrs_err(clt_path->clt, "Path info response is malformed: type %d\n",
24872503 le16_to_cpu(msg->type));
24882504 goto out;
24892505 }
24902506 rx_sz = sizeof(*msg);
24912507 rx_sz += sizeof(msg->desc[0]) * le16_to_cpu(msg->sg_cnt);
24922508 if (wc->byte_len < rx_sz) {
2493− rtrs_err(sess->clt, "Sess info response is malformed: size %d\n",
2509+ rtrs_err(clt_path->clt, "Path info response is malformed: size %d\n",
24942510 wc->byte_len);
24952511 goto out;
24962512 }
2497− err = process_info_rsp(sess, msg);
2513+ err = process_info_rsp(clt_path, msg);
24982514 if (err)
24992515 goto out;
25002516
2501− err = post_recv_sess(sess);
2517+ err = post_recv_path(clt_path);
25022518 if (err)
25032519 goto out;
25042520
@@ -2506,25 +2522,25 @@ static void rtrs_clt_info_rsp_done(struct ib_cq *cq, struct ib_wc *wc) · 1 unmodified line
25062522
25072523 out:
25082524 rtrs_clt_update_wc_stats(con);
2509− rtrs_iu_free(iu, sess->s.dev->ib_dev, 1);
2510− rtrs_clt_change_state_get_old(sess, state, NULL);
2525+ rtrs_iu_free(iu, clt_path->s.dev->ib_dev, 1);
2526+ rtrs_clt_change_state_get_old(clt_path, state, NULL);
25112527 }
25122528
2513−static int rtrs_send_sess_info(struct rtrs_clt_sess *sess)
2529+static int rtrs_send_path_info(struct rtrs_clt_path *clt_path)
25142530 {
2515− struct rtrs_clt_con *usr_con = to_clt_con(sess->s.con[0]);
2531+ struct rtrs_clt_con *usr_con = to_clt_con(clt_path->s.con[0]);
25162532 struct rtrs_msg_info_req *msg;
25172533 struct rtrs_iu *tx_iu, *rx_iu;
25182534 size_t rx_sz;
25192535 int err;
25202536
25212537 rx_sz = sizeof(struct rtrs_msg_info_rsp);
2522− rx_sz += sizeof(struct rtrs_sg_desc) * sess->queue_depth;
2538+ rx_sz += sizeof(struct rtrs_sg_desc) * clt_path->queue_depth;
25232539
25242540 tx_iu = rtrs_iu_alloc(1, sizeof(struct rtrs_msg_info_req), GFP_KERNEL,
2525− sess->s.dev->ib_dev, DMA_TO_DEVICE,
2541+ clt_path->s.dev->ib_dev, DMA_TO_DEVICE,
25262542 rtrs_clt_info_req_done);
2527− rx_iu = rtrs_iu_alloc(1, rx_sz, GFP_KERNEL, sess->s.dev->ib_dev,
2543+ rx_iu = rtrs_iu_alloc(1, rx_sz, GFP_KERNEL, clt_path->s.dev->ib_dev,
25282544 DMA_FROM_DEVICE, rtrs_clt_info_rsp_done);
25292545 if (!tx_iu || !rx_iu) {
25302546 err = -ENOMEM;
@@ -2533,33 +2549,34 @@ static int rtrs_send_sess_info(struct rtrs_clt_sess *sess) · 2 unmodified lines
25332549 /* Prepare for getting info response */
25342550 err = rtrs_iu_post_recv(&usr_con->c, rx_iu);
25352551 if (err) {
2536− rtrs_err(sess->clt, "rtrs_iu_post_recv(), err: %d\n", err);
2552+ rtrs_err(clt_path->clt, "rtrs_iu_post_recv(), err: %d\n", err);
25372553 goto out;
25382554 }
25392555 rx_iu = NULL;
25402556
25412557 msg = tx_iu->buf;
25422558 msg->type = cpu_to_le16(RTRS_MSG_INFO_REQ);
2543− memcpy(msg->sessname, sess->s.sessname, sizeof(msg->sessname));
2559+ memcpy(msg->pathname, clt_path->s.sessname, sizeof(msg->pathname));
25442560
2545− ib_dma_sync_single_for_device(sess->s.dev->ib_dev, tx_iu->dma_addr,
2561+ ib_dma_sync_single_for_device(clt_path->s.dev->ib_dev,
2562+ tx_iu->dma_addr,
25462563 tx_iu->size, DMA_TO_DEVICE);
25472564
25482565 /* Send info request */
25492566 err = rtrs_iu_post_send(&usr_con->c, tx_iu, sizeof(*msg), NULL);
25502567 if (err) {
2551− rtrs_err(sess->clt, "rtrs_iu_post_send(), err: %d\n", err);
2568+ rtrs_err(clt_path->clt, "rtrs_iu_post_send(), err: %d\n", err);
25522569 goto out;
25532570 }
25542571 tx_iu = NULL;
25552572
25562573 /* Wait for state change */
2557− wait_event_interruptible_timeout(sess->state_wq,
2558− sess->state != RTRS_CLT_CONNECTING,
2574+ wait_event_interruptible_timeout(clt_path->state_wq,
2575+ clt_path->state != RTRS_CLT_CONNECTING,
25592576 msecs_to_jiffies(
25602577 RTRS_CONNECT_TIMEOUT_MS));
2561− if (READ_ONCE(sess->state) != RTRS_CLT_CONNECTED) {
2562− if (READ_ONCE(sess->state) == RTRS_CLT_CONNECTING_ERR)
2578+ if (READ_ONCE(clt_path->state) != RTRS_CLT_CONNECTED) {
2579+ if (READ_ONCE(clt_path->state) == RTRS_CLT_CONNECTING_ERR)
25632580 err = -ECONNRESET;
25642581 else
25652582 err = -ETIMEDOUT;
@@ -2567,82 +2584,82 @@ static int rtrs_send_sess_info(struct rtrs_clt_sess *sess) · 1 unmodified line
25672584
25682585 out:
25692586 if (tx_iu)
2570− rtrs_iu_free(tx_iu, sess->s.dev->ib_dev, 1);
2587+ rtrs_iu_free(tx_iu, clt_path->s.dev->ib_dev, 1);
25712588 if (rx_iu)
2572− rtrs_iu_free(rx_iu, sess->s.dev->ib_dev, 1);
2589+ rtrs_iu_free(rx_iu, clt_path->s.dev->ib_dev, 1);
25732590 if (err)
25742591 /* If we've never taken async path because of malloc problems */
2575− rtrs_clt_change_state_get_old(sess, RTRS_CLT_CONNECTING_ERR, NULL);
2592+ rtrs_clt_change_state_get_old(clt_path,
2593+ RTRS_CLT_CONNECTING_ERR, NULL);
25762594
25772595 return err;
25782596 }
25792597
25802598 /**
2581− * init_sess() - establishes all session connections and does handshake
2582− * @sess: client session.
2599+ * init_path() - establishes all path connections and does handshake
2600+ * @clt_path: client path.
25832601 * In case of error full close or reconnect procedure should be taken,
25842602 * because reconnect or close async works can be started.
25852603 */
2586−static int init_sess(struct rtrs_clt_sess *sess)
2604+static int init_path(struct rtrs_clt_path *clt_path)
25872605 {
25882606 int err;
25892607 char str[NAME_MAX];
25902608 struct rtrs_addr path = {
2591− .src = &sess->s.src_addr,
2592− .dst = &sess->s.dst_addr,
2609+ .src = &clt_path->s.src_addr,
2610+ .dst = &clt_path->s.dst_addr,
25932611 };
25942612
25952613 rtrs_addr_to_str(&path, str, sizeof(str));
25962614
2597− mutex_lock(&sess->init_mutex);
2598− err = init_conns(sess);
2615+ mutex_lock(&clt_path->init_mutex);
2616+ err = init_conns(clt_path);
25992617 if (err) {
2600− rtrs_err(sess->clt,
2618+ rtrs_err(clt_path->clt,
26012619 "init_conns() failed: err=%d path=%s [%s:%u]\n", err,
2602− str, sess->hca_name, sess->hca_port);
2620+ str, clt_path->hca_name, clt_path->hca_port);
26032621 goto out;
26042622 }
2605− err = rtrs_send_sess_info(sess);
2623+ err = rtrs_send_path_info(clt_path);
26062624 if (err) {
2607− rtrs_err(
2608− sess->clt,
2609− "rtrs_send_sess_info() failed: err=%d path=%s [%s:%u]\n",
2610− err, str, sess->hca_name, sess->hca_port);
2625+ rtrs_err(clt_path->clt,
2626+ "rtrs_send_path_info() failed: err=%d path=%s [%s:%u]\n",
2627+ err, str, clt_path->hca_name, clt_path->hca_port);
26112628 goto out;
26122629 }
2613− rtrs_clt_sess_up(sess);
2630+ rtrs_clt_path_up(clt_path);
26142631 out:
2615− mutex_unlock(&sess->init_mutex);
2632+ mutex_unlock(&clt_path->init_mutex);
26162633
26172634 return err;
26182635 }
26192636
26202637 static void rtrs_clt_reconnect_work(struct work_struct *work)
26212638 {
2622− struct rtrs_clt_sess *sess;
2623− struct rtrs_clt *clt;
2639+ struct rtrs_clt_path *clt_path;
2640+ struct rtrs_clt_sess *clt;
26242641 unsigned int delay_ms;
26252642 int err;
26262643
2627− sess = container_of(to_delayed_work(work), struct rtrs_clt_sess,
2628− reconnect_dwork);
2629− clt = sess->clt;
2644+ clt_path = container_of(to_delayed_work(work), struct rtrs_clt_path,
2645+ reconnect_dwork);
2646+ clt = clt_path->clt;
26302647
2631− if (READ_ONCE(sess->state) != RTRS_CLT_RECONNECTING)
2648+ if (READ_ONCE(clt_path->state) != RTRS_CLT_RECONNECTING)
26322649 return;
26332650
2634− if (sess->reconnect_attempts >= clt->max_reconnect_attempts) {
2635− /* Close a session completely if max attempts is reached */
2636− rtrs_clt_close_conns(sess, false);
2651+ if (clt_path->reconnect_attempts >= clt->max_reconnect_attempts) {
2652+ /* Close a path completely if max attempts is reached */
2653+ rtrs_clt_close_conns(clt_path, false);
26372654 return;
26382655 }
2639− sess->reconnect_attempts++;
2656+ clt_path->reconnect_attempts++;
26402657
26412658 /* Stop everything */
2642− rtrs_clt_stop_and_destroy_conns(sess);
2659+ rtrs_clt_stop_and_destroy_conns(clt_path);
26432660 msleep(RTRS_RECONNECT_BACKOFF);
2644− if (rtrs_clt_change_state_get_old(sess, RTRS_CLT_CONNECTING, NULL)) {
2645− err = init_sess(sess);
2661+ if (rtrs_clt_change_state_get_old(clt_path, RTRS_CLT_CONNECTING, NULL)) {
2662+ err = init_path(clt_path);
26462663 if (err)
26472664 goto reconnect_again;
26482665 }
@@ -2650,10 +2667,10 @@ static void rtrs_clt_reconnect_work(struct work_struct *work) · 1 unmodified line
26502667 return;
26512668
26522669 reconnect_again:
2653− if (rtrs_clt_change_state_get_old(sess, RTRS_CLT_RECONNECTING, NULL)) {
2654− sess->stats->reconnects.fail_cnt++;
2670+ if (rtrs_clt_change_state_get_old(clt_path, RTRS_CLT_RECONNECTING, NULL)) {
2671+ clt_path->stats->reconnects.fail_cnt++;
26552672 delay_ms = clt->reconnect_delay_sec * 1000;
2656− queue_delayed_work(rtrs_wq, &sess->reconnect_dwork,
2673+ queue_delayed_work(rtrs_wq, &clt_path->reconnect_dwork,
26572674 msecs_to_jiffies(delay_ms +
26582675 prandom_u32() %
26592676 RTRS_RECONNECT_SEED));
@@ -2662,19 +2679,20 @@ reconnect_again: · 2 unmodified lines
26622679
26632680 static void rtrs_clt_dev_release(struct device *dev)
26642681 {
2665− struct rtrs_clt *clt = container_of(dev, struct rtrs_clt, dev);
2682+ struct rtrs_clt_sess *clt = container_of(dev, struct rtrs_clt_sess,
2683+ dev);
26662684
26672685 kfree(clt);
26682686 }
26692687
2670−static struct rtrs_clt *alloc_clt(const char *sessname, size_t paths_num,
2688+static struct rtrs_clt_sess *alloc_clt(const char *sessname, size_t paths_num,
26712689 u16 port, size_t pdu_sz, void *priv,
26722690 void (*link_ev)(void *priv,
26732691 enum rtrs_clt_link_ev ev),
26742692 unsigned int reconnect_delay_sec,
26752693 unsigned int max_reconnect_attempts)
26762694 {
2677− struct rtrs_clt *clt;
2695+ struct rtrs_clt_sess *clt;
26782696 int err;
26792697
26802698 if (!paths_num || paths_num > MAX_PATHS_NUM)
@@ -2749,7 +2767,7 @@ err: · 68 unmodified lines
27492767 return ERR_PTR(err);
27502768 }
27512769
2752−static void free_clt(struct rtrs_clt *clt)
2770+static void free_clt(struct rtrs_clt_sess *clt)
27532771 {
27542772 free_permits(clt);
27552773 free_percpu(clt->pcpu_path);
@@ -2760,7 +2778,7 @@ static void free_clt(struct rtrs_clt *clt) · 4 unmodified lines
27602778 }
27612779
27622780 /**
2763− * rtrs_clt_open() - Open a session to an RTRS server
2781+ * rtrs_clt_open() - Open a path to an RTRS server
27642782 * @ops: holds the link event callback and the private pointer.
27652783 * @sessname: name of the session
27662784 * @paths: Paths to be established defined by their src and dst addresses
@@ -2777,24 +2795,24 @@ static void free_clt(struct rtrs_clt *clt) · 10 unmodified lines
27772795 *
27782796 * Return a valid pointer on success otherwise PTR_ERR.
27792797 */
2780−struct rtrs_clt *rtrs_clt_open(struct rtrs_clt_ops *ops,
2781− const char *sessname,
2798+struct rtrs_clt_sess *rtrs_clt_open(struct rtrs_clt_ops *ops,
2799+ const char *pathname,
27822800 const struct rtrs_addr *paths,
27832801 size_t paths_num, u16 port,
27842802 size_t pdu_sz, u8 reconnect_delay_sec,
27852803 s16 max_reconnect_attempts, u32 nr_poll_queues)
27862804 {
2787− struct rtrs_clt_sess *sess, *tmp;
2788− struct rtrs_clt *clt;
2805+ struct rtrs_clt_path *clt_path, *tmp;
2806+ struct rtrs_clt_sess *clt;
27892807 int err, i;
27902808
2791− if (strchr(sessname, '/') || strchr(sessname, '.')) {
2792− pr_err("sessname cannot contain / and .\n");
2809+ if (strchr(pathname, '/') || strchr(pathname, '.')) {
2810+ pr_err("pathname cannot contain / and .\n");
27932811 err = -EINVAL;
27942812 goto out;
27952813 }
27962814
2797− clt = alloc_clt(sessname, paths_num, port, pdu_sz, ops->priv,
2815+ clt = alloc_clt(pathname, paths_num, port, pdu_sz, ops->priv,
27982816 ops->link_ev,
27992817 reconnect_delay_sec,
28002818 max_reconnect_attempts);
@@ -2803,49 +2821,49 @@ struct rtrs_clt *rtrs_clt_open(struct rtrs_clt_ops *ops, · 2 unmodified lines
28032821 goto out;
28042822 }
28052823 for (i = 0; i < paths_num; i++) {
2806− struct rtrs_clt_sess *sess;
2824+ struct rtrs_clt_path *clt_path;
28072825
2808− sess = alloc_sess(clt, &paths[i], nr_cpu_ids,
2826+ clt_path = alloc_path(clt, &paths[i], nr_cpu_ids,
28092827 nr_poll_queues);
2810− if (IS_ERR(sess)) {
2811− err = PTR_ERR(sess);
2812− goto close_all_sess;
2828+ if (IS_ERR(clt_path)) {
2829+ err = PTR_ERR(clt_path);
2830+ goto close_all_path;
28132831 }
28142832 if (!i)
2815− sess->for_new_clt = 1;
2816− list_add_tail_rcu(&sess->s.entry, &clt->paths_list);
2833+ clt_path->for_new_clt = 1;
2834+ list_add_tail_rcu(&clt_path->s.entry, &clt->paths_list);
28172835
2818− err = init_sess(sess);
2836+ err = init_path(clt_path);
28192837 if (err) {
2820− list_del_rcu(&sess->s.entry);
2821− rtrs_clt_close_conns(sess, true);
2822− free_percpu(sess->stats->pcpu_stats);
2823− kfree(sess->stats);
2824− free_sess(sess);
2825− goto close_all_sess;
2838+ list_del_rcu(&clt_path->s.entry);
2839+ rtrs_clt_close_conns(clt_path, true);
2840+ free_percpu(clt_path->stats->pcpu_stats);
2841+ kfree(clt_path->stats);
2842+ free_path(clt_path);
2843+ goto close_all_path;
28262844 }
28272845
2828− err = rtrs_clt_create_sess_files(sess);
2846+ err = rtrs_clt_create_path_files(clt_path);
28292847 if (err) {
2830− list_del_rcu(&sess->s.entry);
2831− rtrs_clt_close_conns(sess, true);
2832− free_percpu(sess->stats->pcpu_stats);
2833− kfree(sess->stats);
2834− free_sess(sess);
2835− goto close_all_sess;
2848+ list_del_rcu(&clt_path->s.entry);
2849+ rtrs_clt_close_conns(clt_path, true);
2850+ free_percpu(clt_path->stats->pcpu_stats);
2851+ kfree(clt_path->stats);
2852+ free_path(clt_path);
2853+ goto close_all_path;
28362854 }
28372855 }
28382856 err = alloc_permits(clt);
28392857 if (err)
2840− goto close_all_sess;
2858+ goto close_all_path;
28412859
28422860 return clt;
28432861
2844−close_all_sess:
2845− list_for_each_entry_safe(sess, tmp, &clt->paths_list, s.entry) {
2846− rtrs_clt_destroy_sess_files(sess, NULL);
2847− rtrs_clt_close_conns(sess, true);
2848− kobject_put(&sess->kobj);
2862+close_all_path:
2863+ list_for_each_entry_safe(clt_path, tmp, &clt->paths_list, s.entry) {
2864+ rtrs_clt_destroy_path_files(clt_path, NULL);
2865+ rtrs_clt_close_conns(clt_path, true);
2866+ kobject_put(&clt_path->kobj);
28492867 }
28502868 rtrs_clt_destroy_sysfs_root(clt);
28512869 free_clt(clt);
@@ -2856,37 +2874,38 @@ out: · 4 unmodified lines
28562874 EXPORT_SYMBOL(rtrs_clt_open);
28572875
28582876 /**
2859− * rtrs_clt_close() - Close a session
2877+ * rtrs_clt_close() - Close a path
28602878 * @clt: Session handle. Session is freed upon return.
28612879 */
2862−void rtrs_clt_close(struct rtrs_clt *clt)
2880+void rtrs_clt_close(struct rtrs_clt_sess *clt)
28632881 {
2864− struct rtrs_clt_sess *sess, *tmp;
2882+ struct rtrs_clt_path *clt_path, *tmp;
28652883
28662884 /* Firstly forbid sysfs access */
28672885 rtrs_clt_destroy_sysfs_root(clt);
28682886
28692887 /* Now it is safe to iterate over all paths without locks */
2870− list_for_each_entry_safe(sess, tmp, &clt->paths_list, s.entry) {
2871− rtrs_clt_close_conns(sess, true);
2872− rtrs_clt_destroy_sess_files(sess, NULL);
2873− kobject_put(&sess->kobj);
2888+ list_for_each_entry_safe(clt_path, tmp, &clt->paths_list, s.entry) {
2889+ rtrs_clt_close_conns(clt_path, true);
2890+ rtrs_clt_destroy_path_files(clt_path, NULL);
2891+ kobject_put(&clt_path->kobj);
28742892 }
28752893 free_clt(clt);
28762894 }
28772895 EXPORT_SYMBOL(rtrs_clt_close);
28782896
2879−int rtrs_clt_reconnect_from_sysfs(struct rtrs_clt_sess *sess)
2897+int rtrs_clt_reconnect_from_sysfs(struct rtrs_clt_path *clt_path)
28802898 {
28812899 enum rtrs_clt_state old_state;
28822900 int err = -EBUSY;
28832901 bool changed;
28842902
2885− changed = rtrs_clt_change_state_get_old(sess, RTRS_CLT_RECONNECTING,
2903+ changed = rtrs_clt_change_state_get_old(clt_path,
2904+ RTRS_CLT_RECONNECTING,
28862905 &old_state);
28872906 if (changed) {
2888− sess->reconnect_attempts = 0;
2889− queue_delayed_work(rtrs_wq, &sess->reconnect_dwork, 0);
2907+ clt_path->reconnect_attempts = 0;
2908+ queue_delayed_work(rtrs_wq, &clt_path->reconnect_dwork, 0);
28902909 }
28912910 if (changed || old_state == RTRS_CLT_RECONNECTING) {
28922911 /*
@@ -2894,15 +2913,15 @@ int rtrs_clt_reconnect_from_sysfs(struct rtrs_clt_sess *sess) · 1 unmodified line
28942913 * execution, so do the flush if we have queued something
28952914 * right now or work is pending.
28962915 */
2897− flush_delayed_work(&sess->reconnect_dwork);
2898− err = (READ_ONCE(sess->state) ==
2916+ flush_delayed_work(&clt_path->reconnect_dwork);
2917+ err = (READ_ONCE(clt_path->state) ==
28992918 RTRS_CLT_CONNECTED ? 0 : -ENOTCONN);
29002919 }
29012920
29022921 return err;
29032922 }
29042923
2905−int rtrs_clt_remove_path_from_sysfs(struct rtrs_clt_sess *sess,
2924+int rtrs_clt_remove_path_from_sysfs(struct rtrs_clt_path *clt_path,
29062925 const struct attribute *sysfs_self)
29072926 {
29082927 enum rtrs_clt_state old_state;
@@ -2918,27 +2937,27 @@ int rtrs_clt_remove_path_from_sysfs(struct rtrs_clt_sess *sess, · 9 unmodified lines
29182937 * removing the path.
29192938 */
29202939 do {
2921− rtrs_clt_close_conns(sess, true);
2922− changed = rtrs_clt_change_state_get_old(sess,
2940+ rtrs_clt_close_conns(clt_path, true);
2941+ changed = rtrs_clt_change_state_get_old(clt_path,
29232942 RTRS_CLT_DEAD,
29242943 &old_state);
29252944 } while (!changed && old_state != RTRS_CLT_DEAD);
29262945
29272946 if (changed) {
2928− rtrs_clt_remove_path_from_arr(sess);
2929− rtrs_clt_destroy_sess_files(sess, sysfs_self);
2930− kobject_put(&sess->kobj);
2947+ rtrs_clt_remove_path_from_arr(clt_path);
2948+ rtrs_clt_destroy_path_files(clt_path, sysfs_self);
2949+ kobject_put(&clt_path->kobj);
29312950 }
29322951
29332952 return 0;
29342953 }
29352954
2936−void rtrs_clt_set_max_reconnect_attempts(struct rtrs_clt *clt, int value)
2955+void rtrs_clt_set_max_reconnect_attempts(struct rtrs_clt_sess *clt, int value)
29372956 {
29382957 clt->max_reconnect_attempts = (unsigned int)value;
29392958 }
29402959
2941−int rtrs_clt_get_max_reconnect_attempts(const struct rtrs_clt *clt)
2960+int rtrs_clt_get_max_reconnect_attempts(const struct rtrs_clt_sess *clt)
29422961 {
29432962 return (int)clt->max_reconnect_attempts;
29442963 }
@@ -2968,12 +2987,12 @@ int rtrs_clt_get_max_reconnect_attempts(const struct rtrs_clt *clt) · 23 unmodified lines
29682987 * On dir=WRITE rtrs client will rdma write data in sg to server side.
29692988 */
29702989 int rtrs_clt_request(int dir, struct rtrs_clt_req_ops *ops,
2971− struct rtrs_clt *clt, struct rtrs_permit *permit,
2972− const struct kvec *vec, size_t nr, size_t data_len,
2973− struct scatterlist *sg, unsigned int sg_cnt)
2990+ struct rtrs_clt_sess *clt, struct rtrs_permit *permit,
2991+ const struct kvec *vec, size_t nr, size_t data_len,
2992+ struct scatterlist *sg, unsigned int sg_cnt)
29742993 {
29752994 struct rtrs_clt_io_req *req;
2976− struct rtrs_clt_sess *sess;
2995+ struct rtrs_clt_path *clt_path;
29772996
29782997 enum dma_data_direction dma_dir;
29792998 int err = -ECONNABORTED, i;
@@ -2995,19 +3014,19 @@ int rtrs_clt_request(int dir, struct rtrs_clt_req_ops *ops, · 15 unmodified lines
29953014
29963015 rcu_read_lock();
29973016 for (path_it_init(&it, clt);
2998− (sess = it.next_path(&it)) && it.i < it.clt->paths_num; it.i++) {
2999− if (READ_ONCE(sess->state) != RTRS_CLT_CONNECTED)
3017+ (clt_path = it.next_path(&it)) && it.i < it.clt->paths_num; it.i++) {
3018+ if (READ_ONCE(clt_path->state) != RTRS_CLT_CONNECTED)
30003019 continue;
30013020
3002− if (usr_len + hdr_len > sess->max_hdr_size) {
3003− rtrs_wrn_rl(sess->clt,
3021+ if (usr_len + hdr_len > clt_path->max_hdr_size) {
3022+ rtrs_wrn_rl(clt_path->clt,
30043023 "%s request failed, user message size is %zu and header length %zu, but max size is %u\n",
30053024 dir == READ ? "Read" : "Write",
3006− usr_len, hdr_len, sess->max_hdr_size);
3025+ usr_len, hdr_len, clt_path->max_hdr_size);
30073026 err = -EMSGSIZE;
30083027 break;
30093028 }
3010− req = rtrs_clt_get_req(sess, ops->conf_fn, permit, ops->priv,
3029+ req = rtrs_clt_get_req(clt_path, ops->conf_fn, permit, ops->priv,
30113030 vec, usr_len, sg, sg_cnt, data_len,
30123031 dma_dir);
30133032 if (dir == READ)
@@ -3028,21 +3047,21 @@ int rtrs_clt_request(int dir, struct rtrs_clt_req_ops *ops, · 14 unmodified lines
30283047 }
30293048 EXPORT_SYMBOL(rtrs_clt_request);
30303049
3031−int rtrs_clt_rdma_cq_direct(struct rtrs_clt *clt, unsigned int index)
3050+int rtrs_clt_rdma_cq_direct(struct rtrs_clt_sess *clt, unsigned int index)
30323051 {
30333052 /* If no path, return -1 for block layer not to try again */
30343053 int cnt = -1;
30353054 struct rtrs_con *con;
3036− struct rtrs_clt_sess *sess;
3055+ struct rtrs_clt_path *clt_path;
30373056 struct path_it it;
30383057
30393058 rcu_read_lock();
30403059 for (path_it_init(&it, clt);
3041− (sess = it.next_path(&it)) && it.i < it.clt->paths_num; it.i++) {
3042− if (READ_ONCE(sess->state) != RTRS_CLT_CONNECTED)
3060+ (clt_path = it.next_path(&it)) && it.i < it.clt->paths_num; it.i++) {
3061+ if (READ_ONCE(clt_path->state) != RTRS_CLT_CONNECTED)
30433062 continue;
30443063
3045− con = sess->s.con[index + 1];
3064+ con = clt_path->s.con[index + 1];
30463065 cnt = ib_process_cq_direct(con->cq, -1);
30473066 if (cnt)
30483067 break;
@@ -3062,7 +3081,7 @@ EXPORT_SYMBOL(rtrs_clt_rdma_cq_direct); · 13 unmodified lines
30623081 * 0 on success
30633082 * -ECOMM no connection to the server
30643083 */
3065−int rtrs_clt_query(struct rtrs_clt *clt, struct rtrs_attrs *attr)
3084+int rtrs_clt_query(struct rtrs_clt_sess *clt, struct rtrs_attrs *attr)
30663085 {
30673086 if (!rtrs_clt_is_connected(clt))
30683087 return -ECOMM;
@@ -3077,15 +3096,15 @@ int rtrs_clt_query(struct rtrs_clt *clt, struct rtrs_attrs *attr) · 8 unmodified lines
30773096 }
30783097 EXPORT_SYMBOL(rtrs_clt_query);
30793098
3080−int rtrs_clt_create_path_from_sysfs(struct rtrs_clt *clt,
3099+int rtrs_clt_create_path_from_sysfs(struct rtrs_clt_sess *clt,
30813100 struct rtrs_addr *addr)
30823101 {
3083− struct rtrs_clt_sess *sess;
3102+ struct rtrs_clt_path *clt_path;
30843103 int err;
30853104
3086− sess = alloc_sess(clt, addr, nr_cpu_ids, 0);
3087− if (IS_ERR(sess))
3088− return PTR_ERR(sess);
3105+ clt_path = alloc_path(clt, addr, nr_cpu_ids, 0);
3106+ if (IS_ERR(clt_path))
3107+ return PTR_ERR(clt_path);
30893108
30903109 mutex_lock(&clt->paths_mutex);
30913110 if (clt->paths_num == 0) {
@@ -3094,7 +3113,7 @@ int rtrs_clt_create_path_from_sysfs(struct rtrs_clt *clt, · 2 unmodified lines
30943113 * the addition of the first path is like a new session for
30953114 * the storage server
30963115 */
3097− sess->for_new_clt = 1;
3116+ clt_path->for_new_clt = 1;
30983117 }
30993118
31003119 mutex_unlock(&clt->paths_mutex);
@@ -3104,24 +3123,24 @@ int rtrs_clt_create_path_from_sysfs(struct rtrs_clt *clt, · 3 unmodified lines
31043123 * IO will never grab it. Also it is very important to add
31053124 * path before init, since init fires LINK_CONNECTED event.
31063125 */
3107− rtrs_clt_add_path_to_arr(sess);
3126+ rtrs_clt_add_path_to_arr(clt_path);
31083127
3109− err = init_sess(sess);
3128+ err = init_path(clt_path);
31103129 if (err)
3111− goto close_sess;
3130+ goto close_path;
31123131
3113− err = rtrs_clt_create_sess_files(sess);
3132+ err = rtrs_clt_create_path_files(clt_path);
31143133 if (err)
3115− goto close_sess;
3134+ goto close_path;
31163135
31173136 return 0;
31183137
3119−close_sess:
3120− rtrs_clt_remove_path_from_arr(sess);
3121− rtrs_clt_close_conns(sess, true);
3122− free_percpu(sess->stats->pcpu_stats);
3123− kfree(sess->stats);
3124− free_sess(sess);
3138+close_path:
3139+ rtrs_clt_remove_path_from_arr(clt_path);
3140+ rtrs_clt_close_conns(clt_path, true);
3141+ free_percpu(clt_path->stats->pcpu_stats);
3142+ kfree(clt_path->stats);
3143+ free_path(clt_path);
31253144
31263145 return err;
31273146 }
drivers/infiniband/ulp/rtrs/rtrs-clt.h+21−20
@@ -124,9 +124,9 @@ struct rtrs_rbuf { · 123 unmodified lines
124124 u32 rkey;
125125 };
126126
127−struct rtrs_clt_sess {
128− struct rtrs_sess s;
129− struct rtrs_clt *clt;
127+struct rtrs_clt_path {
128+ struct rtrs_path s;
129+ struct rtrs_clt_sess *clt;
130130 wait_queue_head_t state_wq;
131131 enum rtrs_clt_state state;
132132 atomic_t connected_cnt;
@@ -153,10 +153,10 @@ struct rtrs_clt_sess { · 20 unmodified lines
153153 *mp_skip_entry;
154154 };
155155
156−struct rtrs_clt {
156+struct rtrs_clt_sess {
157157 struct list_head paths_list; /* rcu protected list */
158158 size_t paths_num;
159− struct rtrs_clt_sess
159+ struct rtrs_clt_path
160160 __rcu * __percpu *pcpu_path;
161161 uuid_t paths_uuid;
162162 int paths_up;
@@ -186,31 +186,32 @@ static inline struct rtrs_clt_con *to_clt_con(struct rtrs_con *c) · 23 unmodified lines
186186 return container_of(c, struct rtrs_clt_con, c);
187187 }
188188
189−static inline struct rtrs_clt_sess *to_clt_sess(struct rtrs_sess *s)
189+static inline struct rtrs_clt_path *to_clt_path(struct rtrs_path *s)
190190 {
191− return container_of(s, struct rtrs_clt_sess, s);
191+ return container_of(s, struct rtrs_clt_path, s);
192192 }
193193
194−static inline int permit_size(struct rtrs_clt *clt)
194+static inline int permit_size(struct rtrs_clt_sess *clt)
195195 {
196196 return sizeof(struct rtrs_permit) + clt->pdu_sz;
197197 }
198198
199−static inline struct rtrs_permit *get_permit(struct rtrs_clt *clt, int idx)
199+static inline struct rtrs_permit *get_permit(struct rtrs_clt_sess *clt,
200+ int idx)
200201 {
201202 return (struct rtrs_permit *)(clt->permits + permit_size(clt) * idx);
202203 }
203204
204−int rtrs_clt_reconnect_from_sysfs(struct rtrs_clt_sess *sess);
205−void rtrs_clt_close_conns(struct rtrs_clt_sess *sess, bool wait);
206−int rtrs_clt_create_path_from_sysfs(struct rtrs_clt *clt,
205+int rtrs_clt_reconnect_from_sysfs(struct rtrs_clt_path *path);
206+void rtrs_clt_close_conns(struct rtrs_clt_path *clt_path, bool wait);
207+int rtrs_clt_create_path_from_sysfs(struct rtrs_clt_sess *clt,
207208 struct rtrs_addr *addr);
208−int rtrs_clt_remove_path_from_sysfs(struct rtrs_clt_sess *sess,
209+int rtrs_clt_remove_path_from_sysfs(struct rtrs_clt_path *path,
209210 const struct attribute *sysfs_self);
210211
211−void rtrs_clt_set_max_reconnect_attempts(struct rtrs_clt *clt, int value);
212−int rtrs_clt_get_max_reconnect_attempts(const struct rtrs_clt *clt);
213−void free_sess(struct rtrs_clt_sess *sess);
212+void rtrs_clt_set_max_reconnect_attempts(struct rtrs_clt_sess *clt, int value);
213+int rtrs_clt_get_max_reconnect_attempts(const struct rtrs_clt_sess *clt);
214+void free_path(struct rtrs_clt_path *clt_path);
214215
215216 /* rtrs-clt-stats.c */
216217
@@ -239,11 +240,11 @@ ssize_t rtrs_clt_reset_all_help(struct rtrs_clt_stats *stats, · 22 unmodified lines
239240
240241 /* rtrs-clt-sysfs.c */
241242
242−int rtrs_clt_create_sysfs_root_files(struct rtrs_clt *clt);
243−void rtrs_clt_destroy_sysfs_root(struct rtrs_clt *clt);
243+int rtrs_clt_create_sysfs_root_files(struct rtrs_clt_sess *clt);
244+void rtrs_clt_destroy_sysfs_root(struct rtrs_clt_sess *clt);
244245
245−int rtrs_clt_create_sess_files(struct rtrs_clt_sess *sess);
246−void rtrs_clt_destroy_sess_files(struct rtrs_clt_sess *sess,
246+int rtrs_clt_create_path_files(struct rtrs_clt_path *clt_path);
247+void rtrs_clt_destroy_path_files(struct rtrs_clt_path *clt_path,
247248 const struct attribute *sysfs_self);
248249
249250 #endif /* RTRS_CLT_H */
drivers/infiniband/ulp/rtrs/rtrs-pri.h+9−9
@@ -90,7 +90,7 @@ struct rtrs_ib_dev { · 89 unmodified lines
9090 };
9191
9292 struct rtrs_con {
93− struct rtrs_sess *sess;
93+ struct rtrs_path *path;
9494 struct ib_qp *qp;
9595 struct ib_cq *cq;
9696 struct rdma_cm_id *cm_id;
@@ -100,7 +100,7 @@ struct rtrs_con { · 3 unmodified lines
100100 atomic_t sq_wr_avail;
101101 };
102102
103−struct rtrs_sess {
103+struct rtrs_path {
104104 struct list_head entry;
105105 struct sockaddr_storage dst_addr;
106106 struct sockaddr_storage src_addr;
@@ -229,11 +229,11 @@ struct rtrs_msg_conn_rsp { · 122 unmodified lines
229229 /**
230230 * struct rtrs_msg_info_req
231231 * @type: @RTRS_MSG_INFO_REQ
232− * @sessname: Session name chosen by client
232+ * @pathname: Path name chosen by client
233233 */
234234 struct rtrs_msg_info_req {
235235 __le16 type;
236− u8 sessname[NAME_MAX];
236+ u8 pathname[NAME_MAX];
237237 u8 reserved[15];
238238 };
239239
@@ -313,19 +313,19 @@ int rtrs_iu_post_rdma_write_imm(struct rtrs_con *con, struct rtrs_iu *iu, · 73 unmodified lines
313313
314314 int rtrs_post_recv_empty(struct rtrs_con *con, struct ib_cqe *cqe);
315315
316−int rtrs_cq_qp_create(struct rtrs_sess *sess, struct rtrs_con *con,
316+int rtrs_cq_qp_create(struct rtrs_path *path, struct rtrs_con *con,
317317 u32 max_send_sge, int cq_vector, int nr_cqe,
318318 u32 max_send_wr, u32 max_recv_wr,
319319 enum ib_poll_context poll_ctx);
320320 void rtrs_cq_qp_destroy(struct rtrs_con *con);
321321
322−void rtrs_init_hb(struct rtrs_sess *sess, struct ib_cqe *cqe,
322+void rtrs_init_hb(struct rtrs_path *path, struct ib_cqe *cqe,
323323 unsigned int interval_ms, unsigned int missed_max,
324324 void (*err_handler)(struct rtrs_con *con),
325325 struct workqueue_struct *wq);
326−void rtrs_start_hb(struct rtrs_sess *sess);
327−void rtrs_stop_hb(struct rtrs_sess *sess);
328−void rtrs_send_hb_ack(struct rtrs_sess *sess);
326+void rtrs_start_hb(struct rtrs_path *path);
327+void rtrs_stop_hb(struct rtrs_path *path);
328+void rtrs_send_hb_ack(struct rtrs_path *path);
329329
330330 void rtrs_rdma_dev_pd_init(enum ib_pd_flags pd_flags,
331331 struct rtrs_rdma_dev_pd *pool);
drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c+61−60
@@ -15,10 +15,10 @@ · 14 unmodified lines
1515
1616 static void rtrs_srv_release(struct kobject *kobj)
1717 {
18− struct rtrs_srv_sess *sess;
18+ struct rtrs_srv_path *srv_path;
1919
20− sess = container_of(kobj, struct rtrs_srv_sess, kobj);
21− kfree(sess);
20+ srv_path = container_of(kobj, struct rtrs_srv_path, kobj);
21+ kfree(srv_path);
2222 }
2323
2424 static struct kobj_type ktype = {
@@ -36,24 +36,25 @@ static ssize_t rtrs_srv_disconnect_store(struct kobject *kobj, · 11 unmodified lines
3636 struct kobj_attribute *attr,
3737 const char *buf, size_t count)
3838 {
39− struct rtrs_srv_sess *sess;
40− struct rtrs_sess *s;
39+ struct rtrs_srv_path *srv_path;
40+ struct rtrs_path *s;
4141 char str[MAXHOSTNAMELEN];
4242
43− sess = container_of(kobj, struct rtrs_srv_sess, kobj);
44− s = &sess->s;
43+ srv_path = container_of(kobj, struct rtrs_srv_path, kobj);
44+ s = &srv_path->s;
4545 if (!sysfs_streq(buf, "1")) {
4646 rtrs_err(s, "%s: invalid value: '%s'\n",
4747 attr->attr.name, buf);
4848 return -EINVAL;
4949 }
5050
51− sockaddr_to_str((struct sockaddr *)&sess->s.dst_addr, str, sizeof(str));
51+ sockaddr_to_str((struct sockaddr *)&srv_path->s.dst_addr, str,
52+ sizeof(str));
5253
5354 rtrs_info(s, "disconnect for path %s requested\n", str);
5455 /* first remove sysfs itself to avoid deadlock */
55− sysfs_remove_file_self(&sess->kobj, &attr->attr);
56− close_sess(sess);
56+ sysfs_remove_file_self(&srv_path->kobj, &attr->attr);
57+ close_path(srv_path);
5758
5859 return count;
5960 }
@@ -66,11 +67,11 @@ static ssize_t rtrs_srv_hca_port_show(struct kobject *kobj, · 6 unmodified lines
6667 struct kobj_attribute *attr,
6768 char *page)
6869 {
69− struct rtrs_srv_sess *sess;
70+ struct rtrs_srv_path *srv_path;
7071 struct rtrs_con *usr_con;
7172
72− sess = container_of(kobj, typeof(*sess), kobj);
73− usr_con = sess->s.con[0];
73+ srv_path = container_of(kobj, typeof(*srv_path), kobj);
74+ usr_con = srv_path->s.con[0];
7475
7576 return sysfs_emit(page, "%u\n", usr_con->cm_id->port_num);
7677 }
@@ -82,11 +83,11 @@ static ssize_t rtrs_srv_hca_name_show(struct kobject *kobj, · 5 unmodified lines
8283 struct kobj_attribute *attr,
8384 char *page)
8485 {
85− struct rtrs_srv_sess *sess;
86+ struct rtrs_srv_path *srv_path;
8687
87− sess = container_of(kobj, struct rtrs_srv_sess, kobj);
88+ srv_path = container_of(kobj, struct rtrs_srv_path, kobj);
8889
89− return sysfs_emit(page, "%s\n", sess->s.dev->ib_dev->name);
90+ return sysfs_emit(page, "%s\n", srv_path->s.dev->ib_dev->name);
9091 }
9192
9293 static struct kobj_attribute rtrs_srv_hca_name_attr =
@@ -96,11 +97,11 @@ static ssize_t rtrs_srv_src_addr_show(struct kobject *kobj, · 3 unmodified lines
9697 struct kobj_attribute *attr,
9798 char *page)
9899 {
99− struct rtrs_srv_sess *sess;
100+ struct rtrs_srv_path *srv_path;
100101 int cnt;
101102
102− sess = container_of(kobj, struct rtrs_srv_sess, kobj);
103− cnt = sockaddr_to_str((struct sockaddr *)&sess->s.dst_addr,
103+ srv_path = container_of(kobj, struct rtrs_srv_path, kobj);
104+ cnt = sockaddr_to_str((struct sockaddr *)&srv_path->s.dst_addr,
104105 page, PAGE_SIZE);
105106 return cnt + sysfs_emit_at(page, cnt, "\n");
106107 }
@@ -112,11 +113,11 @@ static ssize_t rtrs_srv_dst_addr_show(struct kobject *kobj, · 5 unmodified lines
112113 struct kobj_attribute *attr,
113114 char *page)
114115 {
115− struct rtrs_srv_sess *sess;
116+ struct rtrs_srv_path *srv_path;
116117 int len;
117118
118− sess = container_of(kobj, struct rtrs_srv_sess, kobj);
119− len = sockaddr_to_str((struct sockaddr *)&sess->s.src_addr, page,
119+ srv_path = container_of(kobj, struct rtrs_srv_path, kobj);
120+ len = sockaddr_to_str((struct sockaddr *)&srv_path->s.src_addr, page,
120121 PAGE_SIZE);
121122 len += sysfs_emit_at(page, len, "\n");
122123 return len;
@@ -125,7 +126,7 @@ static ssize_t rtrs_srv_dst_addr_show(struct kobject *kobj, · 2 unmodified lines
125126 static struct kobj_attribute rtrs_srv_dst_addr_attr =
126127 __ATTR(dst_addr, 0444, rtrs_srv_dst_addr_show, NULL);
127128
128−static struct attribute *rtrs_srv_sess_attrs[] = {
129+static struct attribute *rtrs_srv_path_attrs[] = {
129130 &rtrs_srv_hca_name_attr.attr,
130131 &rtrs_srv_hca_port_attr.attr,
131132 &rtrs_srv_src_addr_attr.attr,
@@ -134,8 +135,8 @@ static struct attribute *rtrs_srv_sess_attrs[] = { · 2 unmodified lines
134135 NULL,
135136 };
136137
137−static const struct attribute_group rtrs_srv_sess_attr_group = {
138− .attrs = rtrs_srv_sess_attrs,
138+static const struct attribute_group rtrs_srv_path_attr_group = {
139+ .attrs = rtrs_srv_path_attrs,
139140 };
140141
141142 STAT_ATTR(struct rtrs_srv_stats, rdma,
@@ -151,9 +152,9 @@ static const struct attribute_group rtrs_srv_stats_attr_group = { · 9 unmodified lines
151152 .attrs = rtrs_srv_stats_attrs,
152153 };
153154
154−static int rtrs_srv_create_once_sysfs_root_folders(struct rtrs_srv_sess *sess)
155+static int rtrs_srv_create_once_sysfs_root_folders(struct rtrs_srv_path *srv_path)
155156 {
156− struct rtrs_srv *srv = sess->srv;
157+ struct rtrs_srv_sess *srv = srv_path->srv;
157158 int err = 0;
158159
159160 mutex_lock(&srv->paths_mutex);
@@ -164,7 +165,7 @@ static int rtrs_srv_create_once_sysfs_root_folders(struct rtrs_srv_sess *sess) · 4 unmodified lines
164165 goto unlock;
165166 }
166167 srv->dev.class = rtrs_dev_class;
167− err = dev_set_name(&srv->dev, "%s", sess->s.sessname);
168+ err = dev_set_name(&srv->dev, "%s", srv_path->s.sessname);
168169 if (err)
169170 goto unlock;
170171
@@ -196,9 +197,9 @@ unlock: · 25 unmodified lines
196197 }
197198
198199 static void
199−rtrs_srv_destroy_once_sysfs_root_folders(struct rtrs_srv_sess *sess)
200+rtrs_srv_destroy_once_sysfs_root_folders(struct rtrs_srv_path *srv_path)
200201 {
201− struct rtrs_srv *srv = sess->srv;
202+ struct rtrs_srv_sess *srv = srv_path->srv;
202203
203204 mutex_lock(&srv->paths_mutex);
204205 if (!--srv->dev_ref) {
@@ -213,7 +214,7 @@ rtrs_srv_destroy_once_sysfs_root_folders(struct rtrs_srv_sess *sess) · 8 unmodified lines
213214 }
214215 }
215216
216−static void rtrs_srv_sess_stats_release(struct kobject *kobj)
217+static void rtrs_srv_path_stats_release(struct kobject *kobj)
217218 {
218219 struct rtrs_srv_stats *stats;
219220
@@ -224,22 +225,22 @@ static void rtrs_srv_sess_stats_release(struct kobject *kobj) · 4 unmodified lines
224225
225226 static struct kobj_type ktype_stats = {
226227 .sysfs_ops = &kobj_sysfs_ops,
227− .release = rtrs_srv_sess_stats_release,
228+ .release = rtrs_srv_path_stats_release,
228229 };
229230
230−static int rtrs_srv_create_stats_files(struct rtrs_srv_sess *sess)
231+static int rtrs_srv_create_stats_files(struct rtrs_srv_path *srv_path)
231232 {
232233 int err;
233− struct rtrs_sess *s = &sess->s;
234+ struct rtrs_path *s = &srv_path->s;
234235
235− err = kobject_init_and_add(&sess->stats->kobj_stats, &ktype_stats,
236− &sess->kobj, "stats");
236+ err = kobject_init_and_add(&srv_path->stats->kobj_stats, &ktype_stats,
237+ &srv_path->kobj, "stats");
237238 if (err) {
238239 rtrs_err(s, "kobject_init_and_add(): %d\n", err);
239− kobject_put(&sess->stats->kobj_stats);
240+ kobject_put(&srv_path->stats->kobj_stats);
240241 return err;
241242 }
242− err = sysfs_create_group(&sess->stats->kobj_stats,
243+ err = sysfs_create_group(&srv_path->stats->kobj_stats,
243244 &rtrs_srv_stats_attr_group);
244245 if (err) {
245246 rtrs_err(s, "sysfs_create_group(): %d\n", err);
@@ -249,64 +250,64 @@ static int rtrs_srv_create_stats_files(struct rtrs_srv_sess *sess) · 3 unmodified lines
249250 return 0;
250251
251252 err:
252− kobject_del(&sess->stats->kobj_stats);
253− kobject_put(&sess->stats->kobj_stats);
253+ kobject_del(&srv_path->stats->kobj_stats);
254+ kobject_put(&srv_path->stats->kobj_stats);
254255
255256 return err;
256257 }
257258
258−int rtrs_srv_create_sess_files(struct rtrs_srv_sess *sess)
259+int rtrs_srv_create_path_files(struct rtrs_srv_path *srv_path)
259260 {
260− struct rtrs_srv *srv = sess->srv;
261− struct rtrs_sess *s = &sess->s;
261+ struct rtrs_srv_sess *srv = srv_path->srv;
262+ struct rtrs_path *s = &srv_path->s;
262263 char str[NAME_MAX];
263264 int err;
264265 struct rtrs_addr path = {
265− .src = &sess->s.dst_addr,
266− .dst = &sess->s.src_addr,
266+ .src = &srv_path->s.dst_addr,
267+ .dst = &srv_path->s.src_addr,
267268 };
268269
269270 rtrs_addr_to_str(&path, str, sizeof(str));
270− err = rtrs_srv_create_once_sysfs_root_folders(sess);
271+ err = rtrs_srv_create_once_sysfs_root_folders(srv_path);
271272 if (err)
272273 return err;
273274
274− err = kobject_init_and_add(&sess->kobj, &ktype, srv->kobj_paths,
275+ err = kobject_init_and_add(&srv_path->kobj, &ktype, srv->kobj_paths,
275276 "%s", str);
276277 if (err) {
277278 rtrs_err(s, "kobject_init_and_add(): %d\n", err);
278279 goto destroy_root;
279280 }
280− err = sysfs_create_group(&sess->kobj, &rtrs_srv_sess_attr_group);
281+ err = sysfs_create_group(&srv_path->kobj, &rtrs_srv_path_attr_group);
281282 if (err) {
282283 rtrs_err(s, "sysfs_create_group(): %d\n", err);
283284 goto put_kobj;
284285 }
285− err = rtrs_srv_create_stats_files(sess);
286+ err = rtrs_srv_create_stats_files(srv_path);
286287 if (err)
287288 goto remove_group;
288289
289290 return 0;
290291
291292 remove_group:
292− sysfs_remove_group(&sess->kobj, &rtrs_srv_sess_attr_group);
293+ sysfs_remove_group(&srv_path->kobj, &rtrs_srv_path_attr_group);
293294 put_kobj:
294− kobject_del(&sess->kobj);
295+ kobject_del(&srv_path->kobj);
295296 destroy_root:
296− kobject_put(&sess->kobj);
297− rtrs_srv_destroy_once_sysfs_root_folders(sess);
297+ kobject_put(&srv_path->kobj);
298+ rtrs_srv_destroy_once_sysfs_root_folders(srv_path);
298299
299300 return err;
300301 }
301302
302−void rtrs_srv_destroy_sess_files(struct rtrs_srv_sess *sess)
303+void rtrs_srv_destroy_path_files(struct rtrs_srv_path *srv_path)
303304 {
304− if (sess->kobj.state_in_sysfs) {
305− kobject_del(&sess->stats->kobj_stats);
306− kobject_put(&sess->stats->kobj_stats);
307− sysfs_remove_group(&sess->kobj, &rtrs_srv_sess_attr_group);
308− kobject_put(&sess->kobj);
305+ if (srv_path->kobj.state_in_sysfs) {
306+ kobject_del(&srv_path->stats->kobj_stats);
307+ kobject_put(&srv_path->stats->kobj_stats);
308+ sysfs_remove_group(&srv_path->kobj, &rtrs_srv_path_attr_group);
309+ kobject_put(&srv_path->kobj);
309310
310− rtrs_srv_destroy_once_sysfs_root_folders(sess);
311+ rtrs_srv_destroy_once_sysfs_root_folders(srv_path);
311312 }
312313 }
drivers/infiniband/ulp/rtrs/rtrs-srv.c+347−337
@@ -62,19 +62,19 @@ static inline struct rtrs_srv_con *to_srv_con(struct rtrs_con *c) · 61 unmodified lines
6262 return container_of(c, struct rtrs_srv_con, c);
6363 }
6464
65−static inline struct rtrs_srv_sess *to_srv_sess(struct rtrs_sess *s)
65+static inline struct rtrs_srv_path *to_srv_path(struct rtrs_path *s)
6666 {
67− return container_of(s, struct rtrs_srv_sess, s);
67+ return container_of(s, struct rtrs_srv_path, s);
6868 }
6969
70−static bool rtrs_srv_change_state(struct rtrs_srv_sess *sess,
70+static bool rtrs_srv_change_state(struct rtrs_srv_path *srv_path,
7171 enum rtrs_srv_state new_state)
7272 {
7373 enum rtrs_srv_state old_state;
7474 bool changed = false;
7575
76− spin_lock_irq(&sess->state_lock);
77− old_state = sess->state;
76+ spin_lock_irq(&srv_path->state_lock);
77+ old_state = srv_path->state;
7878 switch (new_state) {
7979 case RTRS_SRV_CONNECTED:
8080 if (old_state == RTRS_SRV_CONNECTING)
@@ -93,8 +93,8 @@ static bool rtrs_srv_change_state(struct rtrs_srv_sess *sess, · 12 unmodified lines
9393 break;
9494 }
9595 if (changed)
96− sess->state = new_state;
97− spin_unlock_irq(&sess->state_lock);
96+ srv_path->state = new_state;
97+ spin_unlock_irq(&srv_path->state_lock);
9898
9999 return changed;
100100 }
@@ -106,16 +106,16 @@ static void free_id(struct rtrs_srv_op *id) · 5 unmodified lines
106106 kfree(id);
107107 }
108108
109−static void rtrs_srv_free_ops_ids(struct rtrs_srv_sess *sess)
109+static void rtrs_srv_free_ops_ids(struct rtrs_srv_path *srv_path)
110110 {
111− struct rtrs_srv *srv = sess->srv;
111+ struct rtrs_srv_sess *srv = srv_path->srv;
112112 int i;
113113
114− if (sess->ops_ids) {
114+ if (srv_path->ops_ids) {
115115 for (i = 0; i < srv->queue_depth; i++)
116− free_id(sess->ops_ids[i]);
117− kfree(sess->ops_ids);
118− sess->ops_ids = NULL;
116+ free_id(srv_path->ops_ids[i]);
117+ kfree(srv_path->ops_ids);
118+ srv_path->ops_ids = NULL;
119119 }
120120 }
121121
@@ -127,21 +127,24 @@ static struct ib_cqe io_comp_cqe = { · 5 unmodified lines
127127
128128 static inline void rtrs_srv_inflight_ref_release(struct percpu_ref *ref)
129129 {
130− struct rtrs_srv_sess *sess = container_of(ref, struct rtrs_srv_sess, ids_inflight_ref);
130+ struct rtrs_srv_path *srv_path = container_of(ref,
131+ struct rtrs_srv_path,
132+ ids_inflight_ref);
131133
132− percpu_ref_exit(&sess->ids_inflight_ref);
133− complete(&sess->complete_done);
134+ percpu_ref_exit(&srv_path->ids_inflight_ref);
135+ complete(&srv_path->complete_done);
134136 }
135137
136−static int rtrs_srv_alloc_ops_ids(struct rtrs_srv_sess *sess)
138+static int rtrs_srv_alloc_ops_ids(struct rtrs_srv_path *srv_path)
137139 {
138− struct rtrs_srv *srv = sess->srv;
140+ struct rtrs_srv_sess *srv = srv_path->srv;
139141 struct rtrs_srv_op *id;
140142 int i, ret;
141143
142− sess->ops_ids = kcalloc(srv->queue_depth, sizeof(*sess->ops_ids),
143− GFP_KERNEL);
144− if (!sess->ops_ids)
144+ srv_path->ops_ids = kcalloc(srv->queue_depth,
145+ sizeof(*srv_path->ops_ids),
146+ GFP_KERNEL);
147+ if (!srv_path->ops_ids)
145148 goto err;
146149
147150 for (i = 0; i < srv->queue_depth; ++i) {
@@ -149,44 +152,44 @@ static int rtrs_srv_alloc_ops_ids(struct rtrs_srv_sess *sess) · 1 unmodified line
149152 if (!id)
150153 goto err;
151154
152− sess->ops_ids[i] = id;
155+ srv_path->ops_ids[i] = id;
153156 }
154157
155− ret = percpu_ref_init(&sess->ids_inflight_ref,
158+ ret = percpu_ref_init(&srv_path->ids_inflight_ref,
156159 rtrs_srv_inflight_ref_release, 0, GFP_KERNEL);
157160 if (ret) {
158161 pr_err("Percpu reference init failed\n");
159162 goto err;
160163 }
161− init_completion(&sess->complete_done);
164+ init_completion(&srv_path->complete_done);
162165
163166 return 0;
164167
165168 err:
166− rtrs_srv_free_ops_ids(sess);
169+ rtrs_srv_free_ops_ids(srv_path);
167170 return -ENOMEM;
168171 }
169172
170−static inline void rtrs_srv_get_ops_ids(struct rtrs_srv_sess *sess)
173+static inline void rtrs_srv_get_ops_ids(struct rtrs_srv_path *srv_path)
171174 {
172− percpu_ref_get(&sess->ids_inflight_ref);
175+ percpu_ref_get(&srv_path->ids_inflight_ref);
173176 }
174177
175−static inline void rtrs_srv_put_ops_ids(struct rtrs_srv_sess *sess)
178+static inline void rtrs_srv_put_ops_ids(struct rtrs_srv_path *srv_path)
176179 {
177− percpu_ref_put(&sess->ids_inflight_ref);
180+ percpu_ref_put(&srv_path->ids_inflight_ref);
178181 }
179182
180183 static void rtrs_srv_reg_mr_done(struct ib_cq *cq, struct ib_wc *wc)
181184 {
182185 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
183− struct rtrs_sess *s = con->c.sess;
184− struct rtrs_srv_sess *sess = to_srv_sess(s);
186+ struct rtrs_path *s = con->c.path;
187+ struct rtrs_srv_path *srv_path = to_srv_path(s);
185188
186189 if (wc->status != IB_WC_SUCCESS) {
187190 rtrs_err(s, "REG MR failed: %s\n",
188191 ib_wc_status_msg(wc->status));
189− close_sess(sess);
192+ close_path(srv_path);
190193 return;
191194 }
192195 }
@@ -197,9 +200,9 @@ static struct ib_cqe local_reg_cqe = { · 4 unmodified lines
197200
198201 static int rdma_write_sg(struct rtrs_srv_op *id)
199202 {
200− struct rtrs_sess *s = id->con->c.sess;
201− struct rtrs_srv_sess *sess = to_srv_sess(s);
202− dma_addr_t dma_addr = sess->dma_addr[id->msg_id];
203+ struct rtrs_path *s = id->con->c.path;
204+ struct rtrs_srv_path *srv_path = to_srv_path(s);
205+ dma_addr_t dma_addr = srv_path->dma_addr[id->msg_id];
203206 struct rtrs_srv_mr *srv_mr;
204207 struct ib_send_wr inv_wr;
205208 struct ib_rdma_wr imm_wr;
@@ -233,7 +236,7 @@ static int rdma_write_sg(struct rtrs_srv_op *id) · 27 unmodified lines
233236 return -EINVAL;
234237 }
235238
236− plist->lkey = sess->s.dev->ib_pd->local_dma_lkey;
239+ plist->lkey = srv_path->s.dev->ib_pd->local_dma_lkey;
237240 offset += plist->length;
238241
239242 wr->wr.sg_list = plist;
@@ -284,7 +287,7 @@ static int rdma_write_sg(struct rtrs_srv_op *id) · 44 unmodified lines
284287 if (always_invalidate) {
285288 struct rtrs_msg_rkey_rsp *msg;
286289
287− srv_mr = &sess->mrs[id->msg_id];
290+ srv_mr = &srv_path->mrs[id->msg_id];
288291 rwr.wr.opcode = IB_WR_REG_MR;
289292 rwr.wr.wr_cqe = &local_reg_cqe;
290293 rwr.wr.num_sge = 0;
@@ -300,11 +303,11 @@ static int rdma_write_sg(struct rtrs_srv_op *id) · 9 unmodified lines
300303
301304 list.addr = srv_mr->iu->dma_addr;
302305 list.length = sizeof(*msg);
303− list.lkey = sess->s.dev->ib_pd->local_dma_lkey;
306+ list.lkey = srv_path->s.dev->ib_pd->local_dma_lkey;
304307 imm_wr.wr.sg_list = &list;
305308 imm_wr.wr.num_sge = 1;
306309 imm_wr.wr.opcode = IB_WR_SEND_WITH_IMM;
307− ib_dma_sync_single_for_device(sess->s.dev->ib_dev,
310+ ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev,
308311 srv_mr->iu->dma_addr,
309312 srv_mr->iu->size, DMA_TO_DEVICE);
310313 } else {
@@ -317,7 +320,7 @@ static int rdma_write_sg(struct rtrs_srv_op *id) · 6 unmodified lines
317320 0, need_inval));
318321
319322 imm_wr.wr.wr_cqe = &io_comp_cqe;
320− ib_dma_sync_single_for_device(sess->s.dev->ib_dev, dma_addr,
323+ ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev, dma_addr,
321324 offset, DMA_BIDIRECTIONAL);
322325
323326 err = ib_post_send(id->con->c.qp, &id->tx_wr.wr, NULL);
@@ -341,8 +344,8 @@ static int rdma_write_sg(struct rtrs_srv_op *id) · 17 unmodified lines
341344 static int send_io_resp_imm(struct rtrs_srv_con *con, struct rtrs_srv_op *id,
342345 int errno)
343346 {
344− struct rtrs_sess *s = con->c.sess;
345− struct rtrs_srv_sess *sess = to_srv_sess(s);
347+ struct rtrs_path *s = con->c.path;
348+ struct rtrs_srv_path *srv_path = to_srv_path(s);
346349 struct ib_send_wr inv_wr, *wr = NULL;
347350 struct ib_rdma_wr imm_wr;
348351 struct ib_reg_wr rwr;
@@ -402,7 +405,7 @@ static int send_io_resp_imm(struct rtrs_srv_con *con, struct rtrs_srv_op *id, · 53 unmodified lines
402405 struct ib_sge list;
403406 struct rtrs_msg_rkey_rsp *msg;
404407
405− srv_mr = &sess->mrs[id->msg_id];
408+ srv_mr = &srv_path->mrs[id->msg_id];
406409 rwr.wr.next = &imm_wr.wr;
407410 rwr.wr.opcode = IB_WR_REG_MR;
408411 rwr.wr.wr_cqe = &local_reg_cqe;
@@ -419,11 +422,11 @@ static int send_io_resp_imm(struct rtrs_srv_con *con, struct rtrs_srv_op *id, · 10 unmodified lines
419422
420423 list.addr = srv_mr->iu->dma_addr;
421424 list.length = sizeof(*msg);
422− list.lkey = sess->s.dev->ib_pd->local_dma_lkey;
425+ list.lkey = srv_path->s.dev->ib_pd->local_dma_lkey;
423426 imm_wr.wr.sg_list = &list;
424427 imm_wr.wr.num_sge = 1;
425428 imm_wr.wr.opcode = IB_WR_SEND_WITH_IMM;
426− ib_dma_sync_single_for_device(sess->s.dev->ib_dev,
429+ ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev,
427430 srv_mr->iu->dma_addr,
428431 srv_mr->iu->size, DMA_TO_DEVICE);
429432 } else {
@@ -444,11 +447,11 @@ static int send_io_resp_imm(struct rtrs_srv_con *con, struct rtrs_srv_op *id, · 14 unmodified lines
444447 return err;
445448 }
446449
447−void close_sess(struct rtrs_srv_sess *sess)
450+void close_path(struct rtrs_srv_path *srv_path)
448451 {
449− if (rtrs_srv_change_state(sess, RTRS_SRV_CLOSING))
450− queue_work(rtrs_wq, &sess->close_work);
451− WARN_ON(sess->state != RTRS_SRV_CLOSING);
452+ if (rtrs_srv_change_state(srv_path, RTRS_SRV_CLOSING))
453+ queue_work(rtrs_wq, &srv_path->close_work);
454+ WARN_ON(srv_path->state != RTRS_SRV_CLOSING);
452455 }
453456
454457 static inline const char *rtrs_srv_state_str(enum rtrs_srv_state state)
@@ -480,35 +483,35 @@ static inline const char *rtrs_srv_state_str(enum rtrs_srv_state state) · 25 unmodified lines
480483 */
481484 bool rtrs_srv_resp_rdma(struct rtrs_srv_op *id, int status)
482485 {
483− struct rtrs_srv_sess *sess;
486+ struct rtrs_srv_path *srv_path;
484487 struct rtrs_srv_con *con;
485− struct rtrs_sess *s;
488+ struct rtrs_path *s;
486489 int err;
487490
488491 if (WARN_ON(!id))
489492 return true;
490493
491494 con = id->con;
492− s = con->c.sess;
493− sess = to_srv_sess(s);
495+ s = con->c.path;
496+ srv_path = to_srv_path(s);
494497
495498 id->status = status;
496499
497− if (sess->state != RTRS_SRV_CONNECTED) {
500+ if (srv_path->state != RTRS_SRV_CONNECTED) {
498501 rtrs_err_rl(s,
499− "Sending I/O response failed, session %s is disconnected, sess state %s\n",
500− kobject_name(&sess->kobj),
501− rtrs_srv_state_str(sess->state));
502+ "Sending I/O response failed, server path %s is disconnected, path state %s\n",
503+ kobject_name(&srv_path->kobj),
504+ rtrs_srv_state_str(srv_path->state));
502505 goto out;
503506 }
504507 if (always_invalidate) {
505− struct rtrs_srv_mr *mr = &sess->mrs[id->msg_id];
508+ struct rtrs_srv_mr *mr = &srv_path->mrs[id->msg_id];
506509
507510 ib_update_fast_reg_key(mr->mr, ib_inc_rkey(mr->mr->rkey));
508511 }
509512 if (atomic_sub_return(1, &con->c.sq_wr_avail) < 0) {
510− rtrs_err(s, "IB send queue full: sess=%s cid=%d\n",
511− kobject_name(&sess->kobj),
513+ rtrs_err(s, "IB send queue full: srv_path=%s cid=%d\n",
514+ kobject_name(&srv_path->kobj),
512515 con->c.cid);
513516 atomic_add(1, &con->c.sq_wr_avail);
514517 spin_lock(&con->rsp_wr_wait_lock);
@@ -523,12 +526,12 @@ bool rtrs_srv_resp_rdma(struct rtrs_srv_op *id, int status) · 8 unmodified lines
523526 err = rdma_write_sg(id);
524527
525528 if (err) {
526− rtrs_err_rl(s, "IO response failed: %d: sess=%s\n", err,
527− kobject_name(&sess->kobj));
528− close_sess(sess);
529+ rtrs_err_rl(s, "IO response failed: %d: srv_path=%s\n", err,
530+ kobject_name(&srv_path->kobj));
531+ close_path(srv_path);
529532 }
530533 out:
531− rtrs_srv_put_ops_ids(sess);
534+ rtrs_srv_put_ops_ids(srv_path);
532535 return true;
533536 }
534537 EXPORT_SYMBOL(rtrs_srv_resp_rdma);
@@ -538,33 +541,33 @@ EXPORT_SYMBOL(rtrs_srv_resp_rdma); · 3 unmodified lines
538541 * @srv: Session pointer
539542 * @priv: The private pointer that is associated with the session.
540543 */
541−void rtrs_srv_set_sess_priv(struct rtrs_srv *srv, void *priv)
544+void rtrs_srv_set_sess_priv(struct rtrs_srv_sess *srv, void *priv)
542545 {
543546 srv->priv = priv;
544547 }
545548 EXPORT_SYMBOL(rtrs_srv_set_sess_priv);
546549
547−static void unmap_cont_bufs(struct rtrs_srv_sess *sess)
550+static void unmap_cont_bufs(struct rtrs_srv_path *srv_path)
548551 {
549552 int i;
550553
551− for (i = 0; i < sess->mrs_num; i++) {
554+ for (i = 0; i < srv_path->mrs_num; i++) {
552555 struct rtrs_srv_mr *srv_mr;
553556
554− srv_mr = &sess->mrs[i];
555− rtrs_iu_free(srv_mr->iu, sess->s.dev->ib_dev, 1);
557+ srv_mr = &srv_path->mrs[i];
558+ rtrs_iu_free(srv_mr->iu, srv_path->s.dev->ib_dev, 1);
556559 ib_dereg_mr(srv_mr->mr);
557− ib_dma_unmap_sg(sess->s.dev->ib_dev, srv_mr->sgt.sgl,
560+ ib_dma_unmap_sg(srv_path->s.dev->ib_dev, srv_mr->sgt.sgl,
558561 srv_mr->sgt.nents, DMA_BIDIRECTIONAL);
559562 sg_free_table(&srv_mr->sgt);
560563 }
561− kfree(sess->mrs);
564+ kfree(srv_path->mrs);
562565 }
563566
564−static int map_cont_bufs(struct rtrs_srv_sess *sess)
567+static int map_cont_bufs(struct rtrs_srv_path *srv_path)
565568 {
566− struct rtrs_srv *srv = sess->srv;
567− struct rtrs_sess *ss = &sess->s;
569+ struct rtrs_srv_sess *srv = srv_path->srv;
570+ struct rtrs_path *ss = &srv_path->s;
568571 int i, mri, err, mrs_num;
569572 unsigned int chunk_bits;
570573 int chunks_per_mr = 1;
@@ -581,19 +584,19 @@ static int map_cont_bufs(struct rtrs_srv_sess *sess) · 10 unmodified lines
581584 mrs_num = srv->queue_depth;
582585 } else {
583586 chunks_per_mr =
584− sess->s.dev->ib_dev->attrs.max_fast_reg_page_list_len;
587+ srv_path->s.dev->ib_dev->attrs.max_fast_reg_page_list_len;
585588 mrs_num = DIV_ROUND_UP(srv->queue_depth, chunks_per_mr);
586589 chunks_per_mr = DIV_ROUND_UP(srv->queue_depth, mrs_num);
587590 }
588591
589− sess->mrs = kcalloc(mrs_num, sizeof(*sess->mrs), GFP_KERNEL);
590− if (!sess->mrs)
592+ srv_path->mrs = kcalloc(mrs_num, sizeof(*srv_path->mrs), GFP_KERNEL);
593+ if (!srv_path->mrs)
591594 return -ENOMEM;
592595
593− sess->mrs_num = mrs_num;
596+ srv_path->mrs_num = mrs_num;
594597
595598 for (mri = 0; mri < mrs_num; mri++) {
596− struct rtrs_srv_mr *srv_mr = &sess->mrs[mri];
599+ struct rtrs_srv_mr *srv_mr = &srv_path->mrs[mri];
597600 struct sg_table *sgt = &srv_mr->sgt;
598601 struct scatterlist *s;
599602 struct ib_mr *mr;
@@ -612,13 +615,13 @@ static int map_cont_bufs(struct rtrs_srv_sess *sess) · 12 unmodified lines
612615 sg_set_page(s, srv->chunks[chunks + i],
613616 max_chunk_size, 0);
614617
615− nr = ib_dma_map_sg(sess->s.dev->ib_dev, sgt->sgl,
618+ nr = ib_dma_map_sg(srv_path->s.dev->ib_dev, sgt->sgl,
616619 sgt->nents, DMA_BIDIRECTIONAL);
617620 if (nr < sgt->nents) {
618621 err = nr < 0 ? nr : -EINVAL;
619622 goto free_sg;
620623 }
621− mr = ib_alloc_mr(sess->s.dev->ib_pd, IB_MR_TYPE_MEM_REG,
624+ mr = ib_alloc_mr(srv_path->s.dev->ib_pd, IB_MR_TYPE_MEM_REG,
622625 sgt->nents);
623626 if (IS_ERR(mr)) {
624627 err = PTR_ERR(mr);
@@ -634,7 +637,7 @@ static int map_cont_bufs(struct rtrs_srv_sess *sess) · 9 unmodified lines
634637 if (always_invalidate) {
635638 srv_mr->iu = rtrs_iu_alloc(1,
636639 sizeof(struct rtrs_msg_rkey_rsp),
637− GFP_KERNEL, sess->s.dev->ib_dev,
640+ GFP_KERNEL, srv_path->s.dev->ib_dev,
638641 DMA_TO_DEVICE, rtrs_srv_rdma_done);
639642 if (!srv_mr->iu) {
640643 err = -ENOMEM;
@@ -644,7 +647,7 @@ static int map_cont_bufs(struct rtrs_srv_sess *sess) · 3 unmodified lines
644647 }
645648 /* Eventually dma addr for each chunk can be cached */
646649 for_each_sg(sgt->sgl, s, sgt->orig_nents, i)
647− sess->dma_addr[chunks + i] = sg_dma_address(s);
650+ srv_path->dma_addr[chunks + i] = sg_dma_address(s);
648651
649652 ib_update_fast_reg_key(mr, ib_inc_rkey(mr->rkey));
650653 srv_mr->mr = mr;
@@ -652,75 +655,75 @@ static int map_cont_bufs(struct rtrs_srv_sess *sess) · 1 unmodified line
652655 continue;
653656 err:
654657 while (mri--) {
655− srv_mr = &sess->mrs[mri];
658+ srv_mr = &srv_path->mrs[mri];
656659 sgt = &srv_mr->sgt;
657660 mr = srv_mr->mr;
658− rtrs_iu_free(srv_mr->iu, sess->s.dev->ib_dev, 1);
661+ rtrs_iu_free(srv_mr->iu, srv_path->s.dev->ib_dev, 1);
659662 dereg_mr:
660663 ib_dereg_mr(mr);
661664 unmap_sg:
662− ib_dma_unmap_sg(sess->s.dev->ib_dev, sgt->sgl,
665+ ib_dma_unmap_sg(srv_path->s.dev->ib_dev, sgt->sgl,
663666 sgt->nents, DMA_BIDIRECTIONAL);
664667 free_sg:
665668 sg_free_table(sgt);
666669 }
667− kfree(sess->mrs);
670+ kfree(srv_path->mrs);
668671
669672 return err;
670673 }
671674
672675 chunk_bits = ilog2(srv->queue_depth - 1) + 1;
673− sess->mem_bits = (MAX_IMM_PAYL_BITS - chunk_bits);
676+ srv_path->mem_bits = (MAX_IMM_PAYL_BITS - chunk_bits);
674677
675678 return 0;
676679 }
677680
678681 static void rtrs_srv_hb_err_handler(struct rtrs_con *c)
679682 {
680− close_sess(to_srv_sess(c->sess));
683+ close_path(to_srv_path(c->path));
681684 }
682685
683−static void rtrs_srv_init_hb(struct rtrs_srv_sess *sess)
686+static void rtrs_srv_init_hb(struct rtrs_srv_path *srv_path)
684687 {
685− rtrs_init_hb(&sess->s, &io_comp_cqe,
688+ rtrs_init_hb(&srv_path->s, &io_comp_cqe,
686689 RTRS_HB_INTERVAL_MS,
687690 RTRS_HB_MISSED_MAX,
688691 rtrs_srv_hb_err_handler,
689692 rtrs_wq);
690693 }
691694
692−static void rtrs_srv_start_hb(struct rtrs_srv_sess *sess)
695+static void rtrs_srv_start_hb(struct rtrs_srv_path *srv_path)
693696 {
694− rtrs_start_hb(&sess->s);
697+ rtrs_start_hb(&srv_path->s);
695698 }
696699
697−static void rtrs_srv_stop_hb(struct rtrs_srv_sess *sess)
700+static void rtrs_srv_stop_hb(struct rtrs_srv_path *srv_path)
698701 {
699− rtrs_stop_hb(&sess->s);
702+ rtrs_stop_hb(&srv_path->s);
700703 }
701704
702705 static void rtrs_srv_info_rsp_done(struct ib_cq *cq, struct ib_wc *wc)
703706 {
704707 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
705− struct rtrs_sess *s = con->c.sess;
706− struct rtrs_srv_sess *sess = to_srv_sess(s);
708+ struct rtrs_path *s = con->c.path;
709+ struct rtrs_srv_path *srv_path = to_srv_path(s);
707710 struct rtrs_iu *iu;
708711
709712 iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe);
710− rtrs_iu_free(iu, sess->s.dev->ib_dev, 1);
713+ rtrs_iu_free(iu, srv_path->s.dev->ib_dev, 1);
711714
712715 if (wc->status != IB_WC_SUCCESS) {
713716 rtrs_err(s, "Sess info response send failed: %s\n",
714717 ib_wc_status_msg(wc->status));
715− close_sess(sess);
718+ close_path(srv_path);
716719 return;
717720 }
718721 WARN_ON(wc->opcode != IB_WC_SEND);
719722 }
720723
721−static void rtrs_srv_sess_up(struct rtrs_srv_sess *sess)
724+static void rtrs_srv_path_up(struct rtrs_srv_path *srv_path)
722725 {
723− struct rtrs_srv *srv = sess->srv;
726+ struct rtrs_srv_sess *srv = srv_path->srv;
724727 struct rtrs_srv_ctx *ctx = srv->ctx;
725728 int up;
726729
@@ -731,18 +734,18 @@ static void rtrs_srv_sess_up(struct rtrs_srv_sess *sess) · 4 unmodified lines
731734 mutex_unlock(&srv->paths_ev_mutex);
732735
733736 /* Mark session as established */
734− sess->established = true;
737+ srv_path->established = true;
735738 }
736739
737−static void rtrs_srv_sess_down(struct rtrs_srv_sess *sess)
740+static void rtrs_srv_path_down(struct rtrs_srv_path *srv_path)
738741 {
739− struct rtrs_srv *srv = sess->srv;
742+ struct rtrs_srv_sess *srv = srv_path->srv;
740743 struct rtrs_srv_ctx *ctx = srv->ctx;
741744
742− if (!sess->established)
745+ if (!srv_path->established)
743746 return;
744747
745− sess->established = false;
748+ srv_path->established = false;
746749 mutex_lock(&srv->paths_ev_mutex);
747750 WARN_ON(!srv->paths_up);
748751 if (--srv->paths_up == 0)
@@ -750,11 +753,11 @@ static void rtrs_srv_sess_down(struct rtrs_srv_sess *sess) · 1 unmodified line
750753 mutex_unlock(&srv->paths_ev_mutex);
751754 }
752755
753−static bool exist_sessname(struct rtrs_srv_ctx *ctx,
754− const char *sessname, const uuid_t *path_uuid)
756+static bool exist_pathname(struct rtrs_srv_ctx *ctx,
757+ const char *pathname, const uuid_t *path_uuid)
755758 {
756− struct rtrs_srv *srv;
757− struct rtrs_srv_sess *sess;
759+ struct rtrs_srv_sess *srv;
760+ struct rtrs_srv_path *srv_path;
758761 bool found = false;
759762
760763 mutex_lock(&ctx->srv_mutex);
@@ -767,9 +770,9 @@ static bool exist_sessname(struct rtrs_srv_ctx *ctx, · 6 unmodified lines
767770 continue;
768771 }
769772
770− list_for_each_entry(sess, &srv->paths_list, s.entry) {
771− if (strlen(sess->s.sessname) == strlen(sessname) &&
772− !strcmp(sess->s.sessname, sessname)) {
773+ list_for_each_entry(srv_path, &srv->paths_list, s.entry) {
774+ if (strlen(srv_path->s.sessname) == strlen(pathname) &&
775+ !strcmp(srv_path->s.sessname, pathname)) {
773776 found = true;
774777 break;
775778 }
@@ -782,14 +785,14 @@ static bool exist_sessname(struct rtrs_srv_ctx *ctx, · 6 unmodified lines
782785 return found;
783786 }
784787
785−static int post_recv_sess(struct rtrs_srv_sess *sess);
788+static int post_recv_path(struct rtrs_srv_path *srv_path);
786789 static int rtrs_rdma_do_reject(struct rdma_cm_id *cm_id, int errno);
787790
788791 static int process_info_req(struct rtrs_srv_con *con,
789792 struct rtrs_msg_info_req *msg)
790793 {
791− struct rtrs_sess *s = con->c.sess;
792− struct rtrs_srv_sess *sess = to_srv_sess(s);
794+ struct rtrs_path *s = con->c.path;
795+ struct rtrs_srv_path *srv_path = to_srv_path(s);
793796 struct ib_send_wr *reg_wr = NULL;
794797 struct rtrs_msg_info_rsp *rsp;
795798 struct rtrs_iu *tx_iu;
@@ -797,31 +800,32 @@ static int process_info_req(struct rtrs_srv_con *con, · 1 unmodified line
797800 int mri, err;
798801 size_t tx_sz;
799802
800− err = post_recv_sess(sess);
803+ err = post_recv_path(srv_path);
801804 if (err) {
802− rtrs_err(s, "post_recv_sess(), err: %d\n", err);
805+ rtrs_err(s, "post_recv_path(), err: %d\n", err);
803806 return err;
804807 }
805808
806− if (strchr(msg->sessname, '/') || strchr(msg->sessname, '.')) {
807− rtrs_err(s, "sessname cannot contain / and .\n");
809+ if (strchr(msg->pathname, '/') || strchr(msg->pathname, '.')) {
810+ rtrs_err(s, "pathname cannot contain / and .\n");
808811 return -EINVAL;
809812 }
810813
811− if (exist_sessname(sess->srv->ctx,
812− msg->sessname, &sess->srv->paths_uuid)) {
813− rtrs_err(s, "sessname is duplicated: %s\n", msg->sessname);
814+ if (exist_pathname(srv_path->srv->ctx,
815+ msg->pathname, &srv_path->srv->paths_uuid)) {
816+ rtrs_err(s, "pathname is duplicated: %s\n", msg->pathname);
814817 return -EPERM;
815818 }
816− strscpy(sess->s.sessname, msg->sessname, sizeof(sess->s.sessname));
819+ strscpy(srv_path->s.sessname, msg->pathname,
820+ sizeof(srv_path->s.sessname));
817821
818− rwr = kcalloc(sess->mrs_num, sizeof(*rwr), GFP_KERNEL);
822+ rwr = kcalloc(srv_path->mrs_num, sizeof(*rwr), GFP_KERNEL);
819823 if (!rwr)
820824 return -ENOMEM;
821825
822826 tx_sz = sizeof(*rsp);
823− tx_sz += sizeof(rsp->desc[0]) * sess->mrs_num;
824− tx_iu = rtrs_iu_alloc(1, tx_sz, GFP_KERNEL, sess->s.dev->ib_dev,
827+ tx_sz += sizeof(rsp->desc[0]) * srv_path->mrs_num;
828+ tx_iu = rtrs_iu_alloc(1, tx_sz, GFP_KERNEL, srv_path->s.dev->ib_dev,
825829 DMA_TO_DEVICE, rtrs_srv_info_rsp_done);
826830 if (!tx_iu) {
827831 err = -ENOMEM;
@@ -830,10 +834,10 @@ static int process_info_req(struct rtrs_srv_con *con, · 2 unmodified lines
830834
831835 rsp = tx_iu->buf;
832836 rsp->type = cpu_to_le16(RTRS_MSG_INFO_RSP);
833− rsp->sg_cnt = cpu_to_le16(sess->mrs_num);
837+ rsp->sg_cnt = cpu_to_le16(srv_path->mrs_num);
834838
835− for (mri = 0; mri < sess->mrs_num; mri++) {
836− struct ib_mr *mr = sess->mrs[mri].mr;
839+ for (mri = 0; mri < srv_path->mrs_num; mri++) {
840+ struct ib_mr *mr = srv_path->mrs[mri].mr;
837841
838842 rsp->desc[mri].addr = cpu_to_le64(mr->iova);
839843 rsp->desc[mri].key = cpu_to_le32(mr->rkey);
@@ -854,13 +858,13 @@ static int process_info_req(struct rtrs_srv_con *con, · 14 unmodified lines
854858 reg_wr = &rwr[mri].wr;
855859 }
856860
857− err = rtrs_srv_create_sess_files(sess);
861+ err = rtrs_srv_create_path_files(srv_path);
858862 if (err)
859863 goto iu_free;
860− kobject_get(&sess->kobj);
861− get_device(&sess->srv->dev);
862− rtrs_srv_change_state(sess, RTRS_SRV_CONNECTED);
863− rtrs_srv_start_hb(sess);
864+ kobject_get(&srv_path->kobj);
865+ get_device(&srv_path->srv->dev);
866+ rtrs_srv_change_state(srv_path, RTRS_SRV_CONNECTED);
867+ rtrs_srv_start_hb(srv_path);
864868
865869 /*
866870 * We do not account number of established connections at the current
@@ -868,9 +872,10 @@ static int process_info_req(struct rtrs_srv_con *con, · 1 unmodified line
868872 * all connections are successfully established. Thus, simply notify
869873 * listener with a proper event if we are the first path.
870874 */
871− rtrs_srv_sess_up(sess);
875+ rtrs_srv_path_up(srv_path);
872876
873− ib_dma_sync_single_for_device(sess->s.dev->ib_dev, tx_iu->dma_addr,
877+ ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev,
878+ tx_iu->dma_addr,
874879 tx_iu->size, DMA_TO_DEVICE);
875880
876881 /* Send info response */
@@ -878,7 +883,7 @@ static int process_info_req(struct rtrs_srv_con *con, · 1 unmodified line
878883 if (err) {
879884 rtrs_err(s, "rtrs_iu_post_send(), err: %d\n", err);
880885 iu_free:
881− rtrs_iu_free(tx_iu, sess->s.dev->ib_dev, 1);
886+ rtrs_iu_free(tx_iu, srv_path->s.dev->ib_dev, 1);
882887 }
883888 rwr_free:
884889 kfree(rwr);
@@ -889,8 +894,8 @@ rwr_free: · 4 unmodified lines
889894 static void rtrs_srv_info_req_done(struct ib_cq *cq, struct ib_wc *wc)
890895 {
891896 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
892− struct rtrs_sess *s = con->c.sess;
893− struct rtrs_srv_sess *sess = to_srv_sess(s);
897+ struct rtrs_path *s = con->c.path;
898+ struct rtrs_srv_path *srv_path = to_srv_path(s);
894899 struct rtrs_msg_info_req *msg;
895900 struct rtrs_iu *iu;
896901 int err;
@@ -910,7 +915,7 @@ static void rtrs_srv_info_req_done(struct ib_cq *cq, struct ib_wc *wc) · 13 unmodified lines
910915 wc->byte_len);
911916 goto close;
912917 }
913− ib_dma_sync_single_for_cpu(sess->s.dev->ib_dev, iu->dma_addr,
918+ ib_dma_sync_single_for_cpu(srv_path->s.dev->ib_dev, iu->dma_addr,
914919 iu->size, DMA_FROM_DEVICE);
915920 msg = iu->buf;
916921 if (le16_to_cpu(msg->type) != RTRS_MSG_INFO_REQ) {
@@ -923,22 +928,22 @@ static void rtrs_srv_info_req_done(struct ib_cq *cq, struct ib_wc *wc) · 6 unmodified lines
923928 goto close;
924929
925930 out:
926− rtrs_iu_free(iu, sess->s.dev->ib_dev, 1);
931+ rtrs_iu_free(iu, srv_path->s.dev->ib_dev, 1);
927932 return;
928933 close:
929− close_sess(sess);
934+ close_path(srv_path);
930935 goto out;
931936 }
932937
933938 static int post_recv_info_req(struct rtrs_srv_con *con)
934939 {
935− struct rtrs_sess *s = con->c.sess;
936− struct rtrs_srv_sess *sess = to_srv_sess(s);
940+ struct rtrs_path *s = con->c.path;
941+ struct rtrs_srv_path *srv_path = to_srv_path(s);
937942 struct rtrs_iu *rx_iu;
938943 int err;
939944
940945 rx_iu = rtrs_iu_alloc(1, sizeof(struct rtrs_msg_info_req),
941− GFP_KERNEL, sess->s.dev->ib_dev,
946+ GFP_KERNEL, srv_path->s.dev->ib_dev,
942947 DMA_FROM_DEVICE, rtrs_srv_info_req_done);
943948 if (!rx_iu)
944949 return -ENOMEM;
@@ -946,7 +951,7 @@ static int post_recv_info_req(struct rtrs_srv_con *con) · 1 unmodified line
946951 err = rtrs_iu_post_recv(&con->c, rx_iu);
947952 if (err) {
948953 rtrs_err(s, "rtrs_iu_post_recv(), err: %d\n", err);
949− rtrs_iu_free(rx_iu, sess->s.dev->ib_dev, 1);
954+ rtrs_iu_free(rx_iu, srv_path->s.dev->ib_dev, 1);
950955 return err;
951956 }
952957
@@ -966,20 +971,20 @@ static int post_recv_io(struct rtrs_srv_con *con, size_t q_size) · 13 unmodified lines
966971 return 0;
967972 }
968973
969−static int post_recv_sess(struct rtrs_srv_sess *sess)
974+static int post_recv_path(struct rtrs_srv_path *srv_path)
970975 {
971− struct rtrs_srv *srv = sess->srv;
972− struct rtrs_sess *s = &sess->s;
976+ struct rtrs_srv_sess *srv = srv_path->srv;
977+ struct rtrs_path *s = &srv_path->s;
973978 size_t q_size;
974979 int err, cid;
975980
976− for (cid = 0; cid < sess->s.con_num; cid++) {
981+ for (cid = 0; cid < srv_path->s.con_num; cid++) {
977982 if (cid == 0)
978983 q_size = SERVICE_CON_QUEUE_DEPTH;
979984 else
980985 q_size = srv->queue_depth;
981986
982− err = post_recv_io(to_srv_con(sess->s.con[cid]), q_size);
987+ err = post_recv_io(to_srv_con(srv_path->s.con[cid]), q_size);
983988 if (err) {
984989 rtrs_err(s, "post_recv_io(), err: %d\n", err);
985990 return err;
@@ -993,9 +998,9 @@ static void process_read(struct rtrs_srv_con *con, · 7 unmodified lines
993998 struct rtrs_msg_rdma_read *msg,
994999 u32 buf_id, u32 off)
9951000 {
996− struct rtrs_sess *s = con->c.sess;
997− struct rtrs_srv_sess *sess = to_srv_sess(s);
998− struct rtrs_srv *srv = sess->srv;
1001+ struct rtrs_path *s = con->c.path;
1002+ struct rtrs_srv_path *srv_path = to_srv_path(s);
1003+ struct rtrs_srv_sess *srv = srv_path->srv;
9991004 struct rtrs_srv_ctx *ctx = srv->ctx;
10001005 struct rtrs_srv_op *id;
10011006
@@ -1003,10 +1008,10 @@ static void process_read(struct rtrs_srv_con *con, · 1 unmodified line
10031008 void *data;
10041009 int ret;
10051010
1006− if (sess->state != RTRS_SRV_CONNECTED) {
1011+ if (srv_path->state != RTRS_SRV_CONNECTED) {
10071012 rtrs_err_rl(s,
10081013 "Processing read request failed, session is disconnected, sess state %s\n",
1009− rtrs_srv_state_str(sess->state));
1014+ rtrs_srv_state_str(srv_path->state));
10101015 return;
10111016 }
10121017 if (msg->sg_cnt != 1 && msg->sg_cnt != 0) {
@@ -1014,9 +1019,9 @@ static void process_read(struct rtrs_srv_con *con, · 1 unmodified line
10141019 "Processing read request failed, invalid message\n");
10151020 return;
10161021 }
1017− rtrs_srv_get_ops_ids(sess);
1018− rtrs_srv_update_rdma_stats(sess->stats, off, READ);
1019− id = sess->ops_ids[buf_id];
1022+ rtrs_srv_get_ops_ids(srv_path);
1023+ rtrs_srv_update_rdma_stats(srv_path->stats, off, READ);
1024+ id = srv_path->ops_ids[buf_id];
10201025 id->con = con;
10211026 id->dir = READ;
10221027 id->msg_id = buf_id;
@@ -1042,18 +1047,18 @@ send_err_msg: · 19 unmodified lines
10421047 rtrs_err_rl(s,
10431048 "Sending err msg for failed RDMA-Write-Req failed, msg_id %d, err: %d\n",
10441049 buf_id, ret);
1045− close_sess(sess);
1050+ close_path(srv_path);
10461051 }
1047− rtrs_srv_put_ops_ids(sess);
1052+ rtrs_srv_put_ops_ids(srv_path);
10481053 }
10491054
10501055 static void process_write(struct rtrs_srv_con *con,
10511056 struct rtrs_msg_rdma_write *req,
10521057 u32 buf_id, u32 off)
10531058 {
1054− struct rtrs_sess *s = con->c.sess;
1055− struct rtrs_srv_sess *sess = to_srv_sess(s);
1056− struct rtrs_srv *srv = sess->srv;
1059+ struct rtrs_path *s = con->c.path;
1060+ struct rtrs_srv_path *srv_path = to_srv_path(s);
1061+ struct rtrs_srv_sess *srv = srv_path->srv;
10571062 struct rtrs_srv_ctx *ctx = srv->ctx;
10581063 struct rtrs_srv_op *id;
10591064
@@ -1061,15 +1066,15 @@ static void process_write(struct rtrs_srv_con *con, · 1 unmodified line
10611066 void *data;
10621067 int ret;
10631068
1064− if (sess->state != RTRS_SRV_CONNECTED) {
1069+ if (srv_path->state != RTRS_SRV_CONNECTED) {
10651070 rtrs_err_rl(s,
10661071 "Processing write request failed, session is disconnected, sess state %s\n",
1067− rtrs_srv_state_str(sess->state));
1072+ rtrs_srv_state_str(srv_path->state));
10681073 return;
10691074 }
1070− rtrs_srv_get_ops_ids(sess);
1071− rtrs_srv_update_rdma_stats(sess->stats, off, WRITE);
1072− id = sess->ops_ids[buf_id];
1075+ rtrs_srv_get_ops_ids(srv_path);
1076+ rtrs_srv_update_rdma_stats(srv_path->stats, off, WRITE);
1077+ id = srv_path->ops_ids[buf_id];
10731078 id->con = con;
10741079 id->dir = WRITE;
10751080 id->msg_id = buf_id;
@@ -1094,20 +1099,21 @@ send_err_msg: · 18 unmodified lines
10941099 rtrs_err_rl(s,
10951100 "Processing write request failed, sending I/O response failed, msg_id %d, err: %d\n",
10961101 buf_id, ret);
1097− close_sess(sess);
1102+ close_path(srv_path);
10981103 }
1099− rtrs_srv_put_ops_ids(sess);
1104+ rtrs_srv_put_ops_ids(srv_path);
11001105 }
11011106
11021107 static void process_io_req(struct rtrs_srv_con *con, void *msg,
11031108 u32 id, u32 off)
11041109 {
1105− struct rtrs_sess *s = con->c.sess;
1106− struct rtrs_srv_sess *sess = to_srv_sess(s);
1110+ struct rtrs_path *s = con->c.path;
1111+ struct rtrs_srv_path *srv_path = to_srv_path(s);
11071112 struct rtrs_msg_rdma_hdr *hdr;
11081113 unsigned int type;
11091114
1110− ib_dma_sync_single_for_cpu(sess->s.dev->ib_dev, sess->dma_addr[id],
1115+ ib_dma_sync_single_for_cpu(srv_path->s.dev->ib_dev,
1116+ srv_path->dma_addr[id],
11111117 max_chunk_size, DMA_BIDIRECTIONAL);
11121118 hdr = msg;
11131119 type = le16_to_cpu(hdr->type);
@@ -1129,7 +1135,7 @@ static void process_io_req(struct rtrs_srv_con *con, void *msg, · 15 unmodified lines
11291135 return;
11301136
11311137 err:
1132− close_sess(sess);
1138+ close_path(srv_path);
11331139 }
11341140
11351141 static void rtrs_srv_inv_rkey_done(struct ib_cq *cq, struct ib_wc *wc)
@@ -1137,16 +1143,16 @@ static void rtrs_srv_inv_rkey_done(struct ib_cq *cq, struct ib_wc *wc) · 1 unmodified line
11371143 struct rtrs_srv_mr *mr =
11381144 container_of(wc->wr_cqe, typeof(*mr), inv_cqe);
11391145 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
1140− struct rtrs_sess *s = con->c.sess;
1141− struct rtrs_srv_sess *sess = to_srv_sess(s);
1142− struct rtrs_srv *srv = sess->srv;
1146+ struct rtrs_path *s = con->c.path;
1147+ struct rtrs_srv_path *srv_path = to_srv_path(s);
1148+ struct rtrs_srv_sess *srv = srv_path->srv;
11431149 u32 msg_id, off;
11441150 void *data;
11451151
11461152 if (wc->status != IB_WC_SUCCESS) {
11471153 rtrs_err(s, "Failed IB_WR_LOCAL_INV: %s\n",
11481154 ib_wc_status_msg(wc->status));
1149− close_sess(sess);
1155+ close_path(srv_path);
11501156 }
11511157 msg_id = mr->msg_id;
11521158 off = mr->msg_off;
@@ -1194,9 +1200,9 @@ static void rtrs_rdma_process_wr_wait_list(struct rtrs_srv_con *con) · 41 unmodified lines
11941200 static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc)
11951201 {
11961202 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
1197− struct rtrs_sess *s = con->c.sess;
1198− struct rtrs_srv_sess *sess = to_srv_sess(s);
1199− struct rtrs_srv *srv = sess->srv;
1203+ struct rtrs_path *s = con->c.path;
1204+ struct rtrs_srv_path *srv_path = to_srv_path(s);
1205+ struct rtrs_srv_sess *srv = srv_path->srv;
12001206 u32 imm_type, imm_payload;
12011207 int err;
12021208
@@ -1206,7 +1212,7 @@ static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc) · 3 unmodified lines
12061212 "%s (wr_cqe: %p, type: %d, vendor_err: 0x%x, len: %u)\n",
12071213 ib_wc_status_msg(wc->status), wc->wr_cqe,
12081214 wc->opcode, wc->vendor_err, wc->byte_len);
1209− close_sess(sess);
1215+ close_path(srv_path);
12101216 }
12111217 return;
12121218 }
@@ -1222,7 +1228,7 @@ static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc) · 9 unmodified lines
12221228 err = rtrs_post_recv_empty(&con->c, &io_comp_cqe);
12231229 if (err) {
12241230 rtrs_err(s, "rtrs_post_recv(), err: %d\n", err);
1225− close_sess(sess);
1231+ close_path(srv_path);
12261232 break;
12271233 }
12281234 rtrs_from_imm(be32_to_cpu(wc->ex.imm_data),
@@ -1231,16 +1237,16 @@ static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc) · 2 unmodified lines
12311237 u32 msg_id, off;
12321238 void *data;
12331239
1234− msg_id = imm_payload >> sess->mem_bits;
1235− off = imm_payload & ((1 << sess->mem_bits) - 1);
1240+ msg_id = imm_payload >> srv_path->mem_bits;
1241+ off = imm_payload & ((1 << srv_path->mem_bits) - 1);
12361242 if (msg_id >= srv->queue_depth || off >= max_chunk_size) {
12371243 rtrs_err(s, "Wrong msg_id %u, off %u\n",
12381244 msg_id, off);
1239− close_sess(sess);
1245+ close_path(srv_path);
12401246 return;
12411247 }
12421248 if (always_invalidate) {
1243− struct rtrs_srv_mr *mr = &sess->mrs[msg_id];
1249+ struct rtrs_srv_mr *mr = &srv_path->mrs[msg_id];
12441250
12451251 mr->msg_off = off;
12461252 mr->msg_id = msg_id;
@@ -1248,7 +1254,7 @@ static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc) · 1 unmodified line
12481254 if (err) {
12491255 rtrs_err(s, "rtrs_post_recv(), err: %d\n",
12501256 err);
1251− close_sess(sess);
1257+ close_path(srv_path);
12521258 break;
12531259 }
12541260 } else {
@@ -1257,10 +1263,10 @@ static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc) · 2 unmodified lines
12571263 }
12581264 } else if (imm_type == RTRS_HB_MSG_IMM) {
12591265 WARN_ON(con->c.cid);
1260− rtrs_send_hb_ack(&sess->s);
1266+ rtrs_send_hb_ack(&srv_path->s);
12611267 } else if (imm_type == RTRS_HB_ACK_IMM) {
12621268 WARN_ON(con->c.cid);
1263− sess->s.hb_missed_cnt = 0;
1269+ srv_path->s.hb_missed_cnt = 0;
12641270 } else {
12651271 rtrs_wrn(s, "Unknown IMM type %u\n", imm_type);
12661272 }
@@ -1284,22 +1290,23 @@ static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc) · 17 unmodified lines
12841290 }
12851291
12861292 /**
1287− * rtrs_srv_get_sess_name() - Get rtrs_srv peer hostname.
1293+ * rtrs_srv_get_path_name() - Get rtrs_srv peer hostname.
12881294 * @srv: Session
1289− * @sessname: Sessname buffer
1295+ * @pathname: Pathname buffer
12901296 * @len: Length of sessname buffer
12911297 */
1292−int rtrs_srv_get_sess_name(struct rtrs_srv *srv, char *sessname, size_t len)
1298+int rtrs_srv_get_path_name(struct rtrs_srv_sess *srv, char *pathname,
1299+ size_t len)
12931300 {
1294− struct rtrs_srv_sess *sess;
1301+ struct rtrs_srv_path *srv_path;
12951302 int err = -ENOTCONN;
12961303
12971304 mutex_lock(&srv->paths_mutex);
1298− list_for_each_entry(sess, &srv->paths_list, s.entry) {
1299− if (sess->state != RTRS_SRV_CONNECTED)
1305+ list_for_each_entry(srv_path, &srv->paths_list, s.entry) {
1306+ if (srv_path->state != RTRS_SRV_CONNECTED)
13001307 continue;
1301− strscpy(sessname, sess->s.sessname,
1302− min_t(size_t, sizeof(sess->s.sessname), len));
1308+ strscpy(pathname, srv_path->s.sessname,
1309+ min_t(size_t, sizeof(srv_path->s.sessname), len));
13031310 err = 0;
13041311 break;
13051312 }
@@ -1307,44 +1314,45 @@ int rtrs_srv_get_sess_name(struct rtrs_srv *srv, char *sessname, size_t len) · 1 unmodified line
13071314
13081315 return err;
13091316 }
1310−EXPORT_SYMBOL(rtrs_srv_get_sess_name);
1317+EXPORT_SYMBOL(rtrs_srv_get_path_name);
13111318
13121319 /**
13131320 * rtrs_srv_get_queue_depth() - Get rtrs_srv qdepth.
13141321 * @srv: Session
13151322 */
1316−int rtrs_srv_get_queue_depth(struct rtrs_srv *srv)
1323+int rtrs_srv_get_queue_depth(struct rtrs_srv_sess *srv)
13171324 {
13181325 return srv->queue_depth;
13191326 }
13201327 EXPORT_SYMBOL(rtrs_srv_get_queue_depth);
13211328
1322−static int find_next_bit_ring(struct rtrs_srv_sess *sess)
1329+static int find_next_bit_ring(struct rtrs_srv_path *srv_path)
13231330 {
1324− struct ib_device *ib_dev = sess->s.dev->ib_dev;
1331+ struct ib_device *ib_dev = srv_path->s.dev->ib_dev;
13251332 int v;
13261333
1327− v = cpumask_next(sess->cur_cq_vector, &cq_affinity_mask);
1334+ v = cpumask_next(srv_path->cur_cq_vector, &cq_affinity_mask);
13281335 if (v >= nr_cpu_ids || v >= ib_dev->num_comp_vectors)
13291336 v = cpumask_first(&cq_affinity_mask);
13301337 return v;
13311338 }
13321339
1333−static int rtrs_srv_get_next_cq_vector(struct rtrs_srv_sess *sess)
1340+static int rtrs_srv_get_next_cq_vector(struct rtrs_srv_path *srv_path)
13341341 {
1335− sess->cur_cq_vector = find_next_bit_ring(sess);
1342+ srv_path->cur_cq_vector = find_next_bit_ring(srv_path);
13361343
1337− return sess->cur_cq_vector;
1344+ return srv_path->cur_cq_vector;
13381345 }
13391346
13401347 static void rtrs_srv_dev_release(struct device *dev)
13411348 {
1342− struct rtrs_srv *srv = container_of(dev, struct rtrs_srv, dev);
1349+ struct rtrs_srv_sess *srv = container_of(dev, struct rtrs_srv_sess,
1350+ dev);
13431351
13441352 kfree(srv);
13451353 }
13461354
1347−static void free_srv(struct rtrs_srv *srv)
1355+static void free_srv(struct rtrs_srv_sess *srv)
13481356 {
13491357 int i;
13501358
@@ -1358,11 +1366,11 @@ static void free_srv(struct rtrs_srv *srv) · 7 unmodified lines
13581366 put_device(&srv->dev);
13591367 }
13601368
1361−static struct rtrs_srv *get_or_create_srv(struct rtrs_srv_ctx *ctx,
1369+static struct rtrs_srv_sess *get_or_create_srv(struct rtrs_srv_ctx *ctx,
13621370 const uuid_t *paths_uuid,
13631371 bool first_conn)
13641372 {
1365− struct rtrs_srv *srv;
1373+ struct rtrs_srv_sess *srv;
13661374 int i;
13671375
13681376 mutex_lock(&ctx->srv_mutex);
@@ -1424,7 +1432,7 @@ err_free_srv: · 55 unmodified lines
14241432 return ERR_PTR(-ENOMEM);
14251433 }
14261434
1427−static void put_srv(struct rtrs_srv *srv)
1435+static void put_srv(struct rtrs_srv_sess *srv)
14281436 {
14291437 if (refcount_dec_and_test(&srv->refcount)) {
14301438 struct rtrs_srv_ctx *ctx = srv->ctx;
@@ -1438,23 +1446,23 @@ static void put_srv(struct rtrs_srv *srv) · 7 unmodified lines
14381446 }
14391447 }
14401448
1441−static void __add_path_to_srv(struct rtrs_srv *srv,
1442− struct rtrs_srv_sess *sess)
1449+static void __add_path_to_srv(struct rtrs_srv_sess *srv,
1450+ struct rtrs_srv_path *srv_path)
14431451 {
1444− list_add_tail(&sess->s.entry, &srv->paths_list);
1452+ list_add_tail(&srv_path->s.entry, &srv->paths_list);
14451453 srv->paths_num++;
14461454 WARN_ON(srv->paths_num >= MAX_PATHS_NUM);
14471455 }
14481456
1449−static void del_path_from_srv(struct rtrs_srv_sess *sess)
1457+static void del_path_from_srv(struct rtrs_srv_path *srv_path)
14501458 {
1451− struct rtrs_srv *srv = sess->srv;
1459+ struct rtrs_srv_sess *srv = srv_path->srv;
14521460
14531461 if (WARN_ON(!srv))
14541462 return;
14551463
14561464 mutex_lock(&srv->paths_mutex);
1457− list_del(&sess->s.entry);
1465+ list_del(&srv_path->s.entry);
14581466 WARN_ON(!srv->paths_num);
14591467 srv->paths_num--;
14601468 mutex_unlock(&srv->paths_mutex);
@@ -1484,47 +1492,47 @@ static int sockaddr_cmp(const struct sockaddr *a, const struct sockaddr *b) · 23 unmodified lines
14841492 }
14851493 }
14861494
1487−static bool __is_path_w_addr_exists(struct rtrs_srv *srv,
1495+static bool __is_path_w_addr_exists(struct rtrs_srv_sess *srv,
14881496 struct rdma_addr *addr)
14891497 {
1490− struct rtrs_srv_sess *sess;
1498+ struct rtrs_srv_path *srv_path;
14911499
1492− list_for_each_entry(sess, &srv->paths_list, s.entry)
1493− if (!sockaddr_cmp((struct sockaddr *)&sess->s.dst_addr,
1500+ list_for_each_entry(srv_path, &srv->paths_list, s.entry)
1501+ if (!sockaddr_cmp((struct sockaddr *)&srv_path->s.dst_addr,
14941502 (struct sockaddr *)&addr->dst_addr) &&
1495− !sockaddr_cmp((struct sockaddr *)&sess->s.src_addr,
1503+ !sockaddr_cmp((struct sockaddr *)&srv_path->s.src_addr,
14961504 (struct sockaddr *)&addr->src_addr))
14971505 return true;
14981506
14991507 return false;
15001508 }
15011509
1502−static void free_sess(struct rtrs_srv_sess *sess)
1510+static void free_path(struct rtrs_srv_path *srv_path)
15031511 {
1504− if (sess->kobj.state_in_sysfs) {
1505− kobject_del(&sess->kobj);
1506− kobject_put(&sess->kobj);
1512+ if (srv_path->kobj.state_in_sysfs) {
1513+ kobject_del(&srv_path->kobj);
1514+ kobject_put(&srv_path->kobj);
15071515 } else {
1508− kfree(sess->stats);
1509− kfree(sess);
1516+ kfree(srv_path->stats);
1517+ kfree(srv_path);
15101518 }
15111519 }
15121520
15131521 static void rtrs_srv_close_work(struct work_struct *work)
15141522 {
1515− struct rtrs_srv_sess *sess;
1523+ struct rtrs_srv_path *srv_path;
15161524 struct rtrs_srv_con *con;
15171525 int i;
15181526
1519− sess = container_of(work, typeof(*sess), close_work);
1527+ srv_path = container_of(work, typeof(*srv_path), close_work);
15201528
1521− rtrs_srv_destroy_sess_files(sess);
1522− rtrs_srv_stop_hb(sess);
1529+ rtrs_srv_destroy_path_files(srv_path);
1530+ rtrs_srv_stop_hb(srv_path);
15231531
1524− for (i = 0; i < sess->s.con_num; i++) {
1525− if (!sess->s.con[i])
1532+ for (i = 0; i < srv_path->s.con_num; i++) {
1533+ if (!srv_path->s.con[i])
15261534 continue;
1527− con = to_srv_con(sess->s.con[i]);
1535+ con = to_srv_con(srv_path->s.con[i]);
15281536 rdma_disconnect(con->c.cm_id);
15291537 ib_drain_qp(con->c.qp);
15301538 }
@@ -1533,41 +1541,41 @@ static void rtrs_srv_close_work(struct work_struct *work) · 2 unmodified lines
15331541 * Degrade ref count to the usual model with a single shared
15341542 * atomic_t counter
15351543 */
1536− percpu_ref_kill(&sess->ids_inflight_ref);
1544+ percpu_ref_kill(&srv_path->ids_inflight_ref);
15371545
15381546 /* Wait for all completion */
1539− wait_for_completion(&sess->complete_done);
1547+ wait_for_completion(&srv_path->complete_done);
15401548
15411549 /* Notify upper layer if we are the last path */
1542− rtrs_srv_sess_down(sess);
1550+ rtrs_srv_path_down(srv_path);
15431551
1544− unmap_cont_bufs(sess);
1545− rtrs_srv_free_ops_ids(sess);
1552+ unmap_cont_bufs(srv_path);
1553+ rtrs_srv_free_ops_ids(srv_path);
15461554
1547− for (i = 0; i < sess->s.con_num; i++) {
1548− if (!sess->s.con[i])
1555+ for (i = 0; i < srv_path->s.con_num; i++) {
1556+ if (!srv_path->s.con[i])
15491557 continue;
1550− con = to_srv_con(sess->s.con[i]);
1558+ con = to_srv_con(srv_path->s.con[i]);
15511559 rtrs_cq_qp_destroy(&con->c);
15521560 rdma_destroy_id(con->c.cm_id);
15531561 kfree(con);
15541562 }
1555− rtrs_ib_dev_put(sess->s.dev);
1563+ rtrs_ib_dev_put(srv_path->s.dev);
15561564
1557− del_path_from_srv(sess);
1558− put_srv(sess->srv);
1559− sess->srv = NULL;
1560− rtrs_srv_change_state(sess, RTRS_SRV_CLOSED);
1565+ del_path_from_srv(srv_path);
1566+ put_srv(srv_path->srv);
1567+ srv_path->srv = NULL;
1568+ rtrs_srv_change_state(srv_path, RTRS_SRV_CLOSED);
15611569
1562− kfree(sess->dma_addr);
1563− kfree(sess->s.con);
1564− free_sess(sess);
1570+ kfree(srv_path->dma_addr);
1571+ kfree(srv_path->s.con);
1572+ free_path(srv_path);
15651573 }
15661574
1567−static int rtrs_rdma_do_accept(struct rtrs_srv_sess *sess,
1575+static int rtrs_rdma_do_accept(struct rtrs_srv_path *srv_path,
15681576 struct rdma_cm_id *cm_id)
15691577 {
1570− struct rtrs_srv *srv = sess->srv;
1578+ struct rtrs_srv_sess *srv = srv_path->srv;
15711579 struct rtrs_msg_conn_rsp msg;
15721580 struct rdma_conn_param param;
15731581 int err;
@@ -1615,25 +1623,25 @@ static int rtrs_rdma_do_reject(struct rdma_cm_id *cm_id, int errno) · 41 unmodified lines
16151623 return errno;
16161624 }
16171625
1618−static struct rtrs_srv_sess *
1619−__find_sess(struct rtrs_srv *srv, const uuid_t *sess_uuid)
1626+static struct rtrs_srv_path *
1627+__find_path(struct rtrs_srv_sess *srv, const uuid_t *sess_uuid)
16201628 {
1621− struct rtrs_srv_sess *sess;
1629+ struct rtrs_srv_path *srv_path;
16221630
1623− list_for_each_entry(sess, &srv->paths_list, s.entry) {
1624− if (uuid_equal(&sess->s.uuid, sess_uuid))
1625− return sess;
1631+ list_for_each_entry(srv_path, &srv->paths_list, s.entry) {
1632+ if (uuid_equal(&srv_path->s.uuid, sess_uuid))
1633+ return srv_path;
16261634 }
16271635
16281636 return NULL;
16291637 }
16301638
1631−static int create_con(struct rtrs_srv_sess *sess,
1639+static int create_con(struct rtrs_srv_path *srv_path,
16321640 struct rdma_cm_id *cm_id,
16331641 unsigned int cid)
16341642 {
1635− struct rtrs_srv *srv = sess->srv;
1636− struct rtrs_sess *s = &sess->s;
1643+ struct rtrs_srv_sess *srv = srv_path->srv;
1644+ struct rtrs_path *s = &srv_path->s;
16371645 struct rtrs_srv_con *con;
16381646
16391647 u32 cq_num, max_send_wr, max_recv_wr, wr_limit;
@@ -1648,10 +1656,10 @@ static int create_con(struct rtrs_srv_sess *sess, · 8 unmodified lines
16481656 spin_lock_init(&con->rsp_wr_wait_lock);
16491657 INIT_LIST_HEAD(&con->rsp_wr_wait_list);
16501658 con->c.cm_id = cm_id;
1651− con->c.sess = &sess->s;
1659+ con->c.path = &srv_path->s;
16521660 con->c.cid = cid;
16531661 atomic_set(&con->c.wr_cnt, 1);
1654− wr_limit = sess->s.dev->ib_dev->attrs.max_qp_wr;
1662+ wr_limit = srv_path->s.dev->ib_dev->attrs.max_qp_wr;
16551663
16561664 if (con->c.cid == 0) {
16571665 /*
@@ -1684,10 +1692,10 @@ static int create_con(struct rtrs_srv_sess *sess, · 26 unmodified lines
16841692 }
16851693 cq_num = max_send_wr + max_recv_wr;
16861694 atomic_set(&con->c.sq_wr_avail, max_send_wr);
1687− cq_vector = rtrs_srv_get_next_cq_vector(sess);
1695+ cq_vector = rtrs_srv_get_next_cq_vector(srv_path);
16881696
16891697 /* TODO: SOFTIRQ can be faster, but be careful with softirq context */
1690− err = rtrs_cq_qp_create(&sess->s, &con->c, 1, cq_vector, cq_num,
1698+ err = rtrs_cq_qp_create(&srv_path->s, &con->c, 1, cq_vector, cq_num,
16911699 max_send_wr, max_recv_wr,
16921700 IB_POLL_WORKQUEUE);
16931701 if (err) {
@@ -1699,8 +1707,8 @@ static int create_con(struct rtrs_srv_sess *sess, · 5 unmodified lines
16991707 if (err)
17001708 goto free_cqqp;
17011709 }
1702− WARN_ON(sess->s.con[cid]);
1703− sess->s.con[cid] = &con->c;
1710+ WARN_ON(srv_path->s.con[cid]);
1711+ srv_path->s.con[cid] = &con->c;
17041712
17051713 /*
17061714 * Change context from server to current connection. The other
@@ -1719,13 +1727,13 @@ err: · 12 unmodified lines
17191727 return err;
17201728 }
17211729
1722−static struct rtrs_srv_sess *__alloc_sess(struct rtrs_srv *srv,
1730+static struct rtrs_srv_path *__alloc_path(struct rtrs_srv_sess *srv,
17231731 struct rdma_cm_id *cm_id,
17241732 unsigned int con_num,
17251733 unsigned int recon_cnt,
17261734 const uuid_t *uuid)
17271735 {
1728− struct rtrs_srv_sess *sess;
1736+ struct rtrs_srv_path *srv_path;
17291737 int err = -ENOMEM;
17301738 char str[NAME_MAX];
17311739 struct rtrs_addr path;
@@ -1739,74 +1747,76 @@ static struct rtrs_srv_sess *__alloc_sess(struct rtrs_srv *srv, · 7 unmodified lines
17391747 pr_err("Path with same addr exists\n");
17401748 goto err;
17411749 }
1742− sess = kzalloc(sizeof(*sess), GFP_KERNEL);
1743− if (!sess)
1750+ srv_path = kzalloc(sizeof(*srv_path), GFP_KERNEL);
1751+ if (!srv_path)
17441752 goto err;
17451753
1746− sess->stats = kzalloc(sizeof(*sess->stats), GFP_KERNEL);
1747− if (!sess->stats)
1754+ srv_path->stats = kzalloc(sizeof(*srv_path->stats), GFP_KERNEL);
1755+ if (!srv_path->stats)
17481756 goto err_free_sess;
17491757
1750− sess->stats->sess = sess;
1758+ srv_path->stats->srv_path = srv_path;
17511759
1752− sess->dma_addr = kcalloc(srv->queue_depth, sizeof(*sess->dma_addr),
1753− GFP_KERNEL);
1754− if (!sess->dma_addr)
1760+ srv_path->dma_addr = kcalloc(srv->queue_depth,
1761+ sizeof(*srv_path->dma_addr),
1762+ GFP_KERNEL);
1763+ if (!srv_path->dma_addr)
17551764 goto err_free_stats;
17561765
1757− sess->s.con = kcalloc(con_num, sizeof(*sess->s.con), GFP_KERNEL);
1758− if (!sess->s.con)
1766+ srv_path->s.con = kcalloc(con_num, sizeof(*srv_path->s.con),
1767+ GFP_KERNEL);
1768+ if (!srv_path->s.con)
17591769 goto err_free_dma_addr;
17601770
1761− sess->state = RTRS_SRV_CONNECTING;
1762− sess->srv = srv;
1763− sess->cur_cq_vector = -1;
1764− sess->s.dst_addr = cm_id->route.addr.dst_addr;
1765− sess->s.src_addr = cm_id->route.addr.src_addr;
1771+ srv_path->state = RTRS_SRV_CONNECTING;
1772+ srv_path->srv = srv;
1773+ srv_path->cur_cq_vector = -1;
1774+ srv_path->s.dst_addr = cm_id->route.addr.dst_addr;
1775+ srv_path->s.src_addr = cm_id->route.addr.src_addr;
17661776
17671777 /* temporary until receiving session-name from client */
1768− path.src = &sess->s.src_addr;
1769− path.dst = &sess->s.dst_addr;
1778+ path.src = &srv_path->s.src_addr;
1779+ path.dst = &srv_path->s.dst_addr;
17701780 rtrs_addr_to_str(&path, str, sizeof(str));
1771− strscpy(sess->s.sessname, str, sizeof(sess->s.sessname));
1772−
1773− sess->s.con_num = con_num;
1774− sess->s.irq_con_num = con_num;
1775− sess->s.recon_cnt = recon_cnt;
1776− uuid_copy(&sess->s.uuid, uuid);
1777− spin_lock_init(&sess->state_lock);
1778− INIT_WORK(&sess->close_work, rtrs_srv_close_work);
1779− rtrs_srv_init_hb(sess);
1780−
1781− sess->s.dev = rtrs_ib_dev_find_or_add(cm_id->device, &dev_pd);
1782− if (!sess->s.dev) {
1781+ strscpy(srv_path->s.sessname, str, sizeof(srv_path->s.sessname));
1782+
1783+ srv_path->s.con_num = con_num;
1784+ srv_path->s.irq_con_num = con_num;
1785+ srv_path->s.recon_cnt = recon_cnt;
1786+ uuid_copy(&srv_path->s.uuid, uuid);
1787+ spin_lock_init(&srv_path->state_lock);
1788+ INIT_WORK(&srv_path->close_work, rtrs_srv_close_work);
1789+ rtrs_srv_init_hb(srv_path);
1790+
1791+ srv_path->s.dev = rtrs_ib_dev_find_or_add(cm_id->device, &dev_pd);
1792+ if (!srv_path->s.dev) {
17831793 err = -ENOMEM;
17841794 goto err_free_con;
17851795 }
1786− err = map_cont_bufs(sess);
1796+ err = map_cont_bufs(srv_path);
17871797 if (err)
17881798 goto err_put_dev;
17891799
1790− err = rtrs_srv_alloc_ops_ids(sess);
1800+ err = rtrs_srv_alloc_ops_ids(srv_path);
17911801 if (err)
17921802 goto err_unmap_bufs;
17931803
1794− __add_path_to_srv(srv, sess);
1804+ __add_path_to_srv(srv, srv_path);
17951805
1796− return sess;
1806+ return srv_path;
17971807
17981808 err_unmap_bufs:
1799− unmap_cont_bufs(sess);
1809+ unmap_cont_bufs(srv_path);
18001810 err_put_dev:
1801− rtrs_ib_dev_put(sess->s.dev);
1811+ rtrs_ib_dev_put(srv_path->s.dev);
18021812 err_free_con:
1803− kfree(sess->s.con);
1813+ kfree(srv_path->s.con);
18041814 err_free_dma_addr:
1805− kfree(sess->dma_addr);
1815+ kfree(srv_path->dma_addr);
18061816 err_free_stats:
1807− kfree(sess->stats);
1817+ kfree(srv_path->stats);
18081818 err_free_sess:
1809− kfree(sess);
1819+ kfree(srv_path);
18101820 err:
18111821 return ERR_PTR(err);
18121822 }
@@ -1816,8 +1826,8 @@ static int rtrs_rdma_connect(struct rdma_cm_id *cm_id, · 3 unmodified lines
18161826 size_t len)
18171827 {
18181828 struct rtrs_srv_ctx *ctx = cm_id->context;
1819− struct rtrs_srv_sess *sess;
1820− struct rtrs_srv *srv;
1829+ struct rtrs_srv_path *srv_path;
1830+ struct rtrs_srv_sess *srv;
18211831
18221832 u16 version, con_num, cid;
18231833 u16 recon_cnt;
@@ -1857,16 +1867,16 @@ static int rtrs_rdma_connect(struct rdma_cm_id *cm_id, · 33 unmodified lines
18571867 goto reject_w_err;
18581868 }
18591869 mutex_lock(&srv->paths_mutex);
1860− sess = __find_sess(srv, &msg->sess_uuid);
1861− if (sess) {
1862− struct rtrs_sess *s = &sess->s;
1870+ srv_path = __find_path(srv, &msg->sess_uuid);
1871+ if (srv_path) {
1872+ struct rtrs_path *s = &srv_path->s;
18631873
18641874 /* Session already holds a reference */
18651875 put_srv(srv);
18661876
1867− if (sess->state != RTRS_SRV_CONNECTING) {
1877+ if (srv_path->state != RTRS_SRV_CONNECTING) {
18681878 rtrs_err(s, "Session in wrong state: %s\n",
1869− rtrs_srv_state_str(sess->state));
1879+ rtrs_srv_state_str(srv_path->state));
18701880 mutex_unlock(&srv->paths_mutex);
18711881 goto reject_w_err;
18721882 }
@@ -1886,19 +1896,19 @@ static int rtrs_rdma_connect(struct rdma_cm_id *cm_id, · 13 unmodified lines
18861896 goto reject_w_err;
18871897 }
18881898 } else {
1889− sess = __alloc_sess(srv, cm_id, con_num, recon_cnt,
1899+ srv_path = __alloc_path(srv, cm_id, con_num, recon_cnt,
18901900 &msg->sess_uuid);
1891− if (IS_ERR(sess)) {
1901+ if (IS_ERR(srv_path)) {
18921902 mutex_unlock(&srv->paths_mutex);
18931903 put_srv(srv);
1894− err = PTR_ERR(sess);
1904+ err = PTR_ERR(srv_path);
18951905 pr_err("RTRS server session allocation failed: %d\n", err);
18961906 goto reject_w_err;
18971907 }
18981908 }
1899− err = create_con(sess, cm_id, cid);
1909+ err = create_con(srv_path, cm_id, cid);
19001910 if (err) {
1901− rtrs_err((&sess->s), "create_con(), error %d\n", err);
1911+ rtrs_err((&srv_path->s), "create_con(), error %d\n", err);
19021912 rtrs_rdma_do_reject(cm_id, err);
19031913 /*
19041914 * Since session has other connections we follow normal way
@@ -1907,9 +1917,9 @@ static int rtrs_rdma_connect(struct rdma_cm_id *cm_id, · 2 unmodified lines
19071917 */
19081918 goto close_and_return_err;
19091919 }
1910− err = rtrs_rdma_do_accept(sess, cm_id);
1920+ err = rtrs_rdma_do_accept(srv_path, cm_id);
19111921 if (err) {
1912− rtrs_err((&sess->s), "rtrs_rdma_do_accept(), error %d\n", err);
1922+ rtrs_err((&srv_path->s), "rtrs_rdma_do_accept(), error %d\n", err);
19131923 rtrs_rdma_do_reject(cm_id, err);
19141924 /*
19151925 * Since current connection was successfully added to the
@@ -1929,7 +1939,7 @@ reject_w_err: · 13 unmodified lines
19291939
19301940 close_and_return_err:
19311941 mutex_unlock(&srv->paths_mutex);
1932− close_sess(sess);
1942+ close_path(srv_path);
19331943
19341944 return err;
19351945 }
@@ -1937,14 +1947,14 @@ close_and_return_err: · 1 unmodified line
19371947 static int rtrs_srv_rdma_cm_handler(struct rdma_cm_id *cm_id,
19381948 struct rdma_cm_event *ev)
19391949 {
1940− struct rtrs_srv_sess *sess = NULL;
1941− struct rtrs_sess *s = NULL;
1950+ struct rtrs_srv_path *srv_path = NULL;
1951+ struct rtrs_path *s = NULL;
19421952
19431953 if (ev->event != RDMA_CM_EVENT_CONNECT_REQUEST) {
19441954 struct rtrs_con *c = cm_id->context;
19451955
1946− s = c->sess;
1947− sess = to_srv_sess(s);
1956+ s = c->path;
1957+ srv_path = to_srv_path(s);
19481958 }
19491959
19501960 switch (ev->event) {
@@ -1968,7 +1978,7 @@ static int rtrs_srv_rdma_cm_handler(struct rdma_cm_id *cm_id, · 17 unmodified lines
19681978 case RDMA_CM_EVENT_ADDR_CHANGE:
19691979 case RDMA_CM_EVENT_TIMEWAIT_EXIT:
19701980 case RDMA_CM_EVENT_DEVICE_REMOVAL:
1971− close_sess(sess);
1981+ close_path(srv_path);
19721982 break;
19731983 default:
19741984 pr_err("Ignoring unexpected CM event %s, err %d\n",
@@ -2176,23 +2186,23 @@ struct rtrs_srv_ctx *rtrs_srv_open(struct rtrs_srv_ops *ops, u16 port) · 201 unmodified lines
21762186 }
21772187 EXPORT_SYMBOL(rtrs_srv_open);
21782188
2179−static void close_sessions(struct rtrs_srv *srv)
2189+static void close_paths(struct rtrs_srv_sess *srv)
21802190 {
2181− struct rtrs_srv_sess *sess;
2191+ struct rtrs_srv_path *srv_path;
21822192
21832193 mutex_lock(&srv->paths_mutex);
2184− list_for_each_entry(sess, &srv->paths_list, s.entry)
2185− close_sess(sess);
2194+ list_for_each_entry(srv_path, &srv->paths_list, s.entry)
2195+ close_path(srv_path);
21862196 mutex_unlock(&srv->paths_mutex);
21872197 }
21882198
21892199 static void close_ctx(struct rtrs_srv_ctx *ctx)
21902200 {
2191− struct rtrs_srv *srv;
2201+ struct rtrs_srv_sess *srv;
21922202
21932203 mutex_lock(&ctx->srv_mutex);
21942204 list_for_each_entry(srv, &ctx->srv_list, ctx_list)
2195− close_sessions(srv);
2205+ close_paths(srv);
21962206 mutex_unlock(&ctx->srv_mutex);
21972207 flush_workqueue(rtrs_wq);
21982208 }
drivers/infiniband/ulp/rtrs/rtrs-srv.h+8−8
@@ -37,7 +37,7 @@ struct rtrs_srv_stats_rdma_stats { · 36 unmodified lines
3737 struct rtrs_srv_stats {
3838 struct kobject kobj_stats;
3939 struct rtrs_srv_stats_rdma_stats rdma_stats;
40− struct rtrs_srv_sess *sess;
40+ struct rtrs_srv_path *srv_path;
4141 };
4242
4343 struct rtrs_srv_con {
@@ -71,9 +71,9 @@ struct rtrs_srv_mr { · 27 unmodified lines
7171 struct rtrs_iu *iu; /* send buffer for new rkey msg */
7272 };
7373
74−struct rtrs_srv_sess {
75− struct rtrs_sess s;
76− struct rtrs_srv *srv;
74+struct rtrs_srv_path {
75+ struct rtrs_path s;
76+ struct rtrs_srv_sess *srv;
7777 struct work_struct close_work;
7878 enum rtrs_srv_state state;
7979 spinlock_t state_lock;
@@ -90,7 +90,7 @@ struct rtrs_srv_sess { · 10 unmodified lines
9090 struct rtrs_srv_stats *stats;
9191 };
9292
93−struct rtrs_srv {
93+struct rtrs_srv_sess {
9494 struct list_head paths_list;
9595 int paths_up;
9696 struct mutex paths_ev_mutex;
@@ -125,7 +125,7 @@ struct rtrs_srv_ib_ctx { · 28 unmodified lines
125125
126126 extern struct class *rtrs_dev_class;
127127
128−void close_sess(struct rtrs_srv_sess *sess);
128+void close_path(struct rtrs_srv_path *srv_path);
129129
130130 static inline void rtrs_srv_update_rdma_stats(struct rtrs_srv_stats *s,
131131 size_t size, int d)
@@ -142,7 +142,7 @@ ssize_t rtrs_srv_reset_all_help(struct rtrs_srv_stats *stats, · 10 unmodified lines
142142 char *page, size_t len);
143143
144144 /* functions which are implemented in rtrs-srv-sysfs.c */
145−int rtrs_srv_create_sess_files(struct rtrs_srv_sess *sess);
146−void rtrs_srv_destroy_sess_files(struct rtrs_srv_sess *sess);
145+int rtrs_srv_create_path_files(struct rtrs_srv_path *srv_path);
146+void rtrs_srv_destroy_path_files(struct rtrs_srv_path *srv_path);
147147
148148 #endif /* RTRS_SRV_H */
drivers/infiniband/ulp/rtrs/rtrs.c+49−49
@@ -69,16 +69,16 @@ EXPORT_SYMBOL_GPL(rtrs_iu_free); · 68 unmodified lines
6969
7070 int rtrs_iu_post_recv(struct rtrs_con *con, struct rtrs_iu *iu)
7171 {
72− struct rtrs_sess *sess = con->sess;
72+ struct rtrs_path *path = con->path;
7373 struct ib_recv_wr wr;
7474 struct ib_sge list;
7575
7676 list.addr = iu->dma_addr;
7777 list.length = iu->size;
78− list.lkey = sess->dev->ib_pd->local_dma_lkey;
78+ list.lkey = path->dev->ib_pd->local_dma_lkey;
7979
8080 if (list.length == 0) {
81− rtrs_wrn(con->sess,
81+ rtrs_wrn(con->path,
8282 "Posting receive work request failed, sg list is empty\n");
8383 return -EINVAL;
8484 }
@@ -126,7 +126,7 @@ static int rtrs_post_send(struct ib_qp *qp, struct ib_send_wr *head, · 41 unmodified lines
126126 int rtrs_iu_post_send(struct rtrs_con *con, struct rtrs_iu *iu, size_t size,
127127 struct ib_send_wr *head)
128128 {
129− struct rtrs_sess *sess = con->sess;
129+ struct rtrs_path *path = con->path;
130130 struct ib_send_wr wr;
131131 struct ib_sge list;
132132
@@ -135,7 +135,7 @@ int rtrs_iu_post_send(struct rtrs_con *con, struct rtrs_iu *iu, size_t size, · 2 unmodified lines
135135
136136 list.addr = iu->dma_addr;
137137 list.length = size;
138− list.lkey = sess->dev->ib_pd->local_dma_lkey;
138+ list.lkey = path->dev->ib_pd->local_dma_lkey;
139139
140140 wr = (struct ib_send_wr) {
141141 .wr_cqe = &iu->cqe,
@@ -188,11 +188,11 @@ static int rtrs_post_rdma_write_imm_empty(struct rtrs_con *con, · 46 unmodified lines
188188 struct ib_send_wr *head)
189189 {
190190 struct ib_rdma_wr wr;
191− struct rtrs_sess *sess = con->sess;
191+ struct rtrs_path *path = con->path;
192192 enum ib_send_flags sflags;
193193
194194 atomic_dec_if_positive(&con->sq_wr_avail);
195− sflags = (atomic_inc_return(&con->wr_cnt) % sess->signal_interval) ?
195+ sflags = (atomic_inc_return(&con->wr_cnt) % path->signal_interval) ?
196196 0 : IB_SEND_SIGNALED;
197197
198198 wr = (struct ib_rdma_wr) {
@@ -211,12 +211,12 @@ static void qp_event_handler(struct ib_event *ev, void *ctx) · 12 unmodified lines
211211
212212 switch (ev->event) {
213213 case IB_EVENT_COMM_EST:
214− rtrs_info(con->sess, "QP event %s (%d) received\n",
214+ rtrs_info(con->path, "QP event %s (%d) received\n",
215215 ib_event_msg(ev->event), ev->event);
216216 rdma_notify(con->cm_id, IB_EVENT_COMM_EST);
217217 break;
218218 default:
219− rtrs_info(con->sess, "Unhandled QP event %s (%d) received\n",
219+ rtrs_info(con->path, "Unhandled QP event %s (%d) received\n",
220220 ib_event_msg(ev->event), ev->event);
221221 break;
222222 }
@@ -224,7 +224,7 @@ static void qp_event_handler(struct ib_event *ev, void *ctx) · 1 unmodified line
224224
225225 static bool is_pollqueue(struct rtrs_con *con)
226226 {
227− return con->cid >= con->sess->irq_con_num;
227+ return con->cid >= con->path->irq_con_num;
228228 }
229229
230230 static int create_cq(struct rtrs_con *con, int cq_vector, int nr_cqe,
@@ -240,7 +240,7 @@ static int create_cq(struct rtrs_con *con, int cq_vector, int nr_cqe, · 9 unmodified lines
240240 cq = ib_cq_pool_get(cm_id->device, nr_cqe, cq_vector, poll_ctx);
241241
242242 if (IS_ERR(cq)) {
243− rtrs_err(con->sess, "Creating completion queue failed, errno: %ld\n",
243+ rtrs_err(con->path, "Creating completion queue failed, errno: %ld\n",
244244 PTR_ERR(cq));
245245 return PTR_ERR(cq);
246246 }
@@ -271,7 +271,7 @@ static int create_qp(struct rtrs_con *con, struct ib_pd *pd, · 24 unmodified lines
271271
272272 ret = rdma_create_qp(cm_id, pd, &init_attr);
273273 if (ret) {
274− rtrs_err(con->sess, "Creating QP failed, err: %d\n", ret);
274+ rtrs_err(con->path, "Creating QP failed, err: %d\n", ret);
275275 return ret;
276276 }
277277 con->qp = cm_id->qp;
@@ -290,7 +290,7 @@ static void destroy_cq(struct rtrs_con *con) · 12 unmodified lines
290290 con->cq = NULL;
291291 }
292292
293−int rtrs_cq_qp_create(struct rtrs_sess *sess, struct rtrs_con *con,
293+int rtrs_cq_qp_create(struct rtrs_path *path, struct rtrs_con *con,
294294 u32 max_send_sge, int cq_vector, int nr_cqe,
295295 u32 max_send_wr, u32 max_recv_wr,
296296 enum ib_poll_context poll_ctx)
@@ -301,13 +301,13 @@ int rtrs_cq_qp_create(struct rtrs_sess *sess, struct rtrs_con *con, · 4 unmodified lines
301301 if (err)
302302 return err;
303303
304− err = create_qp(con, sess->dev->ib_pd, max_send_wr, max_recv_wr,
304+ err = create_qp(con, path->dev->ib_pd, max_send_wr, max_recv_wr,
305305 max_send_sge);
306306 if (err) {
307307 destroy_cq(con);
308308 return err;
309309 }
310− con->sess = sess;
310+ con->path = path;
311311
312312 return 0;
313313 }
@@ -323,24 +323,24 @@ void rtrs_cq_qp_destroy(struct rtrs_con *con) · 9 unmodified lines
323323 }
324324 EXPORT_SYMBOL_GPL(rtrs_cq_qp_destroy);
325325
326−static void schedule_hb(struct rtrs_sess *sess)
326+static void schedule_hb(struct rtrs_path *path)
327327 {
328− queue_delayed_work(sess->hb_wq, &sess->hb_dwork,
329− msecs_to_jiffies(sess->hb_interval_ms));
328+ queue_delayed_work(path->hb_wq, &path->hb_dwork,
329+ msecs_to_jiffies(path->hb_interval_ms));
330330 }
331331
332−void rtrs_send_hb_ack(struct rtrs_sess *sess)
332+void rtrs_send_hb_ack(struct rtrs_path *path)
333333 {
334− struct rtrs_con *usr_con = sess->con[0];
334+ struct rtrs_con *usr_con = path->con[0];
335335 u32 imm;
336336 int err;
337337
338338 imm = rtrs_to_imm(RTRS_HB_ACK_IMM, 0);
339− err = rtrs_post_rdma_write_imm_empty(usr_con, sess->hb_cqe, imm,
339+ err = rtrs_post_rdma_write_imm_empty(usr_con, path->hb_cqe, imm,
340340 NULL);
341341 if (err) {
342− rtrs_err(sess, "send HB ACK failed, errno: %d\n", err);
343− sess->hb_err_handler(usr_con);
342+ rtrs_err(path, "send HB ACK failed, errno: %d\n", err);
343+ path->hb_err_handler(usr_con);
344344 return;
345345 }
346346 }
@@ -349,63 +349,63 @@ EXPORT_SYMBOL_GPL(rtrs_send_hb_ack); · 2 unmodified lines
349349 static void hb_work(struct work_struct *work)
350350 {
351351 struct rtrs_con *usr_con;
352− struct rtrs_sess *sess;
352+ struct rtrs_path *path;
353353 u32 imm;
354354 int err;
355355
356− sess = container_of(to_delayed_work(work), typeof(*sess), hb_dwork);
357− usr_con = sess->con[0];
356+ path = container_of(to_delayed_work(work), typeof(*path), hb_dwork);
357+ usr_con = path->con[0];
358358
359− if (sess->hb_missed_cnt > sess->hb_missed_max) {
360− rtrs_err(sess, "HB missed max reached.\n");
361− sess->hb_err_handler(usr_con);
359+ if (path->hb_missed_cnt > path->hb_missed_max) {
360+ rtrs_err(path, "HB missed max reached.\n");
361+ path->hb_err_handler(usr_con);
362362 return;
363363 }
364− if (sess->hb_missed_cnt++) {
364+ if (path->hb_missed_cnt++) {
365365 /* Reschedule work without sending hb */
366− schedule_hb(sess);
366+ schedule_hb(path);
367367 return;
368368 }
369369
370− sess->hb_last_sent = ktime_get();
370+ path->hb_last_sent = ktime_get();
371371
372372 imm = rtrs_to_imm(RTRS_HB_MSG_IMM, 0);
373− err = rtrs_post_rdma_write_imm_empty(usr_con, sess->hb_cqe, imm,
373+ err = rtrs_post_rdma_write_imm_empty(usr_con, path->hb_cqe, imm,
374374 NULL);
375375 if (err) {
376− rtrs_err(sess, "HB send failed, errno: %d\n", err);
377− sess->hb_err_handler(usr_con);
376+ rtrs_err(path, "HB send failed, errno: %d\n", err);
377+ path->hb_err_handler(usr_con);
378378 return;
379379 }
380380
381− schedule_hb(sess);
381+ schedule_hb(path);
382382 }
383383
384−void rtrs_init_hb(struct rtrs_sess *sess, struct ib_cqe *cqe,
384+void rtrs_init_hb(struct rtrs_path *path, struct ib_cqe *cqe,
385385 unsigned int interval_ms, unsigned int missed_max,
386386 void (*err_handler)(struct rtrs_con *con),
387387 struct workqueue_struct *wq)
388388 {
389− sess->hb_cqe = cqe;
390− sess->hb_interval_ms = interval_ms;
391− sess->hb_err_handler = err_handler;
392− sess->hb_wq = wq;
393− sess->hb_missed_max = missed_max;
394− sess->hb_missed_cnt = 0;
395− INIT_DELAYED_WORK(&sess->hb_dwork, hb_work);
389+ path->hb_cqe = cqe;
390+ path->hb_interval_ms = interval_ms;
391+ path->hb_err_handler = err_handler;
392+ path->hb_wq = wq;
393+ path->hb_missed_max = missed_max;
394+ path->hb_missed_cnt = 0;
395+ INIT_DELAYED_WORK(&path->hb_dwork, hb_work);
396396 }
397397 EXPORT_SYMBOL_GPL(rtrs_init_hb);
398398
399−void rtrs_start_hb(struct rtrs_sess *sess)
399+void rtrs_start_hb(struct rtrs_path *path)
400400 {
401− schedule_hb(sess);
401+ schedule_hb(path);
402402 }
403403 EXPORT_SYMBOL_GPL(rtrs_start_hb);
404404
405−void rtrs_stop_hb(struct rtrs_sess *sess)
405+void rtrs_stop_hb(struct rtrs_path *path)
406406 {
407− cancel_delayed_work_sync(&sess->hb_dwork);
408− sess->hb_missed_cnt = 0;
407+ cancel_delayed_work_sync(&path->hb_dwork);
408+ path->hb_missed_cnt = 0;
409409 }
410410 EXPORT_SYMBOL_GPL(rtrs_stop_hb);
411411
drivers/infiniband/ulp/rtrs/rtrs.h+18−16
@@ -13,9 +13,9 @@ · 12 unmodified lines
1313 #include <linux/scatterlist.h>
1414
1515 struct rtrs_permit;
16−struct rtrs_clt;
16+struct rtrs_clt_sess;
1717 struct rtrs_srv_ctx;
18−struct rtrs_srv;
18+struct rtrs_srv_sess;
1919 struct rtrs_srv_op;
2020
2121 /*
@@ -52,14 +52,14 @@ struct rtrs_clt_ops { · 30 unmodified lines
5252 void (*link_ev)(void *priv, enum rtrs_clt_link_ev ev);
5353 };
5454
55−struct rtrs_clt *rtrs_clt_open(struct rtrs_clt_ops *ops,
56− const char *sessname,
55+struct rtrs_clt_sess *rtrs_clt_open(struct rtrs_clt_ops *ops,
56+ const char *pathname,
5757 const struct rtrs_addr *paths,
5858 size_t path_cnt, u16 port,
5959 size_t pdu_sz, u8 reconnect_delay_sec,
6060 s16 max_reconnect_attempts, u32 nr_poll_queues);
6161
62−void rtrs_clt_close(struct rtrs_clt *sess);
62+void rtrs_clt_close(struct rtrs_clt_sess *clt);
6363
6464 enum wait_type {
6565 RTRS_PERMIT_NOWAIT = 0,
@@ -77,11 +77,12 @@ enum rtrs_clt_con_type { · 11 unmodified lines
7777 RTRS_IO_CON
7878 };
7979
80−struct rtrs_permit *rtrs_clt_get_permit(struct rtrs_clt *sess,
81− enum rtrs_clt_con_type con_type,
82− enum wait_type wait);
80+struct rtrs_permit *rtrs_clt_get_permit(struct rtrs_clt_sess *sess,
81+ enum rtrs_clt_con_type con_type,
82+ enum wait_type wait);
8383
84−void rtrs_clt_put_permit(struct rtrs_clt *sess, struct rtrs_permit *permit);
84+void rtrs_clt_put_permit(struct rtrs_clt_sess *sess,
85+ struct rtrs_permit *permit);
8586
8687 /**
8788 * rtrs_clt_req_ops - it holds the request confirmation callback
@@ -98,10 +99,10 @@ struct rtrs_clt_req_ops { · 10 unmodified lines
9899 };
99100
100101 int rtrs_clt_request(int dir, struct rtrs_clt_req_ops *ops,
101− struct rtrs_clt *sess, struct rtrs_permit *permit,
102+ struct rtrs_clt_sess *sess, struct rtrs_permit *permit,
102103 const struct kvec *vec, size_t nr, size_t len,
103104 struct scatterlist *sg, unsigned int sg_cnt);
104−int rtrs_clt_rdma_cq_direct(struct rtrs_clt *clt, unsigned int index);
105+int rtrs_clt_rdma_cq_direct(struct rtrs_clt_sess *clt, unsigned int index);
105106
106107 /**
107108 * rtrs_attrs - RTRS session attributes
@@ -112,7 +113,7 @@ struct rtrs_attrs { · 4 unmodified lines
112113 u32 max_segments;
113114 };
114115
115−int rtrs_clt_query(struct rtrs_clt *sess, struct rtrs_attrs *attr);
116+int rtrs_clt_query(struct rtrs_clt_sess *sess, struct rtrs_attrs *attr);
116117
117118 /*
118119 * Here goes RTRS server API
@@ -163,7 +164,7 @@ struct rtrs_srv_ops { · 44 unmodified lines
163164 * @priv: Private data from user if previously set with
164165 * rtrs_srv_set_sess_priv()
165166 */
166− int (*link_ev)(struct rtrs_srv *sess, enum rtrs_srv_link_ev ev,
167+ int (*link_ev)(struct rtrs_srv_sess *sess, enum rtrs_srv_link_ev ev,
167168 void *priv);
168169 };
169170
@@ -173,11 +174,12 @@ void rtrs_srv_close(struct rtrs_srv_ctx *ctx); · 3 unmodified lines
173174
174175 bool rtrs_srv_resp_rdma(struct rtrs_srv_op *id, int errno);
175176
176−void rtrs_srv_set_sess_priv(struct rtrs_srv *sess, void *priv);
177+void rtrs_srv_set_sess_priv(struct rtrs_srv_sess *sess, void *priv);
177178
178−int rtrs_srv_get_sess_name(struct rtrs_srv *sess, char *sessname, size_t len);
179+int rtrs_srv_get_path_name(struct rtrs_srv_sess *sess, char *pathname,
180+ size_t len);
179181
180−int rtrs_srv_get_queue_depth(struct rtrs_srv *sess);
182+int rtrs_srv_get_queue_depth(struct rtrs_srv_sess *sess);
181183
182184 int rtrs_addr_to_sockaddr(const char *str, size_t len, u16 port,
183185 struct rtrs_addr *addr);
drivers/net/ethernet/chelsio/cxgb4/t4_msg.h+1−1
@@ -497,7 +497,7 @@ struct cpl_t5_pass_accept_rpl { · 496 unmodified lines
497497 __be32 opt2;
498498 __be64 opt0;
499499 __be32 iss;
500− __be32 rsvd;
500+ __be32 rsvd[3];
501501 };
502502
503503 struct cpl_act_open_req {
include/rdma/ib_mad.h+1−0
@@ -276,6 +276,7 @@ enum ib_port_capability_mask2_bits { · 275 unmodified lines
276276 IB_PORT_SWITCH_PORT_STATE_TABLE_SUP = 1 << 3,
277277 IB_PORT_LINK_WIDTH_2X_SUP = 1 << 4,
278278 IB_PORT_LINK_SPEED_HDR_SUP = 1 << 5,
279+ IB_PORT_LINK_SPEED_NDR_SUP = 1 << 10,
279280 };
280281
281282 #define OPA_CLASS_PORT_INFO_PR_SUPPORT BIT(26)
include/rdma/ib_smi.h+11−1
@@ -144,5 +144,15 @@ ib_get_smp_direction(struct ib_smp *smp) · 143 unmodified lines
144144 #define IB_NOTICE_TRAP_DR_NOTICE 0x80
145145 #define IB_NOTICE_TRAP_DR_TRUNC 0x40
146146
147−
147+/**
148+ * ib_init_query_mad - Initialize query MAD.
149+ * @mad: MAD to initialize.
150+ */
151+static inline void ib_init_query_mad(struct ib_smp *mad)
152+{
153+ mad->base_version = IB_MGMT_BASE_VERSION;
154+ mad->mgmt_class = IB_MGMT_CLASS_SUBN_LID_ROUTED;
155+ mad->class_version = 1;
156+ mad->method = IB_MGMT_METHOD_GET;
157+}
148158 #endif /* IB_SMI_H */
include/rdma/ib_verbs.h+17−0
@@ -4749,6 +4749,23 @@ static inline u32 rdma_calc_flow_label(u32 lqpn, u32 rqpn) · 4748 unmodified lines
47494749 return (u32)(v & IB_GRH_FLOWLABEL_MASK);
47504750 }
47514751
4752+/**
4753+ * rdma_get_udp_sport - Calculate and set UDP source port based on the flow
4754+ * label. If flow label is not defined in GRH then
4755+ * calculate it based on lqpn/rqpn.
4756+ *
4757+ * @fl: flow label from GRH
4758+ * @lqpn: local qp number
4759+ * @rqpn: remote qp number
4760+ */
4761+static inline u16 rdma_get_udp_sport(u32 fl, u32 lqpn, u32 rqpn)
4762+{
4763+ if (!fl)
4764+ fl = rdma_calc_flow_label(lqpn, rqpn);
4765+
4766+ return rdma_flow_label_to_udp_sport(fl);
4767+}
4768+
47524769 const struct ib_port_immutable*
47534770 ib_port_immutable_read(struct ib_device *dev, unsigned int port);
47544771 #endif /* IB_VERBS_H */
include/uapi/rdma/hns-abi.h+2−0
@@ -77,10 +77,12 @@ enum hns_roce_qp_cap_flags { · 76 unmodified lines
7777 HNS_ROCE_QP_CAP_RQ_RECORD_DB = 1 << 0,
7878 HNS_ROCE_QP_CAP_SQ_RECORD_DB = 1 << 1,
7979 HNS_ROCE_QP_CAP_OWNER_DB = 1 << 2,
80+ HNS_ROCE_QP_CAP_DIRECT_WQE = 1 << 5,
8081 };
8182
8283 struct hns_roce_ib_create_qp_resp {
8384 __aligned_u64 cap_flags;
85+ __aligned_u64 dwqe_mmap_key;
8486 };
8587
8688 struct hns_roce_ib_alloc_ucontext_resp {