aboutsummaryrefslogtreecommitdiffstats
path: root/include/rdma
diff options
context:
space:
mode:
authorSean Hefty <sean.hefty@intel.com>2011-05-23 20:52:46 -0400
committerRoland Dreier <roland@purestorage.com>2011-10-12 13:32:26 -0400
commit59991f94eb32e954aa767f659eb642461e9e8b37 (patch)
treedd107c1ce5faf54a4561b7e5349eed102741772b /include/rdma
parent976d167615b64e14bc1491ca51d424e2ba9a5e84 (diff)
RDMA/core: Add XRC domain support
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). A few new concepts are introduced to support this. This patch adds: - A new device capability flag, IB_DEVICE_XRC, which low-level drivers set to indicate that a device supports XRC. - A new object type, XRC domains (struct ib_xrcd), and new verbs ib_alloc_xrcd()/ib_dealloc_xrcd(). XRCDs are used to limit which XRC SRQs an incoming message can target. 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.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 228be3e220d9..d2a5c9b991d1 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -112,6 +112,7 @@ enum ib_device_cap_flags {
112 */ 112 */
113 IB_DEVICE_UD_IP_CSUM = (1<<18), 113 IB_DEVICE_UD_IP_CSUM = (1<<18),
114 IB_DEVICE_UD_TSO = (1<<19), 114 IB_DEVICE_UD_TSO = (1<<19),
115 IB_DEVICE_XRC = (1<<20),
115 IB_DEVICE_MEM_MGT_EXTENSIONS = (1<<21), 116 IB_DEVICE_MEM_MGT_EXTENSIONS = (1<<21),
116 IB_DEVICE_BLOCK_MULTICAST_LOOPBACK = (1<<22), 117 IB_DEVICE_BLOCK_MULTICAST_LOOPBACK = (1<<22),
117}; 118};
@@ -858,6 +859,11 @@ struct ib_pd {
858 atomic_t usecnt; /* count all resources */ 859 atomic_t usecnt; /* count all resources */
859}; 860};
860 861
862struct ib_xrcd {
863 struct ib_device *device;
864 atomic_t usecnt; /* count all resources */
865};
866
861struct ib_ah { 867struct ib_ah {
862 struct ib_device *device; 868 struct ib_device *device;
863 struct ib_pd *pd; 869 struct ib_pd *pd;
@@ -1149,6 +1155,10 @@ struct ib_device {
1149 struct ib_grh *in_grh, 1155 struct ib_grh *in_grh,
1150 struct ib_mad *in_mad, 1156 struct ib_mad *in_mad,
1151 struct ib_mad *out_mad); 1157 struct ib_mad *out_mad);
1158 struct ib_xrcd * (*alloc_xrcd)(struct ib_device *device,
1159 struct ib_ucontext *ucontext,
1160 struct ib_udata *udata);
1161 int (*dealloc_xrcd)(struct ib_xrcd *xrcd);
1152 1162
1153 struct ib_dma_mapping_ops *dma_ops; 1163 struct ib_dma_mapping_ops *dma_ops;
1154 1164
@@ -2060,4 +2070,16 @@ int ib_attach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid);
2060 */ 2070 */
2061int ib_detach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid); 2071int ib_detach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid);
2062 2072
2073/**
2074 * ib_alloc_xrcd - Allocates an XRC domain.
2075 * @device: The device on which to allocate the XRC domain.
2076 */
2077struct ib_xrcd *ib_alloc_xrcd(struct ib_device *device);
2078
2079/**
2080 * ib_dealloc_xrcd - Deallocates an XRC domain.
2081 * @xrcd: The XRC domain to deallocate.
2082 */
2083int ib_dealloc_xrcd(struct ib_xrcd *xrcd);
2084
2063#endif /* IB_VERBS_H */ 2085#endif /* IB_VERBS_H */