1219820Sjeffcommit b7c5820ce48a4fc3c8464872f0a554df6e7bbb47 2219820SjeffAuthor: Dotan Barak <dotanb@mellanox.co.il> 3219820SjeffDate: Mon Feb 25 16:50:38 2008 +0200 4219820Sjeff 5219820Sjeff Add XRC (eXtended Reliable Connection) support to all of the relevant man pages 6219820Sjeff and add new man pages to new XRC verbs. 7219820Sjeff 8219820Sjeff Signed-off-by: Dotan Barak <dotanb@dev.mellanox.co.il> 9219820Sjeff Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> 10219820Sjeff 11219820Sjeffdiff --git a/man/ibv_create_qp.3 b/man/ibv_create_qp.3 12219820Sjeffindex abd5449..fb6f041 100644 13219820SjeffIndex: libibverbs/man/ibv_create_qp.3 14219820Sjeff=================================================================== 15219820Sjeff--- libibverbs.orig/man/ibv_create_qp.3 2008-06-05 15:21:54.000000000 +0300 16219820Sjeff+++ libibverbs/man/ibv_create_qp.3 2008-06-05 16:25:21.000000000 +0300 17219820Sjeff@@ -28,8 +28,9 @@ struct ibv_cq *send_cq; 18219820Sjeff struct ibv_cq *recv_cq; /* CQ to be associated with the Receive Queue (RQ) */ 19219820Sjeff struct ibv_srq *srq; /* SRQ handle if QP is to be associated with an SRQ, otherwise NULL */ 20219820Sjeff struct ibv_qp_cap cap; /* QP capabilities */ 21219820Sjeff-enum ibv_qp_type qp_type; /* QP Transport Service Type: IBV_QPT_RC, IBV_QPT_UC, or IBV_QPT_UD */ 22219820Sjeff+enum ibv_qp_type qp_type; /* QP Transport Service Type: IBV_QPT_RC, IBV_QPT_UC, IBV_QPT_UD or IBV_QPT_XRC */ 23219820Sjeff int sq_sig_all; /* If set, each Work Request (WR) submitted to the SQ generates a completion entry */ 24219820Sjeff+struct ibv_xrc_domain *xrc_domain; /* XRC domain the QP will be associated with (valid only for IBV_QPT_XRC QP), otherwise NULL */ 25219820Sjeff .in -8 26219820Sjeff }; 27219820Sjeff .sp 28219820SjeffIndex: libibverbs/man/ibv_create_srq.3 29219820Sjeff=================================================================== 30219820Sjeff--- libibverbs.orig/man/ibv_create_srq.3 2008-06-05 15:21:54.000000000 +0300 31219820Sjeff+++ libibverbs/man/ibv_create_srq.3 2008-06-05 16:25:21.000000000 +0300 32219820Sjeff@@ -10,12 +10,26 @@ ibv_create_srq, ibv_destroy_srq \- creat 33219820Sjeff .BI "struct ibv_srq *ibv_create_srq(struct ibv_pd " "*pd" ", struct " 34219820Sjeff .BI " ibv_srq_init_attr " "*srq_init_attr" ); 35219820Sjeff .sp 36219820Sjeff+.BI "struct ibv_srq *ibv_create_xrc_srq(struct ibv_pd " "*pd" ", 37219820Sjeff+.BI " struct ibv_xrc_domain " "*xrc_domain" ", 38219820Sjeff+.BI " struct ibv_cq " "*xrc_cq" ", 39219820Sjeff+.BI " struct ibv_srq_init_attr " "*srq_init_attr" ); 40219820Sjeff+.sp 41219820Sjeff .BI "int ibv_destroy_srq(struct ibv_srq " "*srq" ); 42219820Sjeff .fi 43219820Sjeff .SH "DESCRIPTION" 44219820Sjeff .B ibv_create_srq() 45219820Sjeff creates a shared receive queue (SRQ) associated with the protection domain 46219820Sjeff .I pd\fR. 47219820Sjeff+.PP 48219820Sjeff+.B ibv_create_xrc_srq() 49219820Sjeff+creates an XRC shared receive queue (SRQ) associated with the protection domain 50219820Sjeff+.I pd\fR, 51219820Sjeff+the XRC domain 52219820Sjeff+.I xrc_domain 53219820Sjeff+and the CQ which will hold the XRC completion 54219820Sjeff+.I xrc_cq\fR. 55219820Sjeff+.PP 56219820Sjeff The argument 57219820Sjeff .I srq_init_attr 58219820Sjeff is an ibv_srq_init_attr struct, as defined in <infiniband/verbs.h>. 59219820SjeffIndex: libibverbs/man/ibv_create_xrc_rcv_qp.3 60219820Sjeff=================================================================== 61219820Sjeff--- /dev/null 1970-01-01 00:00:00.000000000 +0000 62219820Sjeff+++ libibverbs/man/ibv_create_xrc_rcv_qp.3 2008-06-05 16:25:21.000000000 +0300 63219820Sjeff@@ -0,0 +1,70 @@ 64219820Sjeff+.\" -*- nroff -*- 65219820Sjeff+.\" 66219820Sjeff+.TH IBV_CREATE_XRC_RCV_QP 3 2008-02-10 libibverbs "Libibverbs Programmer's Manual" 67219820Sjeff+.SH "NAME" 68219820Sjeff+ibv_create_xrc_rcv_qp \- create an XRC queue pair (QP) for serving as a receive-side only QP 69219820Sjeff+.SH "SYNOPSIS" 70219820Sjeff+.nf 71219820Sjeff+.B #include <infiniband/verbs.h> 72219820Sjeff+.sp 73219820Sjeff+.BI "int ibv_create_xrc_rcv_qp(struct ibv_qp_init_attr " "*init_attr" , 74219820Sjeff+.BI " uint32_t " "*xrc_rcv_qpn" ); 75219820Sjeff+.fi 76219820Sjeff+.SH "DESCRIPTION" 77219820Sjeff+.B ibv_create_xrc_rcv_qp() 78219820Sjeff+creates an XRC queue pair (QP) for serving as a receive-side only QP and returns its number through the pointer 79219820Sjeff+.I xrc_rcv_qpn\fR. 80219820Sjeff+This QP number should be passed to the remote node (sender). 81219820Sjeff+The remote node will use 82219820Sjeff+.I xrc_rcv_qpn 83219820Sjeff+in 84219820Sjeff+.B ibv_post_send() 85219820Sjeff+when sending to an XRC SRQ on this host in the same xrc domain as the XRC receive QP. 86219820Sjeff+This QP is created in kernel space, and persists until the last process registered for the QP 87219820Sjeff+calls 88219820Sjeff+.B ibv_unreg_xrc_rcv_qp() 89219820Sjeff+(at which time the QP is destroyed). 90219820Sjeff+.PP 91219820Sjeff+The process which creates this QP is automatically registered for it, and should also call 92219820Sjeff+.B ibv_unreg_xrc_rcv_qp() 93219820Sjeff+at some point, to unregister. 94219820Sjeff+ 95219820Sjeff+Processes which wish to receive on an XRC SRQ via this QP should call 96219820Sjeff+.B ibv_reg_xrc_rcv_qp() 97219820Sjeff+for this QP, to guarantee that the QP will not be destroyed while they are still using it for receiving on the XRC SRQ. 98219820Sjeff+.PP 99219820Sjeff+The argument 100219820Sjeff+.I qp_init_attr 101219820Sjeff+is an ibv_qp_init_attr struct, as defined in <infiniband/verbs.h>. 102219820Sjeff+.PP 103219820Sjeff+.nf 104219820Sjeff+struct ibv_qp_init_attr { 105219820Sjeff+.in +8 106219820Sjeff+void *qp_context; /* value is being ignored */ 107219820Sjeff+struct ibv_cq *send_cq; /* value is being ignored */ 108219820Sjeff+struct ibv_cq *recv_cq; /* value is being ignored */ 109219820Sjeff+struct ibv_srq *srq; /* value is being ignored */ 110219820Sjeff+struct ibv_qp_cap cap; /* value is being ignored */ 111219820Sjeff+enum ibv_qp_type qp_type; /* value is being ignored */ 112219820Sjeff+int sq_sig_all; /* value is being ignored */ 113219820Sjeff+struct ibv_xrc_domain *xrc_domain; /* XRC domain the QP will be associated with */ 114219820Sjeff+.in -8 115219820Sjeff+}; 116219820Sjeff+.fi 117219820Sjeff+.PP 118219820Sjeff+Most of the attributes in 119219820Sjeff+.I qp_init_attr 120219820Sjeff+are being ignored because this QP is a receive only QP and all RR are being posted to an SRQ. 121219820Sjeff+.SH "RETURN VALUE" 122219820Sjeff+.B ibv_create_xrc_rcv_qp() 123219820Sjeff+returns 0 on success, or the value of errno on failure (which indicates the failure reason). 124219820Sjeff+.SH "SEE ALSO" 125219820Sjeff+.BR ibv_open_xrc_domain (3), 126219820Sjeff+.BR ibv_modify_xrc_rcv_qp (3), 127219820Sjeff+.BR ibv_query_xrc_rcv_qp (3), 128219820Sjeff+.BR ibv_reg_xrc_rcv_qp (3), 129219820Sjeff+.BR ibv_unreg_xrc_rcv_qp (3), 130219820Sjeff+.BR ibv_post_send (3) 131219820Sjeff+.SH "AUTHORS" 132219820Sjeff+.TP 133219820Sjeff+Dotan Barak <dotanb@mellanox.co.il> 134219820SjeffIndex: libibverbs/man/ibv_modify_xrc_rcv_qp.3 135219820Sjeff=================================================================== 136219820Sjeff--- /dev/null 1970-01-01 00:00:00.000000000 +0000 137219820Sjeff+++ libibverbs/man/ibv_modify_xrc_rcv_qp.3 2008-06-05 16:25:21.000000000 +0300 138219820Sjeff@@ -0,0 +1,141 @@ 139219820Sjeff+.\" -*- nroff -*- 140219820Sjeff+.\" 141219820Sjeff+.TH IBV_MODIFY_XRC_RCV_QP 3 2008-02-10 libibverbs "Libibverbs Programmer's Manual" 142219820Sjeff+.SH "NAME" 143219820Sjeff+ibv_modify_xrc_rcv_qp \- modify the attributes of an XRC receive queue pair (QP) 144219820Sjeff+.SH "SYNOPSIS" 145219820Sjeff+.nf 146219820Sjeff+.B #include <infiniband/verbs.h> 147219820Sjeff+.sp 148219820Sjeff+.BI "int ibv_modify_xrc_rcv_qp(struct ibv_xrc_domain " "*xrc_domain" ", uint32_t " "xrc_qp_num" , 149219820Sjeff+.BI " struct ibv_qp_attr " "*attr" ", int " "attr_mask" ); 150219820Sjeff+.fi 151219820Sjeff+.SH "DESCRIPTION" 152219820Sjeff+.B ibv_modify_qp() 153219820Sjeff+modifies the attributes of an XRC receive QP with the number 154219820Sjeff+.I xrc_qp_num 155219820Sjeff+which is associated with the XRC domain 156219820Sjeff+.I xrc_domain 157219820Sjeff+with the attributes in 158219820Sjeff+.I attr 159219820Sjeff+according to the mask 160219820Sjeff+.I attr_mask 161219820Sjeff+and move the QP state through the following transitions: Reset -> Init -> RTR. 162219820Sjeff+.I attr_mask 163219820Sjeff+should indicate all of the attributes which will be used in this QP transition and the following masks (at least) should be set: 164219820Sjeff+.PP 165219820Sjeff+.nf 166219820Sjeff+Next state Required attributes 167219820Sjeff+\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- 168219820Sjeff+Init \fB IBV_QP_STATE, IBV_QP_PKEY_INDEX, IBV_QP_PORT, \fR 169219820Sjeff+ \fB IBV_QP_ACCESS_FLAGS \fR 170219820Sjeff+RTR \fB IBV_QP_STATE, IBV_QP_AV, IBV_QP_PATH_MTU, \fR 171219820Sjeff+ \fB IBV_QP_DEST_QPN, IBV_QP_RQ_PSN, \fR 172219820Sjeff+ \fB IBV_QP_MAX_DEST_RD_ATOMIC, IBV_QP_MIN_RNR_TIMER \fR 173219820Sjeff+.fi 174219820Sjeff+.PP 175219820Sjeff+The user can add optional attributes as well. 176219820Sjeff+.PP 177219820Sjeff+The argument \fIattr\fR is an ibv_qp_attr struct, as defined in <infiniband/verbs.h>. 178219820Sjeff+.PP 179219820Sjeff+.nf 180219820Sjeff+struct ibv_qp_attr { 181219820Sjeff+.in +8 182219820Sjeff+enum ibv_qp_state qp_state; /* Move the QP to this state */ 183219820Sjeff+enum ibv_qp_state cur_qp_state; /* Assume this is the current QP state */ 184219820Sjeff+enum ibv_mtu path_mtu; /* Path MTU (valid only for RC/UC QPs) */ 185219820Sjeff+enum ibv_mig_state path_mig_state; /* Path migration state (valid if HCA supports APM) */ 186219820Sjeff+uint32_t qkey; /* Q_Key for the QP (valid only for UD QPs) */ 187219820Sjeff+uint32_t rq_psn; /* PSN for receive queue (valid only for RC/UC QPs) */ 188219820Sjeff+uint32_t sq_psn; /* PSN for send queue (valid only for RC/UC QPs) */ 189219820Sjeff+uint32_t dest_qp_num; /* Destination QP number (valid only for RC/UC QPs) */ 190219820Sjeff+int qp_access_flags; /* Mask of enabled remote access operations (valid only for RC/UC QPs) */ 191219820Sjeff+struct ibv_qp_cap cap; /* QP capabilities (valid if HCA supports QP resizing) */ 192219820Sjeff+struct ibv_ah_attr ah_attr; /* Primary path address vector (valid only for RC/UC QPs) */ 193219820Sjeff+struct ibv_ah_attr alt_ah_attr; /* Alternate path address vector (valid only for RC/UC QPs) */ 194219820Sjeff+uint16_t pkey_index; /* Primary P_Key index */ 195219820Sjeff+uint16_t alt_pkey_index; /* Alternate P_Key index */ 196219820Sjeff+uint8_t en_sqd_async_notify; /* Enable SQD.drained async notification (Valid only if qp_state is SQD) */ 197219820Sjeff+uint8_t sq_draining; /* Is the QP draining? Irrelevant for ibv_modify_qp() */ 198219820Sjeff+uint8_t max_rd_atomic; /* Number of outstanding RDMA reads & atomic operations on the destination QP (valid only for RC QPs) */ 199219820Sjeff+uint8_t max_dest_rd_atomic; /* Number of responder resources for handling incoming RDMA reads & atomic operations (valid only for RC QPs) */ 200219820Sjeff+uint8_t min_rnr_timer; /* Minimum RNR NAK timer (valid only for RC QPs) */ 201219820Sjeff+uint8_t port_num; /* Primary port number */ 202219820Sjeff+uint8_t timeout; /* Local ack timeout for primary path (valid only for RC QPs) */ 203219820Sjeff+uint8_t retry_cnt; /* Retry count (valid only for RC QPs) */ 204219820Sjeff+uint8_t rnr_retry; /* RNR retry (valid only for RC QPs) */ 205219820Sjeff+uint8_t alt_port_num; /* Alternate port number */ 206219820Sjeff+uint8_t alt_timeout; /* Local ack timeout for alternate path (valid only for RC QPs) */ 207219820Sjeff+.in -8 208219820Sjeff+}; 209219820Sjeff+.fi 210219820Sjeff+.PP 211219820Sjeff+For details on struct ibv_qp_cap see the description of 212219820Sjeff+.B ibv_create_qp()\fR. 213219820Sjeff+For details on struct ibv_ah_attr see the description of 214219820Sjeff+.B ibv_create_ah()\fR. 215219820Sjeff+.PP 216219820Sjeff+The argument 217219820Sjeff+.I attr_mask 218219820Sjeff+specifies the QP attributes to be modified. 219219820Sjeff+The argument is either 0 or the bitwise OR of one or more of the following flags: 220219820Sjeff+.PP 221219820Sjeff+.TP 222219820Sjeff+.B IBV_QP_STATE \fR Modify qp_state 223219820Sjeff+.TP 224219820Sjeff+.B IBV_QP_CUR_STATE \fR Set cur_qp_state 225219820Sjeff+.TP 226219820Sjeff+.B IBV_QP_EN_SQD_ASYNC_NOTIFY \fR Set en_sqd_async_notify 227219820Sjeff+.TP 228219820Sjeff+.B IBV_QP_ACCESS_FLAGS \fR Set qp_access_flags 229219820Sjeff+.TP 230219820Sjeff+.B IBV_QP_PKEY_INDEX \fR Set pkey_index 231219820Sjeff+.TP 232219820Sjeff+.B IBV_QP_PORT \fR Set port_num 233219820Sjeff+.TP 234219820Sjeff+.B IBV_QP_QKEY \fR Set qkey 235219820Sjeff+.TP 236219820Sjeff+.B IBV_QP_AV \fR Set ah_attr 237219820Sjeff+.TP 238219820Sjeff+.B IBV_QP_PATH_MTU \fR Set path_mtu 239219820Sjeff+.TP 240219820Sjeff+.B IBV_QP_TIMEOUT \fR Set timeout 241219820Sjeff+.TP 242219820Sjeff+.B IBV_QP_RETRY_CNT \fR Set retry_cnt 243219820Sjeff+.TP 244219820Sjeff+.B IBV_QP_RNR_RETRY \fR Set rnr_retry 245219820Sjeff+.TP 246219820Sjeff+.B IBV_QP_RQ_PSN \fR Set rq_psn 247219820Sjeff+.TP 248219820Sjeff+.B IBV_QP_MAX_QP_RD_ATOMIC \fR Set max_rd_atomic 249219820Sjeff+.TP 250219820Sjeff+.B IBV_QP_ALT_PATH \fR Set the alternative path via: alt_ah_attr, alt_pkey_index, alt_port_num, alt_timeout 251219820Sjeff+.TP 252219820Sjeff+.B IBV_QP_MIN_RNR_TIMER \fR Set min_rnr_timer 253219820Sjeff+.TP 254219820Sjeff+.B IBV_QP_SQ_PSN \fR Set sq_psn 255219820Sjeff+.TP 256219820Sjeff+.B IBV_QP_MAX_DEST_RD_ATOMIC \fR Set max_dest_rd_atomic 257219820Sjeff+.TP 258219820Sjeff+.B IBV_QP_PATH_MIG_STATE \fR Set path_mig_state 259219820Sjeff+.TP 260219820Sjeff+.B IBV_QP_CAP \fR Set cap 261219820Sjeff+.TP 262219820Sjeff+.B IBV_QP_DEST_QPN \fR Set dest_qp_num 263219820Sjeff+.SH "RETURN VALUE" 264219820Sjeff+.B ibv_modify_xrc_rcv_qp() 265219820Sjeff+returns 0 on success, or the value of errno on failure (which indicates the failure reason). 266219820Sjeff+.SH "NOTES" 267219820Sjeff+If any of the modify attributes or the modify mask are invalid, none 268219820Sjeff+of the attributes will be modified (including the QP state). 269219820Sjeff+.PP 270219820Sjeff+Not all devices support alternate paths. To check if a device supports it, check if the 271219820Sjeff+.B IBV_DEVICE_AUTO_PATH_MIG 272219820Sjeff+bit is set in the device capabilities flags. 273219820Sjeff+.SH "SEE ALSO" 274219820Sjeff+.BR ibv_open_xrc_domain (3), 275219820Sjeff+.BR ibv_create_xrc_rcv_qp (3), 276219820Sjeff+.BR ibv_query_xrc_rcv_qp (3) 277219820Sjeff+.SH "AUTHORS" 278219820Sjeff+.TP 279219820Sjeff+Dotan Barak <dotanb@mellanox.co.il> 280219820SjeffIndex: libibverbs/man/ibv_open_xrc_domain.3 281219820Sjeff=================================================================== 282219820Sjeff--- /dev/null 1970-01-01 00:00:00.000000000 +0000 283219820Sjeff+++ libibverbs/man/ibv_open_xrc_domain.3 2008-06-05 16:25:21.000000000 +0300 284219820Sjeff@@ -0,0 +1,80 @@ 285219820Sjeff+.\" -*- nroff -*- 286219820Sjeff+.\" 287219820Sjeff+.TH IBV_OPEN_XRC_DOMAIN 3 2008-02-10 libibverbs "Libibverbs Programmer's Manual" 288219820Sjeff+.SH "NAME" 289219820Sjeff+ibv_open_xrc_domain, ibv_close_xrc_domain \- open or close an eXtended Reliable Connection (XRC) domain 290219820Sjeff+.SH "SYNOPSIS" 291219820Sjeff+.nf 292219820Sjeff+.B #include <fcntl.h> 293219820Sjeff+.B #include <infiniband/verbs.h> 294219820Sjeff+.sp 295219820Sjeff+.BI "struct ibv_xrc_domain *ibv_open_xrc_domain(struct ibv_context " "*context" "," 296219820Sjeff+.BI " int " "fd" ", int " "oflag" ); 297219820Sjeff+.nl 298219820Sjeff+.BI "int ibv_close_xrc_domain(struct ibv_xrc_domain " "*d" ); 299219820Sjeff+.fi 300219820Sjeff+.SH "DESCRIPTION" 301219820Sjeff+.B ibv_open_xrc_domain() 302219820Sjeff+open an XRC domain for the InfiniBand device context 303219820Sjeff+.I context 304219820Sjeff+or return a reference to an opened one\fR. 305219820Sjeff+.I fd 306219820Sjeff+is the file descriptor to be associated with the XRC domain. 307219820Sjeff+The argument 308219820Sjeff+.I oflag 309219820Sjeff+describes the desired file creation attributes; it is either 0 or the bitwise OR of one or more of the following flags: 310219820Sjeff+.PP 311219820Sjeff+.TP 312219820Sjeff+.B O_CREAT 313219820Sjeff+If a domain belonging to device named by context is already associated with the inode, this flag has 314219820Sjeff+no effect, except as noted under 315219820Sjeff+.BR O_EXCL 316219820Sjeff+below. Otherwise, a new XRC domain is created and is associated with inode specified by 317219820Sjeff+.IR fd\fR. 318219820Sjeff+.TP 319219820Sjeff+.B O_EXCL 320219820Sjeff+If 321219820Sjeff+.BR O_EXCL 322219820Sjeff+and 323219820Sjeff+.BR O_CREAT 324219820Sjeff+are set, open will fail if a domain associated with the inode exists. 325219820Sjeff+The check for the existence of the domain and creation 326219820Sjeff+of the domain if it does not exist is atomic with respect to other 327219820Sjeff+processes executing open with 328219820Sjeff+.IR fd 329219820Sjeff+naming the same inode. 330219820Sjeff+.PP 331219820Sjeff+If 332219820Sjeff+.I fd 333219820Sjeff+equals -1, no inode is is associated with the domain, and the only valid value for 334219820Sjeff+.I oflag 335219820Sjeff+is 336219820Sjeff+.B O_CREAT\fR. 337219820Sjeff+.PP 338219820Sjeff+.B ibv_close_xrc_domain() 339219820Sjeff+closes the XRC domain 340219820Sjeff+.I d\fR. 341219820Sjeff+If this is the last reference, the XRC domain will be destroyed. 342219820Sjeff+.SH "RETURN VALUE" 343219820Sjeff+.B ibv_open_xrc_domain() 344219820Sjeff+returns a pointer to an opened XRC, or NULL if the request fails. 345219820Sjeff+.PP 346219820Sjeff+.B ibv_close_xrc_domain() 347219820Sjeff+returns 0 on success, or the value of errno on failure (which indicates the failure reason). 348219820Sjeff+.SH "NOTES" 349219820Sjeff+Not all devices support XRC. To check if a device supports it, check if the 350219820Sjeff+.B IBV_DEVICE_XRC 351219820Sjeff+bit is set in the device capabilities flags. 352219820Sjeff+.PP 353219820Sjeff+.B ibv_close_xrc_domain() 354219820Sjeff+may fail if any QP or SRQ are still associated with the XRC domain being closed. 355219820Sjeff+.SH "SEE ALSO" 356219820Sjeff+.BR ibv_create_xrc_srq (3), 357219820Sjeff+.BR ibv_create_qp (3), 358219820Sjeff+.BR ibv_create_xrc_rcv_qp (3), 359219820Sjeff+.BR ibv_modify_xrc_rcv_qp (3), 360219820Sjeff+.BR ibv_query_xrc_rcv_qp (3), 361219820Sjeff+.BR ibv_reg_xrc_rcv_qp (3) 362219820Sjeff+.SH "AUTHORS" 363219820Sjeff+.TP 364219820Sjeff+Dotan Barak <dotanb@mellanox.co.il> 365219820SjeffIndex: libibverbs/man/ibv_post_send.3 366219820Sjeff=================================================================== 367219820Sjeff--- libibverbs.orig/man/ibv_post_send.3 2008-06-05 15:21:55.000000000 +0300 368219820Sjeff+++ libibverbs/man/ibv_post_send.3 2008-06-05 16:25:21.000000000 +0300 369219820Sjeff@@ -60,6 +60,7 @@ uint32_t remote_qkey; /* Q_Key 370219820Sjeff } ud; 371219820Sjeff .in -8 372219820Sjeff } wr; 373219820Sjeff+uint32_t xrc_remote_srq_num; /* SRQ number of the destination XRC */ 374219820Sjeff .in -8 375219820Sjeff }; 376219820Sjeff .sp 377219820Sjeff@@ -76,15 +77,15 @@ uint32_t lkey; 378219820Sjeff Each QP Transport Service Type supports a specific set of opcodes, as shown in the following table: 379219820Sjeff .PP 380219820Sjeff .nf 381219820Sjeff-OPCODE | IBV_QPT_UD | IBV_QPT_UC | IBV_QPT_RC 382219820Sjeff-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\- 383219820Sjeff-IBV_WR_SEND | X | X | X 384219820Sjeff-IBV_WR_SEND_WITH_IMM | X | X | X 385219820Sjeff-IBV_WR_RDMA_WRITE | | X | X 386219820Sjeff-IBV_WR_RDMA_WRITE_WITH_IMM | | X | X 387219820Sjeff-IBV_WR_RDMA_READ | | | X 388219820Sjeff-IBV_WR_ATOMIC_CMP_AND_SWP | | | X 389219820Sjeff-IBV_WR_ATOMIC_FETCH_AND_ADD | | | X 390219820Sjeff+OPCODE | IBV_QPT_UD | IBV_QPT_UC | IBV_QPT_RC | IBV_QPT_XRC 391219820Sjeff+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\- 392219820Sjeff+IBV_WR_SEND | X | X | X | X 393219820Sjeff+IBV_WR_SEND_WITH_IMM | X | X | X | X 394219820Sjeff+IBV_WR_RDMA_WRITE | | X | X | X 395219820Sjeff+IBV_WR_RDMA_WRITE_WITH_IMM | | X | X | X 396219820Sjeff+IBV_WR_RDMA_READ | | | X | X 397219820Sjeff+IBV_WR_ATOMIC_CMP_AND_SWP | | | X | X 398219820Sjeff+IBV_WR_ATOMIC_FETCH_AND_ADD | | | X | X 399219820Sjeff .fi 400219820Sjeff .PP 401219820Sjeff The attribute send_flags describes the properties of the \s-1WR\s0. It is either 0 or the bitwise \s-1OR\s0 of one or more of the following flags: 402219820Sjeff@@ -114,6 +115,7 @@ IBV_SEND_INLINE flag was set, the buffer 403219820Sjeff after the call returns. 404219820Sjeff .SH "SEE ALSO" 405219820Sjeff .BR ibv_create_qp (3), 406219820Sjeff+.BR ibv_create_xrc_rcv_qp (3), 407219820Sjeff .BR ibv_create_ah (3), 408219820Sjeff .BR ibv_post_recv (3), 409219820Sjeff .BR ibv_post_srq_recv (3), 410219820SjeffIndex: libibverbs/man/ibv_query_xrc_rcv_qp.3 411219820Sjeff=================================================================== 412219820Sjeff--- /dev/null 1970-01-01 00:00:00.000000000 +0000 413219820Sjeff+++ libibverbs/man/ibv_query_xrc_rcv_qp.3 2008-06-05 16:25:21.000000000 +0300 414219820Sjeff@@ -0,0 +1,89 @@ 415219820Sjeff+.\" -*- nroff -*- 416219820Sjeff+.\" 417219820Sjeff+.TH IBV_QUERY_XRC_RCV_QP 3 2008-02-10 libibverbs "Libibverbs Programmer's Manual" 418219820Sjeff+.SH "NAME" 419219820Sjeff+ibv_query_xrc_rcv_qp \- get the attributes of an XRC receive queue pair (QP) 420219820Sjeff+.SH "SYNOPSIS" 421219820Sjeff+.nf 422219820Sjeff+.B #include <infiniband/verbs.h> 423219820Sjeff+.sp 424219820Sjeff+.BI "int ibv_query_xrc_rcv_qp(struct ibv_xrc_domain " "*xrc_domain" ", uint32_t " "xrc_qp_num" , 425219820Sjeff+.BI " struct ibv_qp_attr " "*attr" ", int " "attr_mask" , 426219820Sjeff+.BI " struct ibv_qp_init_attr " "*init_attr" ); 427219820Sjeff+.fi 428219820Sjeff+.SH "DESCRIPTION" 429219820Sjeff+.B ibv_query_xrc_rcv_qp() 430219820Sjeff+gets the attributes specified in 431219820Sjeff+.I attr_mask 432219820Sjeff+for the XRC receive QP with the number 433219820Sjeff+.I xrc_qp_num 434219820Sjeff+which is associated with the XRC domain 435219820Sjeff+.I xrc_domain 436219820Sjeff+and returns them through the pointers 437219820Sjeff+.I attr 438219820Sjeff+and 439219820Sjeff+.I init_attr\fR. 440219820Sjeff+The argument 441219820Sjeff+.I attr 442219820Sjeff+is an ibv_qp_attr struct, as defined in <infiniband/verbs.h>. 443219820Sjeff+.PP 444219820Sjeff+.nf 445219820Sjeff+struct ibv_qp_attr { 446219820Sjeff+.in +8 447219820Sjeff+enum ibv_qp_state qp_state; /* Current QP state */ 448219820Sjeff+enum ibv_qp_state cur_qp_state; /* Current QP state - irrelevant for ibv_query_qp */ 449219820Sjeff+enum ibv_mtu path_mtu; /* Path MTU (valid only for RC/UC QPs) */ 450219820Sjeff+enum ibv_mig_state path_mig_state; /* Path migration state (valid if HCA supports APM) */ 451219820Sjeff+uint32_t qkey; /* Q_Key of the QP (valid only for UD QPs) */ 452219820Sjeff+uint32_t rq_psn; /* PSN for receive queue (valid only for RC/UC QPs) */ 453219820Sjeff+uint32_t sq_psn; /* PSN for send queue (valid only for RC/UC QPs) */ 454219820Sjeff+uint32_t dest_qp_num; /* Destination QP number (valid only for RC/UC QPs) */ 455219820Sjeff+int qp_access_flags; /* Mask of enabled remote access operations (valid only for RC/UC QPs) */ 456219820Sjeff+struct ibv_qp_cap cap; /* QP capabilities */ 457219820Sjeff+struct ibv_ah_attr ah_attr; /* Primary path address vector (valid only for RC/UC QPs) */ 458219820Sjeff+struct ibv_ah_attr alt_ah_attr; /* Alternate path address vector (valid only for RC/UC QPs) */ 459219820Sjeff+uint16_t pkey_index; /* Primary P_Key index */ 460219820Sjeff+uint16_t alt_pkey_index; /* Alternate P_Key index */ 461219820Sjeff+uint8_t en_sqd_async_notify; /* Enable SQD.drained async notification - irrelevant for ibv_query_qp */ 462219820Sjeff+uint8_t sq_draining; /* Is the QP draining? (Valid only if qp_state is SQD) */ 463219820Sjeff+uint8_t max_rd_atomic; /* Number of outstanding RDMA reads & atomic operations on the destination QP (valid only for RC QPs) */ 464219820Sjeff+uint8_t max_dest_rd_atomic; /* Number of responder resources for handling incoming RDMA reads & atomic operations (valid only for RC QPs) */ 465219820Sjeff+uint8_t min_rnr_timer; /* Minimum RNR NAK timer (valid only for RC QPs) */ 466219820Sjeff+uint8_t port_num; /* Primary port number */ 467219820Sjeff+uint8_t timeout; /* Local ack timeout for primary path (valid only for RC QPs) */ 468219820Sjeff+uint8_t retry_cnt; /* Retry count (valid only for RC QPs) */ 469219820Sjeff+uint8_t rnr_retry; /* RNR retry (valid only for RC QPs) */ 470219820Sjeff+uint8_t alt_port_num; /* Alternate port number */ 471219820Sjeff+uint8_t alt_timeout; /* Local ack timeout for alternate path (valid only for RC QPs) */ 472219820Sjeff+.in -8 473219820Sjeff+}; 474219820Sjeff+.fi 475219820Sjeff+.PP 476219820Sjeff+For details on struct ibv_qp_cap see the description of 477219820Sjeff+.B ibv_create_qp()\fR. 478219820Sjeff+For details on struct ibv_ah_attr see the description of 479219820Sjeff+.B ibv_create_ah()\fR. 480219820Sjeff+.SH "RETURN VALUE" 481219820Sjeff+.B ibv_query_xrc_rcv_qp() 482219820Sjeff+returns 0 on success, or the value of errno on failure (which indicates the failure reason). 483219820Sjeff+.SH "NOTES" 484219820Sjeff+The argument 485219820Sjeff+.I attr_mask 486219820Sjeff+is a hint that specifies the minimum list of attributes to retrieve. 487219820Sjeff+Some InfiniBand devices may return extra attributes not requested, for 488219820Sjeff+example if the value can be returned cheaply. 489219820Sjeff+.PP 490219820Sjeff+Attribute values are valid if they have been set using 491219820Sjeff+.B ibv_modify_xrc_rcv_qp()\fR. 492219820Sjeff+The exact list of valid attributes depends on the QP state. 493219820Sjeff+.PP 494219820Sjeff+Multiple calls to 495219820Sjeff+.B ibv_query_xrc_rcv_qp() 496219820Sjeff+may yield some differences in the values returned for the following attributes: qp_state, path_mig_state, sq_draining, ah_attr (if APM is enabled). 497219820Sjeff+.SH "SEE ALSO" 498219820Sjeff+.BR ibv_open_xrc_domain (3), 499219820Sjeff+.BR ibv_create_xrc_rcv_qp (3), 500219820Sjeff+.BR ibv_modify_xrc_rcv_qp (3) 501219820Sjeff+.SH "AUTHORS" 502219820Sjeff+.TP 503219820Sjeff+Dotan Barak <dotanb@mellanox.co.il> 504219820SjeffIndex: libibverbs/man/ibv_reg_xrc_rcv_qp.3 505219820Sjeff=================================================================== 506219820Sjeff--- /dev/null 1970-01-01 00:00:00.000000000 +0000 507219820Sjeff+++ libibverbs/man/ibv_reg_xrc_rcv_qp.3 2008-06-05 16:25:21.000000000 +0300 508219820Sjeff@@ -0,0 +1,57 @@ 509219820Sjeff+.\" -*- nroff -*- 510219820Sjeff+.\" 511219820Sjeff+.TH IBV_REG_XRC_RCV_QP 3 2008-10-02 libibverbs "Libibverbs Programmer's Manual" 512219820Sjeff+.SH "NAME" 513219820Sjeff+ibv_reg_xrc_rcv_qp, ibv_unreg_xrc_rcv_qp \- register and unregister a user process with an XRC receive queue pair (QP) 514219820Sjeff+.SH "SYNOPSIS" 515219820Sjeff+.nf 516219820Sjeff+.B #include <infiniband/verbs.h> 517219820Sjeff+.sp 518219820Sjeff+.BI "int ibv_reg_xrc_rcv_qp(struct ibv_xrc_domain " "*xrc_domain" ", uint32_t " "xrc_qp_num" "); 519219820Sjeff+.nl 520219820Sjeff+.BI "int ibv_unreg_xrc_rcv_qp(struct ibv_xrc_domain " "*xrc_domain" ", uint32_t " "xrc_qp_num" "); 521219820Sjeff+.fi 522219820Sjeff+.SH "DESCRIPTION" 523219820Sjeff+.B ibv_reg_xrc_rcv_qp() 524219820Sjeff+registers a user process with the XRC receive QP (created via 525219820Sjeff+.B ibv_create_xrc_rcv_qp() 526219820Sjeff+) whose number is 527219820Sjeff+.I xrc_qp_num\fR, 528219820Sjeff+and which is associated with the XRC domain 529219820Sjeff+.I xrc_domain\fR. 530219820Sjeff+.PP 531219820Sjeff+.B ibv_unreg_xrc_rcv_qp() 532219820Sjeff+unregisters a user process from the XRC receive QP number 533219820Sjeff+.I xrc_qp_num\fR, 534219820Sjeff+which is associated with the XRC domain 535219820Sjeff+.I xrc_domain\fR. 536219820Sjeff+When the number of user processes registered with this XRC receive QP drops to zero, the QP is destroyed. 537219820Sjeff+.SH "RETURN VALUE" 538219820Sjeff+.B ibv_reg_xrc_rcv_qp() 539219820Sjeff+and 540219820Sjeff+.B ibv_unreg_xrc_rcv_qp() 541219820Sjeff+returns 0 on success, or the value of errno on failure (which indicates the failure reason). 542219820Sjeff+.SH "NOTES" 543219820Sjeff+.B ibv_reg_xrc_rcv_qp() 544219820Sjeff+and 545219820Sjeff+.B ibv_unreg_xrc_rcv_qp() 546219820Sjeff+may fail if the number 547219820Sjeff+.I xrc_qp_num 548219820Sjeff+is not a number of a valid XRC receive QP (the QP is not allocated or it is the number of a non-XRC QP), or 549219820Sjeff+the XRC receive QP was created with an XRC domain other than 550219820Sjeff+.I xrc_domain\fR. 551219820Sjeff+ 552219820Sjeff+If a process is still registered with any XRC RCV QPs belonging to some domain, 553219820Sjeff+.B ibv_close_xrc_domain() 554219820Sjeff+will return failure if called for that domain in that process. 555219820Sjeff+ 556219820Sjeff+.B ibv_create_xrc_rcv_qp() 557219820Sjeff+performs an implicit registration for the creating process; when that process is finished with the XRC RCV QP, it should call 558219820Sjeff+.B ibv_unreg_xrc_rcv_qp() 559219820Sjeff+for that QP. Note that if no other processes are registered with the QP at this time, its registration count will drop to zero and it will be destroyed. 560219820Sjeff+.SH "SEE ALSO" 561219820Sjeff+.BR ibv_open_xrc_domain (3), 562219820Sjeff+.BR ibv_create_xrc_rcv_qp (3) 563219820Sjeff+.SH "AUTHORS" 564219820Sjeff+.TP 565219820Sjeff+Dotan Barak <dotanb@mellanox.co.il> 566219820SjeffIndex: libibverbs/man/verbs.7 567219820Sjeff=================================================================== 568219820Sjeff--- libibverbs.orig/man/verbs.7 2008-06-05 15:24:00.000000000 +0300 569219820Sjeff+++ libibverbs/man/verbs.7 2008-06-05 16:25:21.000000000 +0300 570219820Sjeff@@ -1,6 +1,6 @@ 571219820Sjeff .\" -*- nroff -*- 572219820Sjeff .\" 573219820Sjeff-.TH VERBS 7 2008-01-17 libibverbs "Libibverbs Programmer's Manual" 574219820Sjeff+.TH VERBS 7 2008-02-25 libibverbs "Libibverbs Programmer's Manual" 575219820Sjeff .SH "NAME" 576219820Sjeff verbs \- Infiniband verbs library 577219820Sjeff .SH "SYNOPSIS" 578219820Sjeff@@ -8,7 +8,7 @@ verbs \- Infiniband verbs library 579219820Sjeff .B #include <infiniband/verbs.h> 580219820Sjeff .fi 581219820Sjeff .SH "DESCRIPTION" 582219820Sjeff-This library is an implementation of the verbs according to the Infiniband specification volume 1.2. It handles the control path of creating, modifying, querying and destroying resources such as Protection Domains (PD), Completion Queues (CQ), Queue-Pairs (QP), Shared Receive Queues (SRQ), Address Handles (AH), Memory Regions (MR). It also handles sending and receiving data posted to QPs and SRQs, getting completions from CQs using polling and completions events. 583219820Sjeff+This library is an implementation of the verbs based on the Infiniband specification volume 1.2 chapter 11. It handles the control path of creating, modifying, querying and destroying resources such as Protection Domains (PD), Completion Queues (CQ), Queue-Pairs (QP), Shared Receive Queues (SRQ), Address Handles (AH), Memory Regions (MR). It also handles sending and receiving data posted to QPs and SRQs, getting completions from CQs using polling and completions events. 584219820Sjeff 585219820Sjeff The control path is implemented through system calls to the uverbs kernel module which further calls the low level HW driver. The data path is implemented through calls made to low level HW library which in most cases interacts directly with the HW providing kernel and network stack bypass (saving context/mode switches) along with zero copy and an asynchronous I/O model. 586219820Sjeff 587219820Sjeff@@ -117,6 +117,25 @@ int ibv_modify_srq(struct ibv_srq *srq, 588219820Sjeff enum ibv_srq_attr_mask srq_attr_mask); 589219820Sjeff int ibv_query_srq(struct ibv_srq *srq, struct ibv_srq_attr *srq_attr); 590219820Sjeff 591219820Sjeff+.B eXtended Reliable Connection control 592219820Sjeff+ 593219820Sjeff+struct ibv_xrc_domain *ibv_open_xrc_domain(struct ibv_context *context, 594219820Sjeff+ int fd, int oflag); 595219820Sjeff+int ibv_close_xrc_domain(struct ibv_xrc_domain *d); 596219820Sjeff+struct ibv_srq *ibv_create_xrc_srq(struct ibv_pd *pd, 597219820Sjeff+ struct ibv_xrc_domain *xrc_domain, 598219820Sjeff+ struct ibv_cq *xrc_cq, 599219820Sjeff+ struct ibv_srq_init_attr *srq_init_attr); 600219820Sjeff+int ibv_create_xrc_rcv_qp(struct ibv_qp_init_attr *init_attr, 601219820Sjeff+ uint32_t *xrc_rcv_qpn); 602219820Sjeff+int ibv_modify_xrc_rcv_qp(struct ibv_xrc_domain *xrc_domain, uint32_t xrc_qp_num, 603219820Sjeff+ struct ibv_qp_attr *attr, int attr_mask); 604219820Sjeff+int ibv_query_xrc_rcv_qp(struct ibv_xrc_domain *xrc_domain, uint32_t xrc_qp_num, 605219820Sjeff+ struct ibv_qp_attr *attr, int attr_mask, 606219820Sjeff+ struct ibv_qp_init_attr *init_attr); 607219820Sjeff+int ibv_reg_xrc_rcv_qp(struct ibv_xrc_domain *xrc_domain, uint32_t xrc_qp_num); 608219820Sjeff+int ibv_unreg_xrc_rcv_qp(struct ibv_xrc_domain *xrc_domain, uint32_t xrc_qp_num); 609219820Sjeff+ 610219820Sjeff .B Queue Pair control 611219820Sjeff 612219820Sjeff struct ibv_qp *ibv_create_qp(struct ibv_pd *pd, 613219820Sjeff@@ -183,6 +202,14 @@ enum ibv_rate mult_to_ibv_rate(int mult) 614219820Sjeff \fIibv_destroy_srq\fP(), 615219820Sjeff \fIibv_modify_srq\fP(), 616219820Sjeff \fIibv_query_srq\fP(), 617219820Sjeff+\fIibv_open_xrc_domain\fP(), 618219820Sjeff+\fIibv_close_xrc_domain\fP(), 619219820Sjeff+\fIibv_create_xrc_srq\fP(), 620219820Sjeff+\fIibv_create_xrc_rcv_qp\fP(), 621219820Sjeff+\fIibv_modify_xrc_rcv_qp\fP(), 622219820Sjeff+\fIibv_query_xrc_rcv_qp\fP(), 623219820Sjeff+\fIibv_reg_xrc_rcv_qp\fP(), 624219820Sjeff+\fIibv_unreg_xrc_rcv_qp\fP(), 625219820Sjeff \fIibv_post_srq_recv\fP(), 626219820Sjeff \fIibv_create_qp\fP(), 627219820Sjeff \fIibv_destroy_qp\fP(), 628219820SjeffIndex: libibverbs/Makefile.am 629219820Sjeff=================================================================== 630219820Sjeff--- libibverbs.orig/Makefile.am 2008-06-05 15:24:00.000000000 +0300 631219820Sjeff+++ libibverbs/Makefile.am 2008-06-05 16:39:27.000000000 +0300 632219820Sjeff@@ -44,15 +44,18 @@ man_MANS = man/ibv_asyncwatch.1 man/ibv_ 633219820Sjeff man/ibv_srq_pingpong.1 man/ibv_alloc_pd.3 man/ibv_attach_mcast.3 \ 634219820Sjeff man/ibv_create_ah.3 man/ibv_create_ah_from_wc.3 \ 635219820Sjeff man/ibv_create_comp_channel.3 man/ibv_create_cq.3 \ 636219820Sjeff- man/ibv_create_qp.3 man/ibv_create_srq.3 man/ibv_event_type_str.3 \ 637219820Sjeff+ man/ibv_create_qp.3 man/ibv_create_srq.3 \ 638219820Sjeff+ man/ibv_create_xrc_rcv_qp.3 man/ibv_event_type_str.3 \ 639219820Sjeff man/ibv_fork_init.3 man/ibv_get_async_event.3 \ 640219820Sjeff man/ibv_get_cq_event.3 man/ibv_get_device_guid.3 \ 641219820Sjeff man/ibv_get_device_list.3 man/ibv_get_device_name.3 \ 642219820Sjeff- man/ibv_modify_qp.3 man/ibv_modify_srq.3 man/ibv_open_device.3 \ 643219820Sjeff+ man/ibv_modify_qp.3 man/ibv_modify_srq.3 man/ibv_modify_xrc_rcv_qp.3 \ 644219820Sjeff+ man/ibv_open_device.3 man/ibv_open_xrc_domain.3 \ 645219820Sjeff man/ibv_poll_cq.3 man/ibv_post_recv.3 man/ibv_post_send.3 \ 646219820Sjeff man/ibv_post_srq_recv.3 man/ibv_query_device.3 man/ibv_query_gid.3 \ 647219820Sjeff man/ibv_query_pkey.3 man/ibv_query_port.3 man/ibv_query_qp.3 \ 648219820Sjeff- man/ibv_query_srq.3 man/ibv_rate_to_mult.3 man/ibv_reg_mr.3 \ 649219820Sjeff+ man/ibv_query_srq.3 man/ibv_query_xrc_rcv_qp.3 \ 650219820Sjeff+ man/ibv_rate_to_mult.3 man/ibv_reg_mr.3 man/ibv_reg_xrc_rcv_qp.3 \ 651219820Sjeff man/ibv_req_notify_cq.3 man/ibv_resize_cq.3 man/verbs.7 652219820Sjeff 653219820Sjeff DEBIAN = debian/changelog debian/compat debian/control debian/copyright \ 654219820Sjeff@@ -74,6 +77,8 @@ install-data-hook: 655219820Sjeff $(RM) ibv_ack_async_event.3 && \ 656219820Sjeff $(RM) ibv_ack_cq_events.3 && \ 657219820Sjeff $(RM) ibv_close_device.3 && \ 658219820Sjeff+ $(RM) ibv_close_xrc_domain.3 && \ 659219820Sjeff+ $(RM) ibv_create_xrc_srq.3 && \ 660219820Sjeff $(RM) ibv_dealloc_pd.3 && \ 661219820Sjeff $(RM) ibv_dereg_mr.3 && \ 662219820Sjeff $(RM) ibv_destroy_ah.3 && \ 663219820Sjeff@@ -84,12 +89,15 @@ install-data-hook: 664219820Sjeff $(RM) ibv_detach_mcast.3 && \ 665219820Sjeff $(RM) ibv_free_device_list.3 && \ 666219820Sjeff $(RM) ibv_init_ah_from_wc.3 && \ 667219820Sjeff+ $(RM) ibv_unreg_xrc_rcv_qp.3 && \ 668219820Sjeff $(RM) mult_to_ibv_rate.3 && \ 669219820Sjeff $(RM) ibv_node_type_str.3 && \ 670219820Sjeff $(RM) ibv_port_state_str.3 && \ 671219820Sjeff $(LN_S) ibv_get_async_event.3 ibv_ack_async_event.3 && \ 672219820Sjeff $(LN_S) ibv_get_cq_event.3 ibv_ack_cq_events.3 && \ 673219820Sjeff $(LN_S) ibv_open_device.3 ibv_close_device.3 && \ 674219820Sjeff+ $(LN_S) ibv_open_xrc_domain.3 ibv_close_xrc_domain.3 && \ 675219820Sjeff+ $(LN_S) ibv_create_srq.3 ibv_create_xrc_srq.3 && \ 676219820Sjeff $(LN_S) ibv_alloc_pd.3 ibv_dealloc_pd.3 && \ 677219820Sjeff $(LN_S) ibv_reg_mr.3 ibv_dereg_mr.3 && \ 678219820Sjeff $(LN_S) ibv_create_ah.3 ibv_destroy_ah.3 && \ 679219820Sjeff@@ -100,6 +108,7 @@ install-data-hook: 680219820Sjeff $(LN_S) ibv_attach_mcast.3 ibv_detach_mcast.3 && \ 681219820Sjeff $(LN_S) ibv_get_device_list.3 ibv_free_device_list.3 && \ 682219820Sjeff $(LN_S) ibv_create_ah_from_wc.3 ibv_init_ah_from_wc.3 && \ 683219820Sjeff+ $(LN_S) ibv_reg_xrc_rcv_qp.3 ibv_unreg_xrc_rcv_qp.3 && \ 684219820Sjeff $(LN_S) ibv_rate_to_mult.3 mult_to_ibv_rate.3 && \ 685219820Sjeff $(LN_S) ibv_event_type_str.3 ibv_node_type_str.3 && \ 686219820Sjeff $(LN_S) ibv_event_type_str.3 ibv_port_state_str.3 687