[PATCH 3/5] IB/ipoib: Make sendonly multicast joins create the mcast group

Tim Gardner tim.gardner at canonical.com
Tue Feb 9 20:30:44 UTC 2016


On 02/09/2016 10:01 AM, Andy Whitcroft wrote:
> On Fri, Feb 05, 2016 at 02:11:45PM -0700, tim.gardner at canonical.com wrote:
>> From: Doug Ledford <dledford at redhat.com>
>>
>> BugLink: http://bugs.launchpad.net/bugs/1542444
>>
>> Since IPoIB should, as much as possible, emulate how multicast
>> sends work on Ethernet for regular TCP/IP apps, there should be
>> no requirement to subscribe to a multicast group before your
>> sends are properly sent.  However, due to the difference in how
>> multicast is handled on InfiniBand, we must join the appropriate
>> multicast group before we can send to it.  Previously we tried
>> not to trigger the auto-create feature of the subnet manager when
>> doing this because we didn't have tracking of these sendonly
>> groups and the auto-creation might never get undone.  The previous
>> patch added timing to these sendonly joins and allows us to
>> leave them after a reasonable idle expiration time.  So supply
>> all of the information needed to auto-create group.
>>
>> Signed-off-by: Doug Ledford <dledford at redhat.com>
>> (back ported from commit c3852ab0e606212de523c1fb1e15adbf9f431619)
>> Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
>>
>>  Conflicts:
>> 	drivers/infiniband/ulp/ipoib/ipoib_multicast.c
>> ---
>>  drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 18 ++++++++++++++++++
>>  1 file changed, 18 insertions(+)
>>
>> diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
>> index 4990572..180d10e 100644
>> --- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
>> +++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
>> @@ -500,6 +500,24 @@ static void ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast,
>>  		rec.sl		  = priv->broadcast->mcmember.sl;
>>  		rec.flow_label	  = priv->broadcast->mcmember.flow_label;
>>  		rec.hop_limit	  = priv->broadcast->mcmember.hop_limit;
>> +
>> +		/*
>> +		 * Send-only IB Multicast joins do not work at the core
>> +		 * IB layer yet, so we can't use them here.  However,
>> +		 * we are emulating an Ethernet multicast send, which
>> +		 * does not require a multicast subscription and will
>> +		 * still send properly.  The most appropriate thing to
>> +		 * do is to create the group if it doesn't exist as that
>> +		 * most closely emulates the behavior, from a user space
>> +		 * application perspecitive, of Ethernet multicast
>> +		 * operation.  For now, we do a full join, maybe later
>> +		 * when the core IB layers support send only joins we
>> +		 * will use them.
>> +		 */
>> +#if 0
>> +		if (test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags))
>> +			rec.join_state = 4;
>> +#endif
>>  	}
>>  
>>  	multicast = ib_sa_join_multicast(&ipoib_sa_client, priv->ca, priv->port,
> 
> This patch seems to only add code which is commented out ?  I am not
> sure this makes sense to me.
> 
> -apw
> 

It does look a little weird, but the end result is correct. I'm happy
with dropping it.

rtg
-- 
Tim Gardner tim.gardner at canonical.com




More information about the kernel-team mailing list