]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[infiniband] Open device prior to creating SMI and GSI queue pairs
authorMichael Brown <mcb30@ipxe.org>
Tue, 15 Nov 2011 00:00:19 +0000 (00:00 +0000)
committerMichael Brown <mcb30@ipxe.org>
Tue, 15 Nov 2011 03:59:10 +0000 (03:59 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/infiniband.c

index 85084b0238757de7bf46a06cddbbda84c26454bd..d0f08885b33b69bc667ecf6b7307dfea7f068118 100644 (file)
@@ -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;