From 53a7dd26cd0aff8409e16c6cc1c7423d4a551f4b Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 2 Jan 2009 21:04:31 +0000 Subject: [infiniband] Call ib_open() only when opening the IPoIB net device Defer the call to ib_open() until we want to actually open the device, rather than when the device is registered. --- src/drivers/net/ipoib.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/drivers/net/ipoib.c') diff --git a/src/drivers/net/ipoib.c b/src/drivers/net/ipoib.c index 3a78dcef4..8ad2c29fa 100644 --- a/src/drivers/net/ipoib.c +++ b/src/drivers/net/ipoib.c @@ -926,6 +926,13 @@ static int ipoib_open ( struct net_device *netdev ) { struct ipoib_mac *mac = ( ( struct ipoib_mac * ) netdev->ll_addr ); int rc; + /* Open IB device */ + if ( ( rc = ib_open ( ipoib->ibdev ) ) != 0 ) { + DBGC ( ipoib, "IPoIB %p could not open device: %s\n", + ipoib, strerror ( rc ) ); + goto err_ib_open; + } + /* Allocate metadata queue set */ if ( ( rc = ipoib_create_qset ( ipoib, &ipoib->meta, IPOIB_META_NUM_CQES, @@ -971,6 +978,8 @@ static int ipoib_open ( struct net_device *netdev ) { err_create_data_qset: ipoib_destroy_qset ( ipoib, &ipoib->meta ); err_create_meta_qset: + ib_close ( ipoib->ibdev ); + err_ib_open: return rc; } @@ -992,6 +1001,9 @@ static void ipoib_close ( struct net_device *netdev ) { /* Tear down the queues */ ipoib_destroy_qset ( ipoib, &ipoib->data ); ipoib_destroy_qset ( ipoib, &ipoib->meta ); + + /* Close IB device */ + ib_close ( ipoib->ibdev ); } /** IPoIB network device operations */ -- cgit v1.2.3-55-g7522