From c335f8eae4e23f1f69418dfd1b2ec442e3c1a70a Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sat, 5 Mar 2016 15:33:28 +0000 Subject: [infiniband] Record multicast GID attachment as part of group membership Signed-off-by: Michael Brown --- src/drivers/net/ipoib.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) (limited to 'src/drivers/net') diff --git a/src/drivers/net/ipoib.c b/src/drivers/net/ipoib.c index e54f8df40..8165f96e0 100644 --- a/src/drivers/net/ipoib.c +++ b/src/drivers/net/ipoib.c @@ -89,14 +89,8 @@ struct ipoib_device { struct ipoib_mac mac; /** Broadcast MAC */ struct ipoib_mac broadcast; - /** Joined to IPv4 broadcast multicast group - * - * This flag indicates whether or not we have initiated the - * join to the IPv4 broadcast multicast group. - */ - int broadcast_joined; /** IPv4 broadcast multicast group membership */ - struct ib_mc_membership broadcast_membership; + struct ib_mc_membership membership; /** REMAC cache */ struct list_head peers; }; @@ -742,8 +736,8 @@ void ipoib_join_complete ( struct ib_device *ibdev __unused, struct ib_queue_pair *qp __unused, struct ib_mc_membership *membership, int rc, union ib_mad *mad __unused ) { - struct ipoib_device *ipoib = container_of ( membership, - struct ipoib_device, broadcast_membership ); + struct ipoib_device *ipoib = + container_of ( membership, struct ipoib_device, membership ); /* Record join status as link status */ netdev_link_err ( ipoib->netdev, rc ); @@ -759,14 +753,12 @@ static int ipoib_join_broadcast_group ( struct ipoib_device *ipoib ) { int rc; if ( ( rc = ib_mcast_join ( ipoib->ibdev, ipoib->qp, - &ipoib->broadcast_membership, - &ipoib->broadcast.gid, + &ipoib->membership, &ipoib->broadcast.gid, ipoib_join_complete ) ) != 0 ) { DBGC ( ipoib, "IPoIB %p could not join broadcast group: %s\n", ipoib, strerror ( rc ) ); return rc; } - ipoib->broadcast_joined = 1; return 0; } @@ -778,11 +770,7 @@ static int ipoib_join_broadcast_group ( struct ipoib_device *ipoib ) { */ static void ipoib_leave_broadcast_group ( struct ipoib_device *ipoib ) { - if ( ipoib->broadcast_joined ) { - ib_mcast_leave ( ipoib->ibdev, ipoib->qp, - &ipoib->broadcast_membership ); - ipoib->broadcast_joined = 0; - } + ib_mcast_leave ( ipoib->ibdev, ipoib->qp, &ipoib->membership ); } /** -- cgit v1.2.3-55-g7522