RDMA/netdev: Fix netlink support in IPoIB
IPoIB netlink support was broken by the below commit since integrating
the rdma_netdev support relies on an allocation flow for netdevs that
was controlled by the ipoib driver while netdev's rtnl_newlink
implementation assumes that the netdev will be allocated by netlink.
Such situation leads to crash in __ipoib_device_add, once trying to
reuse netlink device.
This patch fixes the kernel oops for both mlx4 and mlx5
devices triggered by the following command:
Fixes: cd565b4b51
("IB/IPoIB: Support acceleration options callbacks")
Signed-off-by: Denis Drozdov <denisd@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Feras Daoud <ferasda@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:

committed by
Saeed Mahameed

parent
f6a8a19bb1
commit
5d6b0cb336
@@ -2643,13 +2643,27 @@ struct net_device *rdma_alloc_netdev(struct ib_device *device, u8 port_num,
|
||||
if (!netdev)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
rc = params.initialize_rdma_netdev(device, port_num, netdev,
|
||||
params.param);
|
||||
if (rc) {
|
||||
free_netdev(netdev);
|
||||
return ERR_PTR(rc);
|
||||
}
|
||||
|
||||
return netdev;
|
||||
}
|
||||
EXPORT_SYMBOL(rdma_alloc_netdev);
|
||||
|
||||
int rdma_init_netdev(struct ib_device *device, u8 port_num,
|
||||
enum rdma_netdev_t type, const char *name,
|
||||
unsigned char name_assign_type,
|
||||
void (*setup)(struct net_device *),
|
||||
struct net_device *netdev)
|
||||
{
|
||||
struct rdma_netdev_alloc_params params;
|
||||
int rc;
|
||||
|
||||
if (!device->rdma_netdev_get_params)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
rc = device->rdma_netdev_get_params(device, port_num, type, ¶ms);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
return params.initialize_rdma_netdev(device, port_num,
|
||||
netdev, params.param);
|
||||
}
|
||||
EXPORT_SYMBOL(rdma_init_netdev);
|
||||
|
Reference in New Issue
Block a user