diff options
| author | Michael Brown | 2016-03-05 16:33:28 +0100 |
|---|---|---|
| committer | Michael Brown | 2016-03-08 13:23:30 +0100 |
| commit | c335f8eae4e23f1f69418dfd1b2ec442e3c1a70a (patch) | |
| tree | 21ac2142daf32fa36521c4ee62b3496aed8b7445 /src/drivers/net | |
| parent | [infiniband] Do not use GRH for local paths (diff) | |
| download | ipxe-c335f8eae4e23f1f69418dfd1b2ec442e3c1a70a.tar.gz ipxe-c335f8eae4e23f1f69418dfd1b2ec442e3c1a70a.tar.xz ipxe-c335f8eae4e23f1f69418dfd1b2ec442e3c1a70a.zip | |
[infiniband] Record multicast GID attachment as part of group membership
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/net')
| -rw-r--r-- | src/drivers/net/ipoib.c | 22 |
1 files changed, 5 insertions, 17 deletions
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 ); } /** |
