Re: [PATCH rdma-rc 2/5] IB/ipoib: Limit call to free rdma_netdev for capable devices

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

 



On Tue, Jun 27, 2017 at 12:08:38PM -0700, Vishwanathapura, Niranjana wrote:
> On Tue, Jun 27, 2017 at 11:41:56AM -0600, Jason Gunthorpe wrote:
> > On Tue, Jun 27, 2017 at 10:34:07AM -0700, Vishwanathapura, Niranjana wrote:
> > > >diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
> > > >index 0ddd9709e1df..91fae34bdd4f 100644
> > > >+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
> > > >@@ -2301,7 +2301,10 @@ static void ipoib_remove_one(struct ib_device *device, void *client_data)
> > > >		flush_workqueue(priv->wq);
> > > >
> > > >		unregister_netdev(priv->dev);
> > > >-		free_netdev(priv->dev);
> > > >+		if (device->free_rdma_netdev)
> > > >+			device->free_rdma_netdev(priv->dev);
> > > >+		else
> > > >+			free_netdev(priv->dev);
> > >
> > > This is causing an crash in hfi1 driver.
> > > If the call to alloc_rdma_netdev() has returned -EOPNOTSUPP, we shouldn't be
> > > calling free_rdma_netdev() here (as device driver doesn't own that netdev).
> > > I will send out a patch to hfi1 driver to guard check for the type in its
> > > free_rdma_netdev() call to handle such issues.
> >
> > I think instead you should move free_rdma_netdev from struct ib_device
> > to struct rdma_netdev to prevent this mistake in general.
> >
>
> Thanks, that is another option. With that, we will be freeing the
> rdma_netdev from a function pointer call that belongs to that rdma_netdev.
> Is that ok?  (Though I think it should work fine).

The downside of this that the code will be non-symmetrical, for
alloc_rdma_netdev vs. free_rdma_netdev.

2198         /**
2199          * rdma netdev operations
2200          *
2201          * Driver implementing alloc_rdma_netdev must return -EOPNOTSUPP if it
2202          * doesn't support the specified rdma netdev type.
2203          */
2204         struct net_device *(*alloc_rdma_netdev)(
2205                                         struct ib_device *device,
2206                                         u8 port_num,
2207                                         enum rdma_netdev_t type,
2208                                         const char *name,
2209                                         unsigned char name_assign_type,
2210                                         void (*setup)(struct net_device *));
2211         void (*free_rdma_netdev)(struct net_device *netdev);

>
> Also, I think this needs updating ib_verbs.h, hfi1, ipoib and mlx5 (under
> drivers/net) together. I can make the change, if this is the direction we
> are taking.
>
> Another option is to add a new type RDMA_NETDEV_IPOIB_DEF and use only
> within ipoib driver to differentiate default case.

It is less optimal option, I would prefer to see IPoIB the same for all flows.

Thanks

>
> Thanks,
> Niranjana
>

Attachment: signature.asc
Description: PGP signature


[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