瀏覽代碼

[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 年之前
父節點
當前提交
b4155c4ab5
共有 3 個檔案被更改,包括 10 行新增10 行删除
  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 查看文件

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

+ 6
- 0
src/net/infiniband.c 查看文件

@@ -360,6 +360,12 @@ int ib_post_send ( struct ib_device *ibdev, struct ib_queue_pair *qp,
360 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 369
 	/* Post to hardware */
364 370
 	if ( ( rc = ibdev->op->post_send ( ibdev, qp, av, iobuf ) ) != 0 ) {
365 371
 		DBGC ( ibdev, "IBDEV %p QPN %#lx could not post send WQE: "

+ 0
- 4
src/net/infiniband/ib_gma.c 查看文件

@@ -197,10 +197,6 @@ static void ib_gma_complete_recv ( struct ib_device *ibdev,
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 200
 	/* Send MAD response, if applicable */
205 201
 	if ( ( rc = ib_post_send ( ibdev, qp, av,
206 202
 				   iob_disown ( iobuf ) ) ) != 0 ) {

Loading…
取消
儲存