Browse Source

[infiniband] Make qkey and rate optional parameters to ib_post_send()

The queue key is stored as a property of the queue pair, and so can
optionally be added by the Infiniband core at the time of calling
ib_post_send(), rather than always having to be specified by the
caller.

This allows IPoIB to avoid explicitly keeping track of the data queue
key.
tags/v0.9.8
Michael Brown 15 years ago
parent
commit
b4155c4ab5
3 changed files with 10 additions and 10 deletions
  1. 4
    6
      src/drivers/net/ipoib.c
  2. 6
    0
      src/net/infiniband.c
  3. 0
    4
      src/net/infiniband/ib_gma.c

+ 4
- 6
src/drivers/net/ipoib.c View File

67
 	struct ib_queue_set meta;
67
 	struct ib_queue_set meta;
68
 	/** Broadcast MAC */
68
 	/** Broadcast MAC */
69
 	struct ipoib_mac broadcast;
69
 	struct ipoib_mac broadcast;
70
-	/** Data queue key */
71
-	unsigned long data_qkey;
72
 	/** Attached to multicast group
70
 	/** Attached to multicast group
73
 	 *
71
 	 *
74
 	 * This flag indicates whether or not we have attached our
72
 	 * This flag indicates whether or not we have attached our
433
 	/* Construct address vector */
431
 	/* Construct address vector */
434
 	memset ( &av, 0, sizeof ( av ) );
432
 	memset ( &av, 0, sizeof ( av ) );
435
 	av.qpn = ntohl ( dest->mac.qpn );
433
 	av.qpn = ntohl ( dest->mac.qpn );
436
-	av.qkey = ipoib->data_qkey;
437
 	av.gid_present = 1;
434
 	av.gid_present = 1;
438
 	memcpy ( &av.gid, &dest->mac.gid, sizeof ( av.gid ) );
435
 	memcpy ( &av.gid, &dest->mac.gid, sizeof ( av.gid ) );
439
 	if ( ( rc = ib_resolve_path ( ibdev, &av ) ) != 0 ) {
436
 	if ( ( rc = ib_resolve_path ( ibdev, &av ) ) != 0 ) {
540
  */
537
  */
541
 static void ipoib_recv_mc_member_record ( struct ipoib_device *ipoib,
538
 static void ipoib_recv_mc_member_record ( struct ipoib_device *ipoib,
542
 			       struct ib_mc_member_record *mc_member_record ) {
539
 			       struct ib_mc_member_record *mc_member_record ) {
540
+	unsigned long data_qkey;
543
 	int joined;
541
 	int joined;
544
 	int rc;
542
 	int rc;
545
 
543
 
546
 	/* Record parameters */
544
 	/* Record parameters */
547
 	joined = ( mc_member_record->scope__join_state & 0x0f );
545
 	joined = ( mc_member_record->scope__join_state & 0x0f );
548
-	ipoib->data_qkey = ntohl ( mc_member_record->qkey );
546
+	data_qkey = ntohl ( mc_member_record->qkey );
549
 	DBGC ( ipoib, "IPoIB %p %s broadcast group: qkey %lx\n",
547
 	DBGC ( ipoib, "IPoIB %p %s broadcast group: qkey %lx\n",
550
-	       ipoib, ( joined ? "joined" : "left" ), ipoib->data_qkey );
548
+	       ipoib, ( joined ? "joined" : "left" ), data_qkey );
551
 
549
 
552
 	/* Update data queue pair qkey */
550
 	/* Update data queue pair qkey */
553
 	if ( ( rc = ib_modify_qp ( ipoib->ibdev, ipoib->data.qp,
551
 	if ( ( rc = ib_modify_qp ( ipoib->ibdev, ipoib->data.qp,
554
-				   IB_MODIFY_QKEY, ipoib->data_qkey ) ) != 0 ){
552
+				   IB_MODIFY_QKEY, data_qkey ) ) != 0 ){
555
 		DBGC ( ipoib, "IPoIB %p could not update data qkey: %s\n",
553
 		DBGC ( ipoib, "IPoIB %p could not update data qkey: %s\n",
556
 		       ipoib, strerror ( rc ) );
554
 		       ipoib, strerror ( rc ) );
557
 		return;
555
 		return;

+ 6
- 0
src/net/infiniband.c View File

360
 		return -ENOBUFS;
360
 		return -ENOBUFS;
361
 	}
361
 	}
362
 
362
 
363
+	/* Fill in optional parameters in address vector */
364
+	if ( ! av->qkey )
365
+		av->qkey = qp->qkey;
366
+	if ( ! av->rate )
367
+		av->rate = IB_RATE_2_5;
368
+
363
 	/* Post to hardware */
369
 	/* Post to hardware */
364
 	if ( ( rc = ibdev->op->post_send ( ibdev, qp, av, iobuf ) ) != 0 ) {
370
 	if ( ( rc = ibdev->op->post_send ( ibdev, qp, av, iobuf ) ) != 0 ) {
365
 		DBGC ( ibdev, "IBDEV %p QPN %#lx could not post send WQE: "
371
 		DBGC ( ibdev, "IBDEV %p QPN %#lx could not post send WQE: "

+ 0
- 4
src/net/infiniband/ib_gma.c View File

197
 		}
197
 		}
198
 	}
198
 	}
199
 
199
 
200
-	/* Construct return address */
201
-	av->qkey = ( ( av->qpn == IB_QPN_SMA ) ? IB_QKEY_SMA : IB_QKEY_GMA );
202
-	av->rate = IB_RATE_2_5;
203
-
204
 	/* Send MAD response, if applicable */
200
 	/* Send MAD response, if applicable */
205
 	if ( ( rc = ib_post_send ( ibdev, qp, av,
201
 	if ( ( rc = ib_post_send ( ibdev, qp, av,
206
 				   iob_disown ( iobuf ) ) ) != 0 ) {
202
 				   iob_disown ( iobuf ) ) ) != 0 ) {

Loading…
Cancel
Save