net/mlx5e: Properly set default values when disabling adaptive moderation
Add a call to mlx5e_reset_rx/tx_moderation() when enabling/disabling adaptive moderation, in order to select the proper default values. In order to do so, we separate the logic of selecting the moderation values and setting moderion mode (CQE/EQE based). Fixes:0088cbbc4b
("net/mlx5e: Enable CQE based moderation on TX CQ") Fixes:9908aa2929
("net/mlx5e: CQE based moderation") Signed-off-by: Tal Gilboa <talgi@mellanox.com> Reviewed-by: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
b623603bbb
commit
ebeaf084ad
3 changed files with 37 additions and 14 deletions
|
@ -1068,10 +1068,12 @@ void mlx5e_deactivate_priv_channels(struct mlx5e_priv *priv);
|
||||||
|
|
||||||
void mlx5e_build_default_indir_rqt(u32 *indirection_rqt, int len,
|
void mlx5e_build_default_indir_rqt(u32 *indirection_rqt, int len,
|
||||||
int num_channels);
|
int num_channels);
|
||||||
void mlx5e_set_tx_cq_mode_params(struct mlx5e_params *params,
|
|
||||||
u8 cq_period_mode);
|
void mlx5e_reset_tx_moderation(struct mlx5e_params *params, u8 cq_period_mode);
|
||||||
void mlx5e_set_rx_cq_mode_params(struct mlx5e_params *params,
|
void mlx5e_reset_rx_moderation(struct mlx5e_params *params, u8 cq_period_mode);
|
||||||
u8 cq_period_mode);
|
void mlx5e_set_tx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode);
|
||||||
|
void mlx5e_set_rx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode);
|
||||||
|
|
||||||
void mlx5e_set_rq_type(struct mlx5_core_dev *mdev, struct mlx5e_params *params);
|
void mlx5e_set_rq_type(struct mlx5_core_dev *mdev, struct mlx5e_params *params);
|
||||||
void mlx5e_init_rq_type_params(struct mlx5_core_dev *mdev,
|
void mlx5e_init_rq_type_params(struct mlx5_core_dev *mdev,
|
||||||
struct mlx5e_params *params);
|
struct mlx5e_params *params);
|
||||||
|
|
|
@ -527,8 +527,8 @@ int mlx5e_ethtool_set_coalesce(struct mlx5e_priv *priv,
|
||||||
struct dim_cq_moder *rx_moder, *tx_moder;
|
struct dim_cq_moder *rx_moder, *tx_moder;
|
||||||
struct mlx5_core_dev *mdev = priv->mdev;
|
struct mlx5_core_dev *mdev = priv->mdev;
|
||||||
struct mlx5e_channels new_channels = {};
|
struct mlx5e_channels new_channels = {};
|
||||||
|
bool reset_rx, reset_tx;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
bool reset;
|
|
||||||
|
|
||||||
if (!MLX5_CAP_GEN(mdev, cq_moderation))
|
if (!MLX5_CAP_GEN(mdev, cq_moderation))
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
@ -566,15 +566,28 @@ int mlx5e_ethtool_set_coalesce(struct mlx5e_priv *priv,
|
||||||
}
|
}
|
||||||
/* we are opened */
|
/* we are opened */
|
||||||
|
|
||||||
reset = (!!coal->use_adaptive_rx_coalesce != priv->channels.params.rx_dim_enabled) ||
|
reset_rx = !!coal->use_adaptive_rx_coalesce != priv->channels.params.rx_dim_enabled;
|
||||||
(!!coal->use_adaptive_tx_coalesce != priv->channels.params.tx_dim_enabled);
|
reset_tx = !!coal->use_adaptive_tx_coalesce != priv->channels.params.tx_dim_enabled;
|
||||||
|
|
||||||
if (!reset) {
|
if (!reset_rx && !reset_tx) {
|
||||||
mlx5e_set_priv_channels_coalesce(priv, coal);
|
mlx5e_set_priv_channels_coalesce(priv, coal);
|
||||||
priv->channels.params = new_channels.params;
|
priv->channels.params = new_channels.params;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (reset_rx) {
|
||||||
|
u8 mode = MLX5E_GET_PFLAG(&new_channels.params,
|
||||||
|
MLX5E_PFLAG_RX_CQE_BASED_MODER);
|
||||||
|
|
||||||
|
mlx5e_reset_rx_moderation(&new_channels.params, mode);
|
||||||
|
}
|
||||||
|
if (reset_tx) {
|
||||||
|
u8 mode = MLX5E_GET_PFLAG(&new_channels.params,
|
||||||
|
MLX5E_PFLAG_TX_CQE_BASED_MODER);
|
||||||
|
|
||||||
|
mlx5e_reset_tx_moderation(&new_channels.params, mode);
|
||||||
|
}
|
||||||
|
|
||||||
err = mlx5e_safe_switch_channels(priv, &new_channels, NULL, NULL);
|
err = mlx5e_safe_switch_channels(priv, &new_channels, NULL, NULL);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
|
@ -4716,7 +4716,7 @@ static u8 mlx5_to_net_dim_cq_period_mode(u8 cq_period_mode)
|
||||||
DIM_CQ_PERIOD_MODE_START_FROM_EQE;
|
DIM_CQ_PERIOD_MODE_START_FROM_EQE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mlx5e_set_tx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode)
|
void mlx5e_reset_tx_moderation(struct mlx5e_params *params, u8 cq_period_mode)
|
||||||
{
|
{
|
||||||
if (params->tx_dim_enabled) {
|
if (params->tx_dim_enabled) {
|
||||||
u8 dim_period_mode = mlx5_to_net_dim_cq_period_mode(cq_period_mode);
|
u8 dim_period_mode = mlx5_to_net_dim_cq_period_mode(cq_period_mode);
|
||||||
|
@ -4725,13 +4725,9 @@ void mlx5e_set_tx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode)
|
||||||
} else {
|
} else {
|
||||||
params->tx_cq_moderation = mlx5e_get_def_tx_moderation(cq_period_mode);
|
params->tx_cq_moderation = mlx5e_get_def_tx_moderation(cq_period_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
MLX5E_SET_PFLAG(params, MLX5E_PFLAG_TX_CQE_BASED_MODER,
|
|
||||||
params->tx_cq_moderation.cq_period_mode ==
|
|
||||||
MLX5_CQ_PERIOD_MODE_START_FROM_CQE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mlx5e_set_rx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode)
|
void mlx5e_reset_rx_moderation(struct mlx5e_params *params, u8 cq_period_mode)
|
||||||
{
|
{
|
||||||
if (params->rx_dim_enabled) {
|
if (params->rx_dim_enabled) {
|
||||||
u8 dim_period_mode = mlx5_to_net_dim_cq_period_mode(cq_period_mode);
|
u8 dim_period_mode = mlx5_to_net_dim_cq_period_mode(cq_period_mode);
|
||||||
|
@ -4740,7 +4736,19 @@ void mlx5e_set_rx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode)
|
||||||
} else {
|
} else {
|
||||||
params->rx_cq_moderation = mlx5e_get_def_rx_moderation(cq_period_mode);
|
params->rx_cq_moderation = mlx5e_get_def_rx_moderation(cq_period_mode);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mlx5e_set_tx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode)
|
||||||
|
{
|
||||||
|
mlx5e_reset_tx_moderation(params, cq_period_mode);
|
||||||
|
MLX5E_SET_PFLAG(params, MLX5E_PFLAG_TX_CQE_BASED_MODER,
|
||||||
|
params->tx_cq_moderation.cq_period_mode ==
|
||||||
|
MLX5_CQ_PERIOD_MODE_START_FROM_CQE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mlx5e_set_rx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode)
|
||||||
|
{
|
||||||
|
mlx5e_reset_rx_moderation(params, cq_period_mode);
|
||||||
MLX5E_SET_PFLAG(params, MLX5E_PFLAG_RX_CQE_BASED_MODER,
|
MLX5E_SET_PFLAG(params, MLX5E_PFLAG_RX_CQE_BASED_MODER,
|
||||||
params->rx_cq_moderation.cq_period_mode ==
|
params->rx_cq_moderation.cq_period_mode ==
|
||||||
MLX5_CQ_PERIOD_MODE_START_FROM_CQE);
|
MLX5_CQ_PERIOD_MODE_START_FROM_CQE);
|
||||||
|
|
Loading…
Add table
Reference in a new issue