|
@@ -3049,8 +3049,8 @@ static int mlx5e_alloc_drop_cq(struct mlx5_core_dev *mdev,
|
|
|
return mlx5e_alloc_cq_common(mdev, param, cq);
|
|
|
}
|
|
|
|
|
|
-static int mlx5e_open_drop_rq(struct mlx5e_priv *priv,
|
|
|
- struct mlx5e_rq *drop_rq)
|
|
|
+int mlx5e_open_drop_rq(struct mlx5e_priv *priv,
|
|
|
+ struct mlx5e_rq *drop_rq)
|
|
|
{
|
|
|
struct mlx5_core_dev *mdev = priv->mdev;
|
|
|
struct mlx5e_cq_param cq_param = {};
|
|
@@ -3094,7 +3094,7 @@ err_free_cq:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static void mlx5e_close_drop_rq(struct mlx5e_rq *drop_rq)
|
|
|
+void mlx5e_close_drop_rq(struct mlx5e_rq *drop_rq)
|
|
|
{
|
|
|
mlx5e_destroy_rq(drop_rq);
|
|
|
mlx5e_free_rq(drop_rq);
|
|
@@ -4726,7 +4726,7 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev)
|
|
|
mlx5e_tls_build_netdev(priv);
|
|
|
}
|
|
|
|
|
|
-static void mlx5e_create_q_counters(struct mlx5e_priv *priv)
|
|
|
+void mlx5e_create_q_counters(struct mlx5e_priv *priv)
|
|
|
{
|
|
|
struct mlx5_core_dev *mdev = priv->mdev;
|
|
|
int err;
|
|
@@ -4744,7 +4744,7 @@ static void mlx5e_create_q_counters(struct mlx5e_priv *priv)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void mlx5e_destroy_q_counters(struct mlx5e_priv *priv)
|
|
|
+void mlx5e_destroy_q_counters(struct mlx5e_priv *priv)
|
|
|
{
|
|
|
if (priv->q_counter)
|
|
|
mlx5_core_dealloc_q_counter(priv->mdev, priv->q_counter);
|
|
@@ -4783,9 +4783,17 @@ static int mlx5e_init_nic_rx(struct mlx5e_priv *priv)
|
|
|
struct mlx5_core_dev *mdev = priv->mdev;
|
|
|
int err;
|
|
|
|
|
|
+ mlx5e_create_q_counters(priv);
|
|
|
+
|
|
|
+ err = mlx5e_open_drop_rq(priv, &priv->drop_rq);
|
|
|
+ if (err) {
|
|
|
+ mlx5_core_err(mdev, "open drop rq failed, %d\n", err);
|
|
|
+ goto err_destroy_q_counters;
|
|
|
+ }
|
|
|
+
|
|
|
err = mlx5e_create_indirect_rqt(priv);
|
|
|
if (err)
|
|
|
- return err;
|
|
|
+ goto err_close_drop_rq;
|
|
|
|
|
|
err = mlx5e_create_direct_rqts(priv);
|
|
|
if (err)
|
|
@@ -4821,6 +4829,10 @@ err_destroy_direct_rqts:
|
|
|
mlx5e_destroy_direct_rqts(priv);
|
|
|
err_destroy_indirect_rqts:
|
|
|
mlx5e_destroy_rqt(priv, &priv->indir_rqt);
|
|
|
+err_close_drop_rq:
|
|
|
+ mlx5e_close_drop_rq(&priv->drop_rq);
|
|
|
+err_destroy_q_counters:
|
|
|
+ mlx5e_destroy_q_counters(priv);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -4832,6 +4844,8 @@ static void mlx5e_cleanup_nic_rx(struct mlx5e_priv *priv)
|
|
|
mlx5e_destroy_indirect_tirs(priv);
|
|
|
mlx5e_destroy_direct_rqts(priv);
|
|
|
mlx5e_destroy_rqt(priv, &priv->indir_rqt);
|
|
|
+ mlx5e_close_drop_rq(&priv->drop_rq);
|
|
|
+ mlx5e_destroy_q_counters(priv);
|
|
|
}
|
|
|
|
|
|
static int mlx5e_init_nic_tx(struct mlx5e_priv *priv)
|
|
@@ -4975,7 +4989,6 @@ err_cleanup_nic:
|
|
|
|
|
|
int mlx5e_attach_netdev(struct mlx5e_priv *priv)
|
|
|
{
|
|
|
- struct mlx5_core_dev *mdev = priv->mdev;
|
|
|
const struct mlx5e_profile *profile;
|
|
|
int err;
|
|
|
|
|
@@ -4986,28 +4999,16 @@ int mlx5e_attach_netdev(struct mlx5e_priv *priv)
|
|
|
if (err)
|
|
|
goto out;
|
|
|
|
|
|
- mlx5e_create_q_counters(priv);
|
|
|
-
|
|
|
- err = mlx5e_open_drop_rq(priv, &priv->drop_rq);
|
|
|
- if (err) {
|
|
|
- mlx5_core_err(mdev, "open drop rq failed, %d\n", err);
|
|
|
- goto err_destroy_q_counters;
|
|
|
- }
|
|
|
-
|
|
|
err = profile->init_rx(priv);
|
|
|
if (err)
|
|
|
- goto err_close_drop_rq;
|
|
|
+ goto err_cleanup_tx;
|
|
|
|
|
|
if (profile->enable)
|
|
|
profile->enable(priv);
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
-err_close_drop_rq:
|
|
|
- mlx5e_close_drop_rq(&priv->drop_rq);
|
|
|
-
|
|
|
-err_destroy_q_counters:
|
|
|
- mlx5e_destroy_q_counters(priv);
|
|
|
+err_cleanup_tx:
|
|
|
profile->cleanup_tx(priv);
|
|
|
|
|
|
out:
|
|
@@ -5025,8 +5026,6 @@ void mlx5e_detach_netdev(struct mlx5e_priv *priv)
|
|
|
flush_workqueue(priv->wq);
|
|
|
|
|
|
profile->cleanup_rx(priv);
|
|
|
- mlx5e_close_drop_rq(&priv->drop_rq);
|
|
|
- mlx5e_destroy_q_counters(priv);
|
|
|
profile->cleanup_tx(priv);
|
|
|
cancel_delayed_work_sync(&priv->update_stats_work);
|
|
|
}
|