diff options
author | Michael Brown <mcb30@ipxe.org> | 2016-03-08 15:34:25 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2016-03-08 15:51:19 +0000 |
commit | 174bf6b5698299678f2d928cae126353558a766d (patch) | |
tree | ff408545ff5447315e014395f0a5103d1ee4d149 | |
parent | d3db00ecf9f9860d8e029b22b17a5cef9dbdbc33 (diff) | |
download | ipxe-174bf6b5698299678f2d928cae126353558a766d.tar.gz |
[infiniband] Assign names to CMRC connections
Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r-- | src/include/ipxe/ib_cmrc.h | 7 | ||||
-rw-r--r-- | src/net/infiniband/ib_cmrc.c | 84 | ||||
-rw-r--r-- | src/net/infiniband/ib_srp.c | 2 |
3 files changed, 53 insertions, 40 deletions
diff --git a/src/include/ipxe/ib_cmrc.h b/src/include/ipxe/ib_cmrc.h index 47ad27fa6..f3276e6ef 100644 --- a/src/include/ipxe/ib_cmrc.h +++ b/src/include/ipxe/ib_cmrc.h @@ -12,9 +12,8 @@ FILE_LICENCE ( BSD2 ); #include <ipxe/infiniband.h> #include <ipxe/xfer.h> -extern int ib_cmrc_open ( struct interface *xfer, - struct ib_device *ibdev, - union ib_gid *dgid, - union ib_guid *service_id ); +extern int ib_cmrc_open ( struct interface *xfer, struct ib_device *ibdev, + union ib_gid *dgid, union ib_guid *service_id, + const char *name ); #endif /* _IPXE_IB_CMRC_H */ diff --git a/src/net/infiniband/ib_cmrc.c b/src/net/infiniband/ib_cmrc.c index 16f85a9cd..f4cd583d1 100644 --- a/src/net/infiniband/ib_cmrc.c +++ b/src/net/infiniband/ib_cmrc.c @@ -69,6 +69,8 @@ FILE_LICENCE ( BSD2 ); struct ib_cmrc_connection { /** Reference count */ struct refcnt refcnt; + /** Name */ + const char *name; /** Data transfer interface */ struct interface xfer; /** Infiniband device */ @@ -108,14 +110,16 @@ struct ib_cmrc_connection { * shutdown process has run. */ static void ib_cmrc_shutdown ( struct ib_cmrc_connection *cmrc ) { + struct ib_device *ibdev = cmrc->ibdev; - DBGC ( cmrc, "CMRC %p shutting down\n", cmrc ); + DBGC ( cmrc, "CMRC %s %s shutting down\n", + ibdev->name, cmrc->name ); /* Shut down Infiniband interface */ - ib_destroy_conn ( cmrc->ibdev, cmrc->qp, cmrc->conn ); - ib_destroy_qp ( cmrc->ibdev, cmrc->qp ); - ib_destroy_cq ( cmrc->ibdev, cmrc->cq ); - ib_close ( cmrc->ibdev ); + ib_destroy_conn ( ibdev, cmrc->qp, cmrc->conn ); + ib_destroy_qp ( ibdev, cmrc->qp ); + ib_destroy_cq ( ibdev, cmrc->cq ); + ib_close ( ibdev ); /* Cancel any pending shutdown */ process_del ( &cmrc->shutdown ); @@ -149,7 +153,7 @@ static void ib_cmrc_close ( struct ib_cmrc_connection *cmrc, int rc ) { * @v private_data Private data, if available * @v private_data_len Length of private data */ -static void ib_cmrc_changed ( struct ib_device *ibdev __unused, +static void ib_cmrc_changed ( struct ib_device *ibdev, struct ib_queue_pair *qp, struct ib_connection *conn __unused, int rc_cm, void *private_data, size_t private_data_len ) { @@ -158,22 +162,24 @@ static void ib_cmrc_changed ( struct ib_device *ibdev __unused, /* Record connection status */ if ( rc_cm == 0 ) { - DBGC ( cmrc, "CMRC %p connected\n", cmrc ); + DBGC ( cmrc, "CMRC %s %s connected\n", + ibdev->name, cmrc->name ); cmrc->connected = 1; } else { - DBGC ( cmrc, "CMRC %p disconnected: %s\n", - cmrc, strerror ( rc_cm ) ); + DBGC ( cmrc, "CMRC %s %s disconnected: %s\n", + ibdev->name, cmrc->name, strerror ( rc_cm ) ); cmrc->connected = 0; } /* Pass up any private data */ - DBGC2 ( cmrc, "CMRC %p received private data:\n", cmrc ); + DBGC2 ( cmrc, "CMRC %s %s received private data:\n", + ibdev->name, cmrc->name ); DBGC2_HDA ( cmrc, 0, private_data, private_data_len ); if ( private_data && ( rc_xfer = xfer_deliver_raw ( &cmrc->xfer, private_data, private_data_len ) ) != 0 ) { - DBGC ( cmrc, "CMRC %p could not deliver private data: %s\n", - cmrc, strerror ( rc_xfer ) ); + DBGC ( cmrc, "CMRC %s %s could not deliver private data: %s\n", + ibdev->name, cmrc->name, strerror ( rc_xfer ) ); ib_cmrc_close ( cmrc, rc_xfer ); return; } @@ -201,7 +207,7 @@ static struct ib_connection_operations ib_cmrc_conn_op = { * @v iobuf I/O buffer * @v rc Completion status code */ -static void ib_cmrc_complete_send ( struct ib_device *ibdev __unused, +static void ib_cmrc_complete_send ( struct ib_device *ibdev, struct ib_queue_pair *qp, struct io_buffer *iobuf, int rc ) { struct ib_cmrc_connection *cmrc = ib_qp_get_ownerdata ( qp ); @@ -211,8 +217,8 @@ static void ib_cmrc_complete_send ( struct ib_device *ibdev __unused, /* Close the connection on any send errors */ if ( rc != 0 ) { - DBGC ( cmrc, "CMRC %p send error: %s\n", - cmrc, strerror ( rc ) ); + DBGC ( cmrc, "CMRC %s %s send error: %s\n", + ibdev->name, cmrc->name, strerror ( rc ) ); ib_cmrc_close ( cmrc, rc ); return; } @@ -228,7 +234,7 @@ static void ib_cmrc_complete_send ( struct ib_device *ibdev __unused, * @v iobuf I/O buffer * @v rc Completion status code */ -static void ib_cmrc_complete_recv ( struct ib_device *ibdev __unused, +static void ib_cmrc_complete_recv ( struct ib_device *ibdev, struct ib_queue_pair *qp, struct ib_address_vector *dest __unused, struct ib_address_vector *source __unused, @@ -237,20 +243,20 @@ static void ib_cmrc_complete_recv ( struct ib_device *ibdev __unused, /* Close the connection on any receive errors */ if ( rc != 0 ) { - DBGC ( cmrc, "CMRC %p receive error: %s\n", - cmrc, strerror ( rc ) ); + DBGC ( cmrc, "CMRC %s %s receive error: %s\n", + ibdev->name, cmrc->name, strerror ( rc ) ); free_iob ( iobuf ); ib_cmrc_close ( cmrc, rc ); return; } - DBGC2 ( cmrc, "CMRC %p received:\n", cmrc ); + DBGC2 ( cmrc, "CMRC %s %s received:\n", ibdev->name, cmrc->name ); DBGC2_HDA ( cmrc, 0, iobuf->data, iob_len ( iobuf ) ); /* Pass up data */ if ( ( rc = xfer_deliver_iob ( &cmrc->xfer, iobuf ) ) != 0 ) { - DBGC ( cmrc, "CMRC %p could not deliver data: %s\n", - cmrc, strerror ( rc ) ); + DBGC ( cmrc, "CMRC %s %s could not deliver data: %s\n", + ibdev->name, cmrc->name, strerror ( rc ) ); ib_cmrc_close ( cmrc, rc ); return; } @@ -278,6 +284,7 @@ static struct ib_queue_pair_operations ib_cmrc_queue_pair_ops = { static int ib_cmrc_xfer_deliver ( struct ib_cmrc_connection *cmrc, struct io_buffer *iobuf, struct xfer_metadata *meta __unused ) { + struct ib_device *ibdev = cmrc->ibdev; int rc; /* If no connection has yet been attempted, send this datagram @@ -287,8 +294,9 @@ static int ib_cmrc_xfer_deliver ( struct ib_cmrc_connection *cmrc, /* Abort if we have already sent a CM connection request */ if ( cmrc->conn ) { - DBGC ( cmrc, "CMRC %p attempt to send before " - "connection is complete\n", cmrc ); + DBGC ( cmrc, "CMRC %s %s attempt to send before " + "connection is complete\n", + ibdev->name, cmrc->name ); rc = -EIO; goto out; } @@ -299,20 +307,21 @@ static int ib_cmrc_xfer_deliver ( struct ib_cmrc_connection *cmrc, iobuf->data, iob_len ( iobuf ), &ib_cmrc_conn_op ); if ( ! cmrc->conn ) { - DBGC ( cmrc, "CMRC %p could not connect\n", cmrc ); + DBGC ( cmrc, "CMRC %s %s could not connect\n", + ibdev->name, cmrc->name ); rc = -ENOMEM; goto out; } - DBGC ( cmrc, "CMRC %p using CM %08x\n", - cmrc, cmrc->conn->local_id ); + DBGC ( cmrc, "CMRC %s %s using CM %08x\n", + ibdev->name, cmrc->name, cmrc->conn->local_id ); } else { /* Send via QP */ if ( ( rc = ib_post_send ( cmrc->ibdev, cmrc->qp, NULL, iob_disown ( iobuf ) ) ) != 0 ) { - DBGC ( cmrc, "CMRC %p could not send: %s\n", - cmrc, strerror ( rc ) ); + DBGC ( cmrc, "CMRC %s %s could not send: %s\n", + ibdev->name, cmrc->name, strerror ( rc ) ); goto out; } @@ -382,10 +391,12 @@ static struct process_descriptor ib_cmrc_shutdown_desc = * @v ibdev Infiniband device * @v dgid Destination GID * @v service_id Service ID + * @v name Connection name * @ret rc Returns status code */ int ib_cmrc_open ( struct interface *xfer, struct ib_device *ibdev, - union ib_gid *dgid, union ib_guid *service_id ) { + union ib_gid *dgid, union ib_guid *service_id, + const char *name ) { struct ib_cmrc_connection *cmrc; int rc; @@ -396,6 +407,7 @@ int ib_cmrc_open ( struct interface *xfer, struct ib_device *ibdev, goto err_alloc; } ref_init ( &cmrc->refcnt, NULL ); + cmrc->name = name; intf_init ( &cmrc->xfer, &ib_cmrc_xfer_desc, &cmrc->refcnt ); cmrc->ibdev = ibdev; memcpy ( &cmrc->dgid, dgid, sizeof ( cmrc->dgid ) ); @@ -405,8 +417,8 @@ int ib_cmrc_open ( struct interface *xfer, struct ib_device *ibdev, /* Open Infiniband device */ if ( ( rc = ib_open ( ibdev ) ) != 0 ) { - DBGC ( cmrc, "CMRC %p could not open device: %s\n", - cmrc, strerror ( rc ) ); + DBGC ( cmrc, "CMRC %s %s could not open device: %s\n", + ibdev->name, cmrc->name, strerror ( rc ) ); goto err_open; } @@ -414,8 +426,8 @@ int ib_cmrc_open ( struct interface *xfer, struct ib_device *ibdev, cmrc->cq = ib_create_cq ( ibdev, IB_CMRC_NUM_CQES, &ib_cmrc_completion_ops ); if ( ! cmrc->cq ) { - DBGC ( cmrc, "CMRC %p could not create completion queue\n", - cmrc ); + DBGC ( cmrc, "CMRC %s %s could not create completion queue\n", + ibdev->name, cmrc->name ); rc = -ENOMEM; goto err_create_cq; } @@ -425,12 +437,14 @@ int ib_cmrc_open ( struct interface *xfer, struct ib_device *ibdev, cmrc->cq, IB_CMRC_NUM_RECV_WQES, cmrc->cq, &ib_cmrc_queue_pair_ops ); if ( ! cmrc->qp ) { - DBGC ( cmrc, "CMRC %p could not create queue pair\n", cmrc ); + DBGC ( cmrc, "CMRC %s %s could not create queue pair\n", + ibdev->name, cmrc->name ); rc = -ENOMEM; goto err_create_qp; } ib_qp_set_ownerdata ( cmrc->qp, cmrc ); - DBGC ( cmrc, "CMRC %p using QPN %#lx\n", cmrc, cmrc->qp->qpn ); + DBGC ( cmrc, "CMRC %s %s using QPN %#lx\n", + ibdev->name, cmrc->name, cmrc->qp->qpn ); /* Attach to parent interface, transfer reference (implicitly) * to our shutdown process, and return. diff --git a/src/net/infiniband/ib_srp.c b/src/net/infiniband/ib_srp.c index 3700184c0..3b4914abf 100644 --- a/src/net/infiniband/ib_srp.c +++ b/src/net/infiniband/ib_srp.c @@ -210,7 +210,7 @@ static int ib_srp_open ( struct interface *block, struct ib_device *ibdev, /* Open CMRC socket */ if ( ( rc = ib_cmrc_open ( &ib_srp->cmrc, ibdev, dgid, - service_id ) ) != 0 ) { + service_id, "SRP" ) ) != 0 ) { DBGC ( ib_srp, "IBSRP %p could not open CMRC socket: %s\n", ib_srp, strerror ( rc ) ); goto err_cmrc_open; |