mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 17:30:02 +00:00
IB/ipoib: Update broadcast record values after each successful join request
Update the cached broadcast record in the priv object after every new join of this broadcast domain group. These values are needed for the port configuration (MTU size) and to all the new multicast (non-broadcast) join requests initial parameters. For example, SM starts with 2K MTU for all the fabric, and after that it restarts (or handover to new SM) with new port configuration of 4K MTU. Without using the new values, the driver will keep its old configuration of 2K and will not apply the new configuration of 4K. Signed-off-by: Erez Shitrit <erezsh@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
a44878d100
commit
3fd0605caa
1 changed files with 17 additions and 1 deletions
|
@ -226,7 +226,23 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
|
|||
spin_unlock_irq(&priv->lock);
|
||||
return -EAGAIN;
|
||||
}
|
||||
priv->mcast_mtu = IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu));
|
||||
/*update priv member according to the new mcast*/
|
||||
priv->broadcast->mcmember.qkey = mcmember->qkey;
|
||||
priv->broadcast->mcmember.mtu = mcmember->mtu;
|
||||
priv->broadcast->mcmember.traffic_class = mcmember->traffic_class;
|
||||
priv->broadcast->mcmember.rate = mcmember->rate;
|
||||
priv->broadcast->mcmember.sl = mcmember->sl;
|
||||
priv->broadcast->mcmember.flow_label = mcmember->flow_label;
|
||||
priv->broadcast->mcmember.hop_limit = mcmember->hop_limit;
|
||||
/* assume if the admin and the mcast are the same both can be changed */
|
||||
if (priv->mcast_mtu == priv->admin_mtu)
|
||||
priv->admin_mtu =
|
||||
priv->mcast_mtu =
|
||||
IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu));
|
||||
else
|
||||
priv->mcast_mtu =
|
||||
IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu));
|
||||
|
||||
priv->qkey = be32_to_cpu(priv->broadcast->mcmember.qkey);
|
||||
spin_unlock_irq(&priv->lock);
|
||||
priv->tx_wr.wr.ud.remote_qkey = priv->qkey;
|
||||
|
|
Loading…
Reference in a new issue