]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
net/mlx5e: Isolate open_channels from priv->params
[karo-tx-linux.git] / drivers / net / ethernet / mellanox / mlx5 / core / en_rep.c
index 0515b7f7d11f4d8607fad5f00e150102463017ce..d277c1979b2a07cc6f514736f9cfc0cac870d28d 100644 (file)
@@ -110,7 +110,7 @@ static void mlx5e_rep_update_sw_counters(struct mlx5e_priv *priv)
                s->rx_packets   += rq_stats->packets;
                s->rx_bytes     += rq_stats->bytes;
 
-               for (j = 0; j < priv->params.num_tc; j++) {
+               for (j = 0; j < priv->channels.params.num_tc; j++) {
                        sq_stats = &c->sq[j].stats;
 
                        s->tx_packets           += sq_stats->packets;
@@ -192,7 +192,7 @@ int mlx5e_add_sqs_fwd_rules(struct mlx5e_priv *priv)
        int n, tc, err, num_sqs = 0;
        u16 *sqs;
 
-       sqs = kcalloc(priv->channels.num * priv->params.num_tc, sizeof(u16), GFP_KERNEL);
+       sqs = kcalloc(priv->channels.num * priv->channels.params.num_tc, sizeof(u16), GFP_KERNEL);
        if (!sqs)
                return -ENOMEM;
 
@@ -399,42 +399,23 @@ static const struct net_device_ops mlx5e_netdev_ops_rep = {
        .ndo_get_offload_stats   = mlx5e_get_offload_stats,
 };
 
-static void mlx5e_build_rep_netdev_priv(struct mlx5_core_dev *mdev,
-                                       struct net_device *netdev,
-                                       const struct mlx5e_profile *profile,
-                                       void *ppriv)
+static void mlx5e_build_rep_params(struct mlx5_core_dev *mdev,
+                                  struct mlx5e_params *params)
 {
-       struct mlx5e_priv *priv = netdev_priv(netdev);
        u8 cq_period_mode = MLX5_CAP_GEN(mdev, cq_period_start_from_cqe) ?
                                         MLX5_CQ_PERIOD_MODE_START_FROM_CQE :
                                         MLX5_CQ_PERIOD_MODE_START_FROM_EQE;
 
-       priv->params.log_sq_size           =
-               MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE;
-       priv->params.rq_wq_type = MLX5_WQ_TYPE_LINKED_LIST;
-       priv->params.log_rq_size = MLX5E_PARAMS_MINIMUM_LOG_RQ_SIZE;
-
-       priv->params.min_rx_wqes = mlx5_min_rx_wqes(priv->params.rq_wq_type,
-                                           BIT(priv->params.log_rq_size));
-
-       priv->params.rx_am_enabled = MLX5_CAP_GEN(mdev, cq_moderation);
-       mlx5e_set_rx_cq_mode_params(&priv->params, cq_period_mode);
-
-       priv->params.tx_max_inline         = mlx5e_get_max_inline_cap(mdev);
-       priv->params.num_tc                = 1;
-
-       priv->params.lro_wqe_sz            =
-               MLX5E_PARAMS_DEFAULT_LRO_WQE_SZ;
-
-       priv->mdev                         = mdev;
-       priv->netdev                       = netdev;
-       priv->params.num_channels          = profile->max_nch(mdev);
-       priv->profile                      = profile;
-       priv->ppriv                        = ppriv;
+       params->log_sq_size = MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE;
+       params->rq_wq_type  = MLX5_WQ_TYPE_LINKED_LIST;
+       params->log_rq_size = MLX5E_PARAMS_MINIMUM_LOG_RQ_SIZE;
 
-       mutex_init(&priv->state_lock);
+       params->rx_am_enabled = MLX5_CAP_GEN(mdev, cq_moderation);
+       mlx5e_set_rx_cq_mode_params(params, cq_period_mode);
 
-       INIT_DELAYED_WORK(&priv->update_stats_work, mlx5e_update_stats_work);
+       params->tx_max_inline         = mlx5e_get_max_inline_cap(mdev);
+       params->num_tc                = 1;
+       params->lro_wqe_sz            = MLX5E_PARAMS_DEFAULT_LRO_WQE_SZ;
 }
 
 static void mlx5e_build_rep_netdev(struct net_device *netdev)
@@ -460,7 +441,19 @@ static void mlx5e_init_rep(struct mlx5_core_dev *mdev,
                           const struct mlx5e_profile *profile,
                           void *ppriv)
 {
-       mlx5e_build_rep_netdev_priv(mdev, netdev, profile, ppriv);
+       struct mlx5e_priv *priv = netdev_priv(netdev);
+
+       priv->mdev                         = mdev;
+       priv->netdev                       = netdev;
+       priv->profile                      = profile;
+       priv->ppriv                        = ppriv;
+
+       mutex_init(&priv->state_lock);
+
+       INIT_DELAYED_WORK(&priv->update_stats_work, mlx5e_update_stats_work);
+
+       priv->channels.params.num_channels = profile->max_nch(mdev);
+       mlx5e_build_rep_params(mdev, &priv->channels.params);
        mlx5e_build_rep_netdev(netdev);
 }
 
@@ -505,7 +498,7 @@ err_del_flow_rule:
 err_destroy_direct_tirs:
        mlx5e_destroy_direct_tirs(priv);
 err_destroy_direct_rqts:
-       for (i = 0; i < priv->params.num_channels; i++)
+       for (i = 0; i < priv->channels.params.num_channels; i++)
                mlx5e_destroy_rqt(priv, &priv->direct_tir[i].rqt);
        return err;
 }
@@ -518,7 +511,7 @@ static void mlx5e_cleanup_rep_rx(struct mlx5e_priv *priv)
        mlx5e_tc_cleanup(priv);
        mlx5_del_flow_rules(rep->vport_rx_rule);
        mlx5e_destroy_direct_tirs(priv);
-       for (i = 0; i < priv->params.num_channels; i++)
+       for (i = 0; i < priv->channels.params.num_channels; i++)
                mlx5e_destroy_rqt(priv, &priv->direct_tir[i].rqt);
 }