RDMA/netdev: Hoist alloc_netdev_mqs out of the driver
netdev has several interfaces that expect to call alloc_netdev_mqs from
the core code, with the driver only providing the arguments. This is
incompatible with the rdma_netdev interface that returns the netdev
directly.
Thus re-organize the API used by ipoib so that the verbs core code calls
alloc_netdev_mqs for the driver. This is done by allowing the drivers to
provide the allocation parameters via a 'get_params' callback and then
initializing an allocated netdev as a second step.
Fixes: cd565b4b51
("IB/IPoIB: Support acceleration options callbacks")
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Denis Drozdov <denisd@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Esse commit está contido em:
@@ -2146,20 +2146,15 @@ static struct net_device *ipoib_get_netdev(struct ib_device *hca, u8 port,
|
||||
{
|
||||
struct net_device *dev;
|
||||
|
||||
if (hca->alloc_rdma_netdev) {
|
||||
dev = hca->alloc_rdma_netdev(hca, port,
|
||||
RDMA_NETDEV_IPOIB, name,
|
||||
NET_NAME_UNKNOWN,
|
||||
ipoib_setup_common);
|
||||
if (IS_ERR_OR_NULL(dev) && PTR_ERR(dev) != -EOPNOTSUPP)
|
||||
return NULL;
|
||||
}
|
||||
dev = rdma_alloc_netdev(hca, port, RDMA_NETDEV_IPOIB, name,
|
||||
NET_NAME_UNKNOWN, ipoib_setup_common);
|
||||
if (!IS_ERR(dev))
|
||||
return dev;
|
||||
if (PTR_ERR(dev) != -EOPNOTSUPP)
|
||||
return NULL;
|
||||
|
||||
if (!hca->alloc_rdma_netdev || PTR_ERR(dev) == -EOPNOTSUPP)
|
||||
dev = ipoib_create_netdev_default(hca, name, NET_NAME_UNKNOWN,
|
||||
ipoib_setup_common);
|
||||
|
||||
return dev;
|
||||
return ipoib_create_netdev_default(hca, name, NET_NAME_UNKNOWN,
|
||||
ipoib_setup_common);
|
||||
}
|
||||
|
||||
struct ipoib_dev_priv *ipoib_intf_alloc(struct ib_device *hca, u8 port,
|
||||
|
Referência em uma nova issue
Block a user