summaryrefslogtreecommitdiffstats
path: root/src/net/infiniband.c
diff options
context:
space:
mode:
authorMichael Brown2011-11-15 01:00:19 +0100
committerMichael Brown2011-11-15 04:59:10 +0100
commit1e7fbc5bf389c1381ecd85dc86916091a27cf4fe (patch)
tree8af635c3df4d3c07d6165996cae78095d65079af /src/net/infiniband.c
parent[infiniband] Poll event queues only for devices that are open (diff)
downloadipxe-1e7fbc5bf389c1381ecd85dc86916091a27cf4fe.tar.gz
ipxe-1e7fbc5bf389c1381ecd85dc86916091a27cf4fe.tar.xz
ipxe-1e7fbc5bf389c1381ecd85dc86916091a27cf4fe.zip
[infiniband] Open device prior to creating SMI and GSI queue pairs
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/net/infiniband.c')
-rw-r--r--src/net/infiniband.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/net/infiniband.c b/src/net/infiniband.c
index 85084b02..d0f08885 100644
--- a/src/net/infiniband.c
+++ b/src/net/infiniband.c
@@ -610,6 +610,13 @@ int ib_open ( struct ib_device *ibdev ) {
return 0;
}
+ /* Open device */
+ if ( ( rc = ibdev->op->open ( ibdev ) ) != 0 ) {
+ DBGC ( ibdev, "IBDEV %p could not open: %s\n",
+ ibdev, strerror ( rc ) );
+ goto err_open;
+ }
+
/* Create subnet management interface */
ibdev->smi = ib_create_mi ( ibdev, IB_QPT_SMI );
if ( ! ibdev->smi ) {
@@ -633,13 +640,6 @@ int ib_open ( struct ib_device *ibdev ) {
goto err_create_gsi;
}
- /* Open device */
- if ( ( rc = ibdev->op->open ( ibdev ) ) != 0 ) {
- DBGC ( ibdev, "IBDEV %p could not open: %s\n",
- ibdev, strerror ( rc ) );
- goto err_open;
- }
-
/* Add to head of open devices list */
list_add ( &ibdev->open_list, &open_ib_devices );
@@ -649,14 +649,14 @@ int ib_open ( struct ib_device *ibdev ) {
assert ( ibdev->open_count == 1 );
return 0;
- ibdev->op->close ( ibdev );
- err_open:
ib_destroy_mi ( ibdev, ibdev->gsi );
err_create_gsi:
ib_destroy_sma ( ibdev, ibdev->smi );
err_create_sma:
ib_destroy_mi ( ibdev, ibdev->smi );
err_create_smi:
+ ibdev->op->close ( ibdev );
+ err_open:
assert ( ibdev->open_count == 1 );
ibdev->open_count = 0;
return rc;