summaryrefslogtreecommitdiffstats
path: root/src/net
diff options
context:
space:
mode:
authorMichael Brown2017-03-22 09:57:06 +0100
committerMichael Brown2017-03-22 10:18:23 +0100
commitc26c1fd07c51bb9c5e2c7829f77be4d6d0fcc806 (patch)
treee287e5f551ef41db4ab83b9eadd23fe8f967a76d /src/net
parent[infiniband] Return status code from ib_create_cq() and ib_create_qp() (diff)
downloadipxe-c26c1fd07c51bb9c5e2c7829f77be4d6d0fcc806.tar.gz
ipxe-c26c1fd07c51bb9c5e2c7829f77be4d6d0fcc806.tar.xz
ipxe-c26c1fd07c51bb9c5e2c7829f77be4d6d0fcc806.zip
[infiniband] Return status code from ib_create_mi()
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/net')
-rw-r--r--src/net/infiniband.c14
-rw-r--r--src/net/infiniband/ib_mi.c16
2 files changed, 16 insertions, 14 deletions
diff --git a/src/net/infiniband.c b/src/net/infiniband.c
index fa45653e..3b79a660 100644
--- a/src/net/infiniband.c
+++ b/src/net/infiniband.c
@@ -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;
}
diff --git a/src/net/infiniband/ib_mi.c b/src/net/infiniband/ib_mi.c
index 149c1e4d..781a3e2e 100644
--- a/src/net/infiniband/ib_mi.c
+++ b/src/net/infiniband/ib_mi.c
@@ -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;
}
/**