net/mlx5e: Add hairpin params structure
In preparation for downstream work to expose hairpin queues parameters, introduce a hairpin parameters struct as part of the tc structure. Signed-off-by: Gal Pressman <gal@nvidia.com> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
0fedee1ae9
commit
1a8034720f
@ -71,6 +71,12 @@
|
||||
#define MLX5E_TC_TABLE_NUM_GROUPS 4
|
||||
#define MLX5E_TC_TABLE_MAX_GROUP_SIZE BIT(18)
|
||||
|
||||
struct mlx5e_hairpin_params {
|
||||
struct mlx5_core_dev *mdev;
|
||||
u32 num_queues;
|
||||
u32 queue_size;
|
||||
};
|
||||
|
||||
struct mlx5e_tc_table {
|
||||
/* Protects the dynamic assignment of the t parameter
|
||||
* which is the nic tc root table.
|
||||
@ -93,6 +99,7 @@ struct mlx5e_tc_table {
|
||||
|
||||
struct mlx5_tc_ct_priv *ct;
|
||||
struct mapping_ctx *mapping;
|
||||
struct mlx5e_hairpin_params hairpin_params;
|
||||
};
|
||||
|
||||
struct mlx5e_tc_attr_to_reg_mapping mlx5e_tc_attr_to_reg_mappings[] = {
|
||||
@ -1016,6 +1023,26 @@ static int mlx5e_hairpin_get_prio(struct mlx5e_priv *priv,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
mlx5e_hairpin_params_init(struct mlx5e_hairpin_params *hairpin_params,
|
||||
struct mlx5_core_dev *mdev)
|
||||
{
|
||||
u64 link_speed64;
|
||||
u32 link_speed;
|
||||
|
||||
hairpin_params->mdev = mdev;
|
||||
/* set hairpin pair per each 50Gbs share of the link */
|
||||
mlx5e_port_max_linkspeed(mdev, &link_speed);
|
||||
link_speed = max_t(u32, link_speed, 50000);
|
||||
link_speed64 = link_speed;
|
||||
do_div(link_speed64, 50000);
|
||||
hairpin_params->num_queues = link_speed64;
|
||||
|
||||
hairpin_params->queue_size =
|
||||
BIT(min_t(u32, 16 - MLX5_MPWRQ_MIN_LOG_STRIDE_SZ(mdev),
|
||||
MLX5_CAP_GEN(mdev, log_max_hairpin_num_packets)));
|
||||
}
|
||||
|
||||
static int mlx5e_hairpin_flow_add(struct mlx5e_priv *priv,
|
||||
struct mlx5e_tc_flow *flow,
|
||||
struct mlx5e_tc_flow_parse_attr *parse_attr,
|
||||
@ -1027,8 +1054,6 @@ static int mlx5e_hairpin_flow_add(struct mlx5e_priv *priv,
|
||||
struct mlx5_core_dev *peer_mdev;
|
||||
struct mlx5e_hairpin_entry *hpe;
|
||||
struct mlx5e_hairpin *hp;
|
||||
u64 link_speed64;
|
||||
u32 link_speed;
|
||||
u8 match_prio;
|
||||
u16 peer_id;
|
||||
int err;
|
||||
@ -1081,21 +1106,16 @@ static int mlx5e_hairpin_flow_add(struct mlx5e_priv *priv,
|
||||
hash_hairpin_info(peer_id, match_prio));
|
||||
mutex_unlock(&tc->hairpin_tbl_lock);
|
||||
|
||||
params.log_data_size = clamp_t(u8, 16,
|
||||
MLX5_CAP_GEN(priv->mdev, log_min_hairpin_wq_data_sz),
|
||||
MLX5_CAP_GEN(priv->mdev, log_max_hairpin_wq_data_sz));
|
||||
params.log_num_packets = params.log_data_size -
|
||||
MLX5_MPWRQ_MIN_LOG_STRIDE_SZ(priv->mdev);
|
||||
params.log_num_packets = min_t(u8, params.log_num_packets,
|
||||
MLX5_CAP_GEN(priv->mdev, log_max_hairpin_num_packets));
|
||||
params.log_num_packets = ilog2(tc->hairpin_params.queue_size);
|
||||
params.log_data_size =
|
||||
clamp_t(u32,
|
||||
params.log_num_packets +
|
||||
MLX5_MPWRQ_MIN_LOG_STRIDE_SZ(priv->mdev),
|
||||
MLX5_CAP_GEN(priv->mdev, log_min_hairpin_wq_data_sz),
|
||||
MLX5_CAP_GEN(priv->mdev, log_max_hairpin_wq_data_sz));
|
||||
|
||||
params.q_counter = priv->q_counter;
|
||||
/* set hairpin pair per each 50Gbs share of the link */
|
||||
mlx5e_port_max_linkspeed(priv->mdev, &link_speed);
|
||||
link_speed = max_t(u32, link_speed, 50000);
|
||||
link_speed64 = link_speed;
|
||||
do_div(link_speed64, 50000);
|
||||
params.num_channels = link_speed64;
|
||||
params.num_channels = tc->hairpin_params.num_queues;
|
||||
|
||||
hp = mlx5e_hairpin_create(priv, ¶ms, peer_ifindex);
|
||||
hpe->hp = hp;
|
||||
@ -5217,6 +5237,8 @@ int mlx5e_tc_nic_init(struct mlx5e_priv *priv)
|
||||
tc->ct = mlx5_tc_ct_init(priv, tc->chains, &tc->mod_hdr,
|
||||
MLX5_FLOW_NAMESPACE_KERNEL, tc->post_act);
|
||||
|
||||
mlx5e_hairpin_params_init(&tc->hairpin_params, dev);
|
||||
|
||||
tc->netdevice_nb.notifier_call = mlx5e_tc_netdev_event;
|
||||
err = register_netdevice_notifier_dev_net(priv->netdev,
|
||||
&tc->netdevice_nb,
|
||||
|
Loading…
x
Reference in New Issue
Block a user