aboutsummaryrefslogtreecommitdiffstats
path: root/src/drivers/net/ipoib.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/net/ipoib.c')
-rw-r--r--src/drivers/net/ipoib.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/src/drivers/net/ipoib.c b/src/drivers/net/ipoib.c
index 4c924d1d..c5b2b432 100644
--- a/src/drivers/net/ipoib.c
+++ b/src/drivers/net/ipoib.c
@@ -535,17 +535,11 @@ static int ipoib_open ( struct net_device *netdev ) {
/* Fill receive rings */
ib_refill_recv ( ibdev, ipoib->qp );
- /* Join broadcast group */
- if ( ( rc = ipoib_join_broadcast_group ( ipoib ) ) != 0 ) {
- DBGC ( ipoib, "IPoIB %p could not join broadcast group: %s\n",
- ipoib, strerror ( rc ) );
- goto err_join_broadcast;
- }
+ /* Fake a link status change to join the broadcast group */
+ ipoib_link_state_changed ( ibdev );
return 0;
- ipoib_leave_broadcast_group ( ipoib );
- err_join_broadcast:
ib_destroy_qp ( ibdev, ipoib->qp );
err_create_qp:
ib_destroy_cq ( ibdev, ipoib->cq );
@@ -639,7 +633,8 @@ void ipoib_link_state_changed ( struct ib_device *ibdev ) {
ipoib_set_ib_params ( ipoib );
/* Join new broadcast group */
- if ( ( rc = ipoib_join_broadcast_group ( ipoib ) ) != 0 ) {
+ if ( ib_link_ok ( ibdev ) &&
+ ( ( rc = ipoib_join_broadcast_group ( ipoib ) ) != 0 ) ) {
DBGC ( ipoib, "IPoIB %p could not rejoin broadcast group: "
"%s\n", ipoib, strerror ( rc ) );
return;