]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[infiniband] Return status code from ib_create_mi()
authorMichael Brown <mcb30@ipxe.org>
Wed, 22 Mar 2017 08:57:06 +0000 (10:57 +0200)
committerMichael Brown <mcb30@ipxe.org>
Wed, 22 Mar 2017 09:18:23 +0000 (11:18 +0200)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/include/ipxe/ib_mi.h
src/net/infiniband.c
src/net/infiniband/ib_mi.c

index c7c8143bab010bae9e36528cc445f4326d83357d..bd087cd35cb29a741e02b7ec52cf94ed4f19d69e 100644 (file)
@@ -127,8 +127,9 @@ ib_create_madx ( struct ib_device *ibdev, struct ib_mad_interface *mi,
 extern void ib_destroy_madx ( struct ib_device *ibdev,
                              struct ib_mad_interface *mi,
                              struct ib_mad_transaction *madx );
-extern struct ib_mad_interface * ib_create_mi ( struct ib_device *ibdev,
-                                               enum ib_queue_pair_type type );
+extern int ib_create_mi ( struct ib_device *ibdev,
+                         enum ib_queue_pair_type type,
+                         struct ib_mad_interface **new_mi );
 extern void ib_destroy_mi ( struct ib_device *ibdev,
                            struct ib_mad_interface *mi );
 
index fa45653ea1101408da2d02e2e3801c6d7ebfd6c2..3b79a660c21681724142807c5bf268a4131dc02c 100644 (file)
@@ -666,10 +666,9 @@ int ib_open ( struct ib_device *ibdev ) {
        }
 
        /* Create subnet management interface */
-       ibdev->smi = ib_create_mi ( ibdev, IB_QPT_SMI );
-       if ( ! ibdev->smi ) {
-               DBGC ( ibdev, "IBDEV %s could not create SMI\n", ibdev->name );
-               rc = -ENOMEM;
+       if ( ( rc = ib_create_mi ( ibdev, IB_QPT_SMI, &ibdev->smi ) ) != 0 ) {
+               DBGC ( ibdev, "IBDEV %s could not create SMI: %s\n",
+                      ibdev->name, strerror ( rc ) );
                goto err_create_smi;
        }
 
@@ -681,10 +680,9 @@ int ib_open ( struct ib_device *ibdev ) {
        }
 
        /* Create general services interface */
-       ibdev->gsi = ib_create_mi ( ibdev, IB_QPT_GSI );
-       if ( ! ibdev->gsi ) {
-               DBGC ( ibdev, "IBDEV %s could not create GSI\n", ibdev->name );
-               rc = -ENOMEM;
+       if ( ( rc = ib_create_mi ( ibdev, IB_QPT_GSI, &ibdev->gsi ) ) != 0 ) {
+               DBGC ( ibdev, "IBDEV %s could not create GSI: %s\n",
+                      ibdev->name, strerror ( rc ) );
                goto err_create_gsi;
        }
 
index 149c1e4dd4316a321cbdac90bc6ca4c8812a3e8b..781a3e2eaf07c1fa46cdfdab9dddd882a5321277 100644 (file)
@@ -341,18 +341,21 @@ void ib_destroy_madx ( struct ib_device *ibdev __unused,
  *
  * @v ibdev            Infiniband device
  * @v type             Queue pair type
- * @ret mi             Management agent, or NULL
+ * @v new_mi           New management interface to fill in
+ * @ret rc             Return status code
  */
-struct ib_mad_interface * ib_create_mi ( struct ib_device *ibdev,
-                                        enum ib_queue_pair_type type ) {
+int ib_create_mi ( struct ib_device *ibdev, enum ib_queue_pair_type type,
+                  struct ib_mad_interface **new_mi ) {
        struct ib_mad_interface *mi;
        const char *name;
        int rc;
 
        /* Allocate and initialise fields */
        mi = zalloc ( sizeof ( *mi ) );
-       if ( ! mi )
+       if ( ! mi ) {
+               rc = -ENOMEM;
                goto err_alloc;
+       }
        mi->ibdev = ibdev;
        INIT_LIST_HEAD ( &mi->madx );
 
@@ -387,7 +390,8 @@ struct ib_mad_interface * ib_create_mi ( struct ib_device *ibdev,
 
        /* Fill receive ring */
        ib_refill_recv ( ibdev, mi->qp );
-       return mi;
+       *new_mi = mi;
+       return 0;
 
  err_modify_qp:
        ib_destroy_qp ( ibdev, mi->qp );
@@ -396,7 +400,7 @@ struct ib_mad_interface * ib_create_mi ( struct ib_device *ibdev,
  err_create_cq:
        free ( mi );
  err_alloc:
-       return NULL;
+       return rc;
 }
 
 /**