Re: [PATCH for-next 13/16] IB/{hfi1, ipoib, rdma}: Broadcast ping sent packets which exceeded mtu size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Feb 10, 2020 at 3:19 PM Dennis Dalessandro
<dennis.dalessandro@xxxxxxxxx> wrote:
>
> From: Gary Leshner <Gary.S.Leshner@xxxxxxxxx>
>
> When in connected mode ipoib sent broadcast pings which exceeded the mtu
> size for broadcast addresses.

But this broadcast done via the UD QP and not via the connected mode,
please explain

>
> Add an mtu attribute to the rdma_netdev structure which ipoib sets to its
> mcast mtu size.
>
> The RDMA netdev uses this value to determine if the skb length is too long
> for the mtu specified and if it is, drops the packet and logs an error
> about the errant packet.
>
> Reviewed-by: Mike Marciniszyn <mike.marciniszyn@xxxxxxxxx>
> Reviewed-by: Dennis Dalessandro <dennis.alessandro@xxxxxxxxx>
> Signed-off-by: Gary Leshner <Gary.S.Leshner@xxxxxxxxx>
> Signed-off-by: Kaike Wan <kaike.wan@xxxxxxxxx>
> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@xxxxxxxxx>
> ---
>  drivers/infiniband/ulp/ipoib/ipoib_main.c      |    2 ++
>  drivers/infiniband/ulp/ipoib/ipoib_multicast.c |    1 +
>  drivers/infiniband/ulp/ipoib/ipoib_vlan.c      |    3 +++
>  3 files changed, 6 insertions(+)
>
> diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
> index 5c1cf68..ddb896f 100644
> --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
> +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
> @@ -1906,6 +1906,7 @@ static int ipoib_ndo_init(struct net_device *ndev)
>  {
>         struct ipoib_dev_priv *priv = ipoib_priv(ndev);
>         int rc;
> +       struct rdma_netdev *rn = netdev_priv(ndev);
>
>         if (priv->parent) {
>                 ipoib_child_init(ndev);
> @@ -1918,6 +1919,7 @@ static int ipoib_ndo_init(struct net_device *ndev)
>         /* MTU will be reset when mcast join happens */
>         ndev->mtu = IPOIB_UD_MTU(priv->max_ib_mtu);
>         priv->mcast_mtu = priv->admin_mtu = ndev->mtu;
> +       rn->mtu = priv->mcast_mtu;

If this is something specific for your lower driver (opa_vnic etc.)
you don't need to do that here, you can use the rn->clnt_priv member
in order to get the mcast_mtu

>         ndev->max_mtu = IPOIB_CM_MTU;
>
>         ndev->neigh_priv_len = sizeof(struct ipoib_neigh);
> diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
> index 7166ee9b..3d5f6b8 100644
> --- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
> +++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
> @@ -246,6 +246,7 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
>                 if (priv->mcast_mtu == priv->admin_mtu)
>                         priv->admin_mtu = IPOIB_UD_MTU(mtu);
>                 priv->mcast_mtu = IPOIB_UD_MTU(mtu);
> +               rn->mtu = priv->mcast_mtu;
>
>                 priv->qkey = be32_to_cpu(priv->broadcast->mcmember.qkey);
>                 spin_unlock_irq(&priv->lock);
> diff --git a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
> index 8ac8e18..3086560 100644
> --- a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
> +++ b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
> @@ -97,6 +97,7 @@ int __ipoib_vlan_add(struct ipoib_dev_priv *ppriv, struct ipoib_dev_priv *priv,
>  {
>         struct net_device *ndev = priv->dev;
>         int result;
> +       struct rdma_netdev *rn = netdev_priv(ndev);
>
>         ASSERT_RTNL();
>
> @@ -117,6 +118,8 @@ int __ipoib_vlan_add(struct ipoib_dev_priv *ppriv, struct ipoib_dev_priv *priv,
>                 goto out_early;
>         }
>
> +       rn->mtu = priv->mcast_mtu;
> +
>         priv->parent = ppriv->dev;
>         priv->pkey = pkey;
>         priv->child_type = type;
>



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux