aboutsummaryrefslogtreecommitdiffstats
path: root/include/rdma
diff options
context:
space:
mode:
authorSean Hefty <sean.hefty@intel.com>2011-05-23 22:59:25 -0400
committerRoland Dreier <roland@purestorage.com>2011-10-13 12:16:19 -0400
commitb42b63cf0dde2af6eec462b2d6cca7d938702a28 (patch)
treeabb1c06c6903bdc816b5a09a25ea3e4b2bda7842 /include/rdma
parent418d51307d102e72e745031adb4f5ba0ddb646e2 (diff)
RDMA/core: Add XRC QPs
XRC ("eXtended reliable connected") is an IB transport that provides better scalability by allowing senders to specify which shared receive queue (SRQ) should be used to receive a message, which essentially allows one transport context (QP connection) to serve multiple destinations (as long as they share an adapter, of course). XRC communication is between an initiator (INI) QP and a target (TGT) QP. Target QPs are associated with SRQs through an XRCD. An XRC TGT QP behaves like a receive-only RD QP. XRC INI QPs behave similarly to RC QPs, except that work requests posted to an XRC INI QP must specify the remote SRQ that is the target of the work request. We define two new QP types for XRC, to distinguish between INI and TGT QPs, and update the core layer to support XRC QPs. This patch is derived from work by Jack Morgenstein <jackm@dev.mellanox.co.il> Signed-off-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'include/rdma')
-rw-r--r--include/rdma/ib_verbs.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 516647a22135..c3d7602b5e90 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -579,7 +579,11 @@ enum ib_qp_type {
579 IB_QPT_UC, 579 IB_QPT_UC,
580 IB_QPT_UD, 580 IB_QPT_UD,
581 IB_QPT_RAW_IPV6, 581 IB_QPT_RAW_IPV6,
582 IB_QPT_RAW_ETHERTYPE 582 IB_QPT_RAW_ETHERTYPE,
583 /* Save 8 for RAW_PACKET */
584 IB_QPT_XRC_INI = 9,
585 IB_QPT_XRC_TGT,
586 IB_QPT_MAX
583}; 587};
584 588
585enum ib_qp_create_flags { 589enum ib_qp_create_flags {
@@ -593,6 +597,7 @@ struct ib_qp_init_attr {
593 struct ib_cq *send_cq; 597 struct ib_cq *send_cq;
594 struct ib_cq *recv_cq; 598 struct ib_cq *recv_cq;
595 struct ib_srq *srq; 599 struct ib_srq *srq;
600 struct ib_xrcd *xrcd; /* XRC TGT QPs only */
596 struct ib_qp_cap cap; 601 struct ib_qp_cap cap;
597 enum ib_sig_type sq_sig_type; 602 enum ib_sig_type sq_sig_type;
598 enum ib_qp_type qp_type; 603 enum ib_qp_type qp_type;
@@ -784,6 +789,7 @@ struct ib_send_wr {
784 u32 rkey; 789 u32 rkey;
785 } fast_reg; 790 } fast_reg;
786 } wr; 791 } wr;
792 u32 xrc_remote_srq_num; /* XRC TGT QPs only */
787}; 793};
788 794
789struct ib_recv_wr { 795struct ib_recv_wr {
@@ -919,6 +925,7 @@ struct ib_qp {
919 struct ib_cq *send_cq; 925 struct ib_cq *send_cq;
920 struct ib_cq *recv_cq; 926 struct ib_cq *recv_cq;
921 struct ib_srq *srq; 927 struct ib_srq *srq;
928 struct ib_xrcd *xrcd; /* XRC TGT QPs only */
922 struct ib_uobject *uobject; 929 struct ib_uobject *uobject;
923 void (*event_handler)(struct ib_event *, void *); 930 void (*event_handler)(struct ib_event *, void *);
924 void *qp_context; 931 void *qp_context;