|
|
@@ -79,9 +79,10 @@ static bool mlx5e_check_fragmented_striding_rq_cap(struct mlx5_core_dev *mdev)
|
|
|
MLX5_CAP_ETH(mdev, reg_umr_sq);
|
|
|
}
|
|
|
|
|
|
-static void mlx5e_set_rq_type_params(struct mlx5e_priv *priv, u8 rq_type)
|
|
|
+void mlx5e_set_rq_type_params(struct mlx5e_priv *priv, u8 rq_type)
|
|
|
{
|
|
|
priv->params.rq_wq_type = rq_type;
|
|
|
+ priv->params.lro_wqe_sz = MLX5E_PARAMS_DEFAULT_LRO_WQE_SZ;
|
|
|
switch (priv->params.rq_wq_type) {
|
|
|
case MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ:
|
|
|
priv->params.log_rq_size = is_kdump_kernel() ?
|
|
|
@@ -98,6 +99,10 @@ static void mlx5e_set_rq_type_params(struct mlx5e_priv *priv, u8 rq_type)
|
|
|
priv->params.log_rq_size = is_kdump_kernel() ?
|
|
|
MLX5E_PARAMS_MINIMUM_LOG_RQ_SIZE :
|
|
|
MLX5E_PARAMS_DEFAULT_LOG_RQ_SIZE;
|
|
|
+
|
|
|
+ /* Extra room needed for build_skb */
|
|
|
+ priv->params.lro_wqe_sz -= MLX5_RX_HEADROOM +
|
|
|
+ SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
|
|
}
|
|
|
priv->params.min_rx_wqes = mlx5_min_rx_wqes(priv->params.rq_wq_type,
|
|
|
BIT(priv->params.log_rq_size));
|
|
|
@@ -3521,6 +3526,9 @@ static void mlx5e_build_nic_netdev_priv(struct mlx5_core_dev *mdev,
|
|
|
cqe_compress_heuristic(link_speed, pci_bw);
|
|
|
}
|
|
|
|
|
|
+ MLX5E_SET_PFLAG(priv, MLX5E_PFLAG_RX_CQE_COMPRESS,
|
|
|
+ priv->params.rx_cqe_compress_def);
|
|
|
+
|
|
|
mlx5e_set_rq_priv_params(priv);
|
|
|
if (priv->params.rq_wq_type == MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ)
|
|
|
priv->params.lro_en = true;
|
|
|
@@ -3547,16 +3555,9 @@ static void mlx5e_build_nic_netdev_priv(struct mlx5_core_dev *mdev,
|
|
|
mlx5e_build_default_indir_rqt(mdev, priv->params.indirection_rqt,
|
|
|
MLX5E_INDIR_RQT_SIZE, profile->max_nch(mdev));
|
|
|
|
|
|
- priv->params.lro_wqe_sz =
|
|
|
- MLX5E_PARAMS_DEFAULT_LRO_WQE_SZ -
|
|
|
- /* Extra room needed for build_skb */
|
|
|
- MLX5_RX_HEADROOM -
|
|
|
- SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
|
|
-
|
|
|
/* Initialize pflags */
|
|
|
MLX5E_SET_PFLAG(priv, MLX5E_PFLAG_RX_CQE_BASED_MODER,
|
|
|
priv->params.rx_cq_period_mode == MLX5_CQ_PERIOD_MODE_START_FROM_CQE);
|
|
|
- MLX5E_SET_PFLAG(priv, MLX5E_PFLAG_RX_CQE_COMPRESS, priv->params.rx_cqe_compress_def);
|
|
|
|
|
|
mutex_init(&priv->state_lock);
|
|
|
|
|
|
@@ -3970,6 +3971,19 @@ static void mlx5e_register_vport_rep(struct mlx5_core_dev *mdev)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void mlx5e_unregister_vport_rep(struct mlx5_core_dev *mdev)
|
|
|
+{
|
|
|
+ struct mlx5_eswitch *esw = mdev->priv.eswitch;
|
|
|
+ int total_vfs = MLX5_TOTAL_VPORTS(mdev);
|
|
|
+ int vport;
|
|
|
+
|
|
|
+ if (!MLX5_CAP_GEN(mdev, vport_group_manager))
|
|
|
+ return;
|
|
|
+
|
|
|
+ for (vport = 1; vport < total_vfs; vport++)
|
|
|
+ mlx5_eswitch_unregister_vport_rep(esw, vport);
|
|
|
+}
|
|
|
+
|
|
|
void mlx5e_detach_netdev(struct mlx5_core_dev *mdev, struct net_device *netdev)
|
|
|
{
|
|
|
struct mlx5e_priv *priv = netdev_priv(netdev);
|
|
|
@@ -4016,6 +4030,7 @@ static int mlx5e_attach(struct mlx5_core_dev *mdev, void *vpriv)
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
+ mlx5e_register_vport_rep(mdev);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
@@ -4027,6 +4042,7 @@ static void mlx5e_detach(struct mlx5_core_dev *mdev, void *vpriv)
|
|
|
if (!netif_device_present(netdev))
|
|
|
return;
|
|
|
|
|
|
+ mlx5e_unregister_vport_rep(mdev);
|
|
|
mlx5e_detach_netdev(mdev, netdev);
|
|
|
mlx5e_destroy_mdev_resources(mdev);
|
|
|
}
|
|
|
@@ -4045,8 +4061,6 @@ static void *mlx5e_add(struct mlx5_core_dev *mdev)
|
|
|
if (err)
|
|
|
return NULL;
|
|
|
|
|
|
- mlx5e_register_vport_rep(mdev);
|
|
|
-
|
|
|
if (MLX5_CAP_GEN(mdev, vport_group_manager))
|
|
|
ppriv = &esw->offloads.vport_reps[0];
|
|
|
|
|
|
@@ -4098,13 +4112,7 @@ void mlx5e_destroy_netdev(struct mlx5_core_dev *mdev, struct mlx5e_priv *priv)
|
|
|
|
|
|
static void mlx5e_remove(struct mlx5_core_dev *mdev, void *vpriv)
|
|
|
{
|
|
|
- struct mlx5_eswitch *esw = mdev->priv.eswitch;
|
|
|
- int total_vfs = MLX5_TOTAL_VPORTS(mdev);
|
|
|
struct mlx5e_priv *priv = vpriv;
|
|
|
- int vport;
|
|
|
-
|
|
|
- for (vport = 1; vport < total_vfs; vport++)
|
|
|
- mlx5_eswitch_unregister_vport_rep(esw, vport);
|
|
|
|
|
|
unregister_netdev(priv->netdev);
|
|
|
mlx5e_detach(mdev, vpriv);
|