Browse Source

[infiniband] Assign names to CMRC connections

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 9 years ago
parent
commit
174bf6b569
3 changed files with 53 additions and 40 deletions
  1. 3
    4
      src/include/ipxe/ib_cmrc.h
  2. 49
    35
      src/net/infiniband/ib_cmrc.c
  3. 1
    1
      src/net/infiniband/ib_srp.c

+ 3
- 4
src/include/ipxe/ib_cmrc.h View File

12
 #include <ipxe/infiniband.h>
12
 #include <ipxe/infiniband.h>
13
 #include <ipxe/xfer.h>
13
 #include <ipxe/xfer.h>
14
 
14
 
15
-extern int ib_cmrc_open ( struct interface *xfer,
15
+extern int ib_cmrc_open ( struct interface *xfer, struct ib_device *ibdev,
16
-			  struct ib_device *ibdev,
16
+			  union ib_gid *dgid, union ib_guid *service_id,
17
-			  union ib_gid *dgid,
17
+			  const char *name );
18
-			  union ib_guid *service_id );
19
 
18
 
20
 #endif /* _IPXE_IB_CMRC_H */
19
 #endif /* _IPXE_IB_CMRC_H */

+ 49
- 35
src/net/infiniband/ib_cmrc.c View File

69
 struct ib_cmrc_connection {
69
 struct ib_cmrc_connection {
70
 	/** Reference count */
70
 	/** Reference count */
71
 	struct refcnt refcnt;
71
 	struct refcnt refcnt;
72
+	/** Name */
73
+	const char *name;
72
 	/** Data transfer interface */
74
 	/** Data transfer interface */
73
 	struct interface xfer;
75
 	struct interface xfer;
74
 	/** Infiniband device */
76
 	/** Infiniband device */
108
  * shutdown process has run.
110
  * shutdown process has run.
109
  */
111
  */
110
 static void ib_cmrc_shutdown ( struct ib_cmrc_connection *cmrc ) {
112
 static void ib_cmrc_shutdown ( struct ib_cmrc_connection *cmrc ) {
113
+	struct ib_device *ibdev = cmrc->ibdev;
111
 
114
 
112
-	DBGC ( cmrc, "CMRC %p shutting down\n", cmrc );
115
+	DBGC ( cmrc, "CMRC %s %s shutting down\n",
116
+	       ibdev->name, cmrc->name );
113
 
117
 
114
 	/* Shut down Infiniband interface */
118
 	/* Shut down Infiniband interface */
115
-	ib_destroy_conn ( cmrc->ibdev, cmrc->qp, cmrc->conn );
119
+	ib_destroy_conn ( ibdev, cmrc->qp, cmrc->conn );
116
-	ib_destroy_qp ( cmrc->ibdev, cmrc->qp );
120
+	ib_destroy_qp ( ibdev, cmrc->qp );
117
-	ib_destroy_cq ( cmrc->ibdev, cmrc->cq );
121
+	ib_destroy_cq ( ibdev, cmrc->cq );
118
-	ib_close ( cmrc->ibdev );
122
+	ib_close ( ibdev );
119
 
123
 
120
 	/* Cancel any pending shutdown */
124
 	/* Cancel any pending shutdown */
121
 	process_del ( &cmrc->shutdown );
125
 	process_del ( &cmrc->shutdown );
149
  * @v private_data	Private data, if available
153
  * @v private_data	Private data, if available
150
  * @v private_data_len	Length of private data
154
  * @v private_data_len	Length of private data
151
  */
155
  */
152
-static void ib_cmrc_changed ( struct ib_device *ibdev __unused,
156
+static void ib_cmrc_changed ( struct ib_device *ibdev,
153
 			      struct ib_queue_pair *qp,
157
 			      struct ib_queue_pair *qp,
154
 			      struct ib_connection *conn __unused, int rc_cm,
158
 			      struct ib_connection *conn __unused, int rc_cm,
155
 			      void *private_data, size_t private_data_len ) {
159
 			      void *private_data, size_t private_data_len ) {
158
 
162
 
159
 	/* Record connection status */
163
 	/* Record connection status */
160
 	if ( rc_cm == 0 ) {
164
 	if ( rc_cm == 0 ) {
161
-		DBGC ( cmrc, "CMRC %p connected\n", cmrc );
165
+		DBGC ( cmrc, "CMRC %s %s connected\n",
166
+		       ibdev->name, cmrc->name );
162
 		cmrc->connected = 1;
167
 		cmrc->connected = 1;
163
 	} else {
168
 	} else {
164
-		DBGC ( cmrc, "CMRC %p disconnected: %s\n",
169
+		DBGC ( cmrc, "CMRC %s %s disconnected: %s\n",
165
-		       cmrc, strerror ( rc_cm ) );
170
+		       ibdev->name, cmrc->name, strerror ( rc_cm ) );
166
 		cmrc->connected = 0;
171
 		cmrc->connected = 0;
167
 	}
172
 	}
168
 
173
 
169
 	/* Pass up any private data */
174
 	/* Pass up any private data */
170
-	DBGC2 ( cmrc, "CMRC %p received private data:\n", cmrc );
175
+	DBGC2 ( cmrc, "CMRC %s %s received private data:\n",
176
+		ibdev->name, cmrc->name );
171
 	DBGC2_HDA ( cmrc, 0, private_data, private_data_len );
177
 	DBGC2_HDA ( cmrc, 0, private_data, private_data_len );
172
 	if ( private_data &&
178
 	if ( private_data &&
173
 	     ( rc_xfer = xfer_deliver_raw ( &cmrc->xfer, private_data,
179
 	     ( rc_xfer = xfer_deliver_raw ( &cmrc->xfer, private_data,
174
 					    private_data_len ) ) != 0 ) {
180
 					    private_data_len ) ) != 0 ) {
175
-		DBGC ( cmrc, "CMRC %p could not deliver private data: %s\n",
181
+		DBGC ( cmrc, "CMRC %s %s could not deliver private data: %s\n",
176
-		       cmrc, strerror ( rc_xfer ) );
182
+		       ibdev->name, cmrc->name, strerror ( rc_xfer ) );
177
 		ib_cmrc_close ( cmrc, rc_xfer );
183
 		ib_cmrc_close ( cmrc, rc_xfer );
178
 		return;
184
 		return;
179
 	}
185
 	}
201
  * @v iobuf		I/O buffer
207
  * @v iobuf		I/O buffer
202
  * @v rc		Completion status code
208
  * @v rc		Completion status code
203
  */
209
  */
204
-static void ib_cmrc_complete_send ( struct ib_device *ibdev __unused,
210
+static void ib_cmrc_complete_send ( struct ib_device *ibdev,
205
 				    struct ib_queue_pair *qp,
211
 				    struct ib_queue_pair *qp,
206
 				    struct io_buffer *iobuf, int rc ) {
212
 				    struct io_buffer *iobuf, int rc ) {
207
 	struct ib_cmrc_connection *cmrc = ib_qp_get_ownerdata ( qp );
213
 	struct ib_cmrc_connection *cmrc = ib_qp_get_ownerdata ( qp );
211
 
217
 
212
 	/* Close the connection on any send errors */
218
 	/* Close the connection on any send errors */
213
 	if ( rc != 0 ) {
219
 	if ( rc != 0 ) {
214
-		DBGC ( cmrc, "CMRC %p send error: %s\n",
220
+		DBGC ( cmrc, "CMRC %s %s send error: %s\n",
215
-		       cmrc, strerror ( rc ) );
221
+		       ibdev->name, cmrc->name, strerror ( rc ) );
216
 		ib_cmrc_close ( cmrc, rc );
222
 		ib_cmrc_close ( cmrc, rc );
217
 		return;
223
 		return;
218
 	}
224
 	}
228
  * @v iobuf		I/O buffer
234
  * @v iobuf		I/O buffer
229
  * @v rc		Completion status code
235
  * @v rc		Completion status code
230
  */
236
  */
231
-static void ib_cmrc_complete_recv ( struct ib_device *ibdev __unused,
237
+static void ib_cmrc_complete_recv ( struct ib_device *ibdev,
232
 				    struct ib_queue_pair *qp,
238
 				    struct ib_queue_pair *qp,
233
 				    struct ib_address_vector *dest __unused,
239
 				    struct ib_address_vector *dest __unused,
234
 				    struct ib_address_vector *source __unused,
240
 				    struct ib_address_vector *source __unused,
237
 
243
 
238
 	/* Close the connection on any receive errors */
244
 	/* Close the connection on any receive errors */
239
 	if ( rc != 0 ) {
245
 	if ( rc != 0 ) {
240
-		DBGC ( cmrc, "CMRC %p receive error: %s\n",
246
+		DBGC ( cmrc, "CMRC %s %s receive error: %s\n",
241
-		       cmrc, strerror ( rc ) );
247
+		       ibdev->name, cmrc->name, strerror ( rc ) );
242
 		free_iob ( iobuf );
248
 		free_iob ( iobuf );
243
 		ib_cmrc_close ( cmrc, rc );
249
 		ib_cmrc_close ( cmrc, rc );
244
 		return;
250
 		return;
245
 	}
251
 	}
246
 
252
 
247
-	DBGC2 ( cmrc, "CMRC %p received:\n", cmrc );
253
+	DBGC2 ( cmrc, "CMRC %s %s received:\n", ibdev->name, cmrc->name );
248
 	DBGC2_HDA ( cmrc, 0, iobuf->data, iob_len ( iobuf ) );
254
 	DBGC2_HDA ( cmrc, 0, iobuf->data, iob_len ( iobuf ) );
249
 
255
 
250
 	/* Pass up data */
256
 	/* Pass up data */
251
 	if ( ( rc = xfer_deliver_iob ( &cmrc->xfer, iobuf ) ) != 0 ) {
257
 	if ( ( rc = xfer_deliver_iob ( &cmrc->xfer, iobuf ) ) != 0 ) {
252
-		DBGC ( cmrc, "CMRC %p could not deliver data: %s\n",
258
+		DBGC ( cmrc, "CMRC %s %s could not deliver data: %s\n",
253
-		       cmrc, strerror ( rc ) );
259
+		       ibdev->name, cmrc->name, strerror ( rc ) );
254
 		ib_cmrc_close ( cmrc, rc );
260
 		ib_cmrc_close ( cmrc, rc );
255
 		return;
261
 		return;
256
 	}
262
 	}
278
 static int ib_cmrc_xfer_deliver ( struct ib_cmrc_connection *cmrc,
284
 static int ib_cmrc_xfer_deliver ( struct ib_cmrc_connection *cmrc,
279
 				  struct io_buffer *iobuf,
285
 				  struct io_buffer *iobuf,
280
 				  struct xfer_metadata *meta __unused ) {
286
 				  struct xfer_metadata *meta __unused ) {
287
+	struct ib_device *ibdev = cmrc->ibdev;
281
 	int rc;
288
 	int rc;
282
 
289
 
283
 	/* If no connection has yet been attempted, send this datagram
290
 	/* If no connection has yet been attempted, send this datagram
287
 
294
 
288
 		/* Abort if we have already sent a CM connection request */
295
 		/* Abort if we have already sent a CM connection request */
289
 		if ( cmrc->conn ) {
296
 		if ( cmrc->conn ) {
290
-			DBGC ( cmrc, "CMRC %p attempt to send before "
297
+			DBGC ( cmrc, "CMRC %s %s attempt to send before "
291
-			       "connection is complete\n", cmrc );
298
+			       "connection is complete\n",
299
+			       ibdev->name, cmrc->name );
292
 			rc = -EIO;
300
 			rc = -EIO;
293
 			goto out;
301
 			goto out;
294
 		}
302
 		}
299
 					      iobuf->data, iob_len ( iobuf ),
307
 					      iobuf->data, iob_len ( iobuf ),
300
 					      &ib_cmrc_conn_op );
308
 					      &ib_cmrc_conn_op );
301
 		if ( ! cmrc->conn ) {
309
 		if ( ! cmrc->conn ) {
302
-			DBGC ( cmrc, "CMRC %p could not connect\n", cmrc );
310
+			DBGC ( cmrc, "CMRC %s %s could not connect\n",
311
+			       ibdev->name, cmrc->name );
303
 			rc = -ENOMEM;
312
 			rc = -ENOMEM;
304
 			goto out;
313
 			goto out;
305
 		}
314
 		}
306
-		DBGC ( cmrc, "CMRC %p using CM %08x\n",
315
+		DBGC ( cmrc, "CMRC %s %s using CM %08x\n",
307
-		       cmrc, cmrc->conn->local_id );
316
+		       ibdev->name, cmrc->name, cmrc->conn->local_id );
308
 
317
 
309
 	} else {
318
 	} else {
310
 
319
 
311
 		/* Send via QP */
320
 		/* Send via QP */
312
 		if ( ( rc = ib_post_send ( cmrc->ibdev, cmrc->qp, NULL,
321
 		if ( ( rc = ib_post_send ( cmrc->ibdev, cmrc->qp, NULL,
313
 					   iob_disown ( iobuf ) ) ) != 0 ) {
322
 					   iob_disown ( iobuf ) ) ) != 0 ) {
314
-			DBGC ( cmrc, "CMRC %p could not send: %s\n",
323
+			DBGC ( cmrc, "CMRC %s %s could not send: %s\n",
315
-			       cmrc, strerror ( rc ) );
324
+			       ibdev->name, cmrc->name, strerror ( rc ) );
316
 			goto out;
325
 			goto out;
317
 		}
326
 		}
318
 
327
 
382
  * @v ibdev		Infiniband device
391
  * @v ibdev		Infiniband device
383
  * @v dgid		Destination GID
392
  * @v dgid		Destination GID
384
  * @v service_id	Service ID
393
  * @v service_id	Service ID
394
+ * @v name		Connection name
385
  * @ret rc		Returns status code
395
  * @ret rc		Returns status code
386
  */
396
  */
387
 int ib_cmrc_open ( struct interface *xfer, struct ib_device *ibdev,
397
 int ib_cmrc_open ( struct interface *xfer, struct ib_device *ibdev,
388
-		   union ib_gid *dgid, union ib_guid *service_id ) {
398
+		   union ib_gid *dgid, union ib_guid *service_id,
399
+		   const char *name ) {
389
 	struct ib_cmrc_connection *cmrc;
400
 	struct ib_cmrc_connection *cmrc;
390
 	int rc;
401
 	int rc;
391
 
402
 
396
 		goto err_alloc;
407
 		goto err_alloc;
397
 	}
408
 	}
398
 	ref_init ( &cmrc->refcnt, NULL );
409
 	ref_init ( &cmrc->refcnt, NULL );
410
+	cmrc->name = name;
399
 	intf_init ( &cmrc->xfer, &ib_cmrc_xfer_desc, &cmrc->refcnt );
411
 	intf_init ( &cmrc->xfer, &ib_cmrc_xfer_desc, &cmrc->refcnt );
400
 	cmrc->ibdev = ibdev;
412
 	cmrc->ibdev = ibdev;
401
 	memcpy ( &cmrc->dgid, dgid, sizeof ( cmrc->dgid ) );
413
 	memcpy ( &cmrc->dgid, dgid, sizeof ( cmrc->dgid ) );
405
 
417
 
406
 	/* Open Infiniband device */
418
 	/* Open Infiniband device */
407
 	if ( ( rc = ib_open ( ibdev ) ) != 0 ) {
419
 	if ( ( rc = ib_open ( ibdev ) ) != 0 ) {
408
-		DBGC ( cmrc, "CMRC %p could not open device: %s\n",
420
+		DBGC ( cmrc, "CMRC %s %s could not open device: %s\n",
409
-		       cmrc, strerror ( rc ) );
421
+		       ibdev->name, cmrc->name, strerror ( rc ) );
410
 		goto err_open;
422
 		goto err_open;
411
 	}
423
 	}
412
 
424
 
414
 	cmrc->cq = ib_create_cq ( ibdev, IB_CMRC_NUM_CQES,
426
 	cmrc->cq = ib_create_cq ( ibdev, IB_CMRC_NUM_CQES,
415
 				  &ib_cmrc_completion_ops );
427
 				  &ib_cmrc_completion_ops );
416
 	if ( ! cmrc->cq ) {
428
 	if ( ! cmrc->cq ) {
417
-		DBGC ( cmrc, "CMRC %p could not create completion queue\n",
429
+		DBGC ( cmrc, "CMRC %s %s could not create completion queue\n",
418
-		       cmrc );
430
+		       ibdev->name, cmrc->name );
419
 		rc = -ENOMEM;
431
 		rc = -ENOMEM;
420
 		goto err_create_cq;
432
 		goto err_create_cq;
421
 	}
433
 	}
425
 				  cmrc->cq, IB_CMRC_NUM_RECV_WQES, cmrc->cq,
437
 				  cmrc->cq, IB_CMRC_NUM_RECV_WQES, cmrc->cq,
426
 				  &ib_cmrc_queue_pair_ops );
438
 				  &ib_cmrc_queue_pair_ops );
427
 	if ( ! cmrc->qp ) {
439
 	if ( ! cmrc->qp ) {
428
-		DBGC ( cmrc, "CMRC %p could not create queue pair\n", cmrc );
440
+		DBGC ( cmrc, "CMRC %s %s could not create queue pair\n",
441
+		       ibdev->name, cmrc->name );
429
 		rc = -ENOMEM;
442
 		rc = -ENOMEM;
430
 		goto err_create_qp;
443
 		goto err_create_qp;
431
 	}
444
 	}
432
 	ib_qp_set_ownerdata ( cmrc->qp, cmrc );
445
 	ib_qp_set_ownerdata ( cmrc->qp, cmrc );
433
-	DBGC ( cmrc, "CMRC %p using QPN %#lx\n", cmrc, cmrc->qp->qpn );
446
+	DBGC ( cmrc, "CMRC %s %s using QPN %#lx\n",
447
+	       ibdev->name, cmrc->name, cmrc->qp->qpn );
434
 
448
 
435
 	/* Attach to parent interface, transfer reference (implicitly)
449
 	/* Attach to parent interface, transfer reference (implicitly)
436
 	 * to our shutdown process, and return.
450
 	 * to our shutdown process, and return.

+ 1
- 1
src/net/infiniband/ib_srp.c View File

210
 
210
 
211
 	/* Open CMRC socket */
211
 	/* Open CMRC socket */
212
 	if ( ( rc = ib_cmrc_open ( &ib_srp->cmrc, ibdev, dgid,
212
 	if ( ( rc = ib_cmrc_open ( &ib_srp->cmrc, ibdev, dgid,
213
-				   service_id ) ) != 0 ) {
213
+				   service_id, "SRP" ) ) != 0 ) {
214
 		DBGC ( ib_srp, "IBSRP %p could not open CMRC socket: %s\n",
214
 		DBGC ( ib_srp, "IBSRP %p could not open CMRC socket: %s\n",
215
 		       ib_srp, strerror ( rc ) );
215
 		       ib_srp, strerror ( rc ) );
216
 		goto err_cmrc_open;
216
 		goto err_cmrc_open;

Loading…
Cancel
Save