]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[infiniband] Assign names to CMRC connections
authorMichael Brown <mcb30@ipxe.org>
Tue, 8 Mar 2016 15:34:25 +0000 (15:34 +0000)
committerMichael Brown <mcb30@ipxe.org>
Tue, 8 Mar 2016 15:51:19 +0000 (15:51 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/include/ipxe/ib_cmrc.h
src/net/infiniband/ib_cmrc.c
src/net/infiniband/ib_srp.c

index 47ad27fa6ddece98caab40910bea324bd405a4c6..f3276e6eff5e9cd3723815120e417129c4ea8e9c 100644 (file)
@@ -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 */
index 16f85a9cdee7305d9e6610dbb0338d451866cf7f..f4cd583d1a489c87a6edb98337f427e5b58d176a 100644 (file)
@@ -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.
index 3700184c0317bdc52e8a15bc619bfd96a2f44ba6..3b4914abf98114fd5abea973d1e19b54a1849bb1 100644 (file)
@@ -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;