|
|
@@ -662,7 +662,9 @@ struct net_device *mlx5_rdma_netdev_alloc(struct mlx5_core_dev *mdev,
|
|
|
|
|
|
profile->init(mdev, netdev, profile, ipriv);
|
|
|
|
|
|
- mlx5e_attach_netdev(epriv);
|
|
|
+ err = mlx5e_attach_netdev(epriv);
|
|
|
+ if (err)
|
|
|
+ goto detach;
|
|
|
netif_carrier_off(netdev);
|
|
|
|
|
|
/* set rdma_netdev func pointers */
|
|
|
@@ -678,6 +680,11 @@ struct net_device *mlx5_rdma_netdev_alloc(struct mlx5_core_dev *mdev,
|
|
|
|
|
|
return netdev;
|
|
|
|
|
|
+detach:
|
|
|
+ profile->cleanup(epriv);
|
|
|
+ if (ipriv->sub_interface)
|
|
|
+ return NULL;
|
|
|
+ mlx5e_destroy_mdev_resources(mdev);
|
|
|
destroy_ht:
|
|
|
mlx5i_pkey_qpn_ht_cleanup(netdev);
|
|
|
destroy_wq:
|