Commit 3b88a535 authored by Tariq Toukan's avatar Tariq Toukan Committed by Jakub Kicinski
Browse files

net/mlx5e: Defer channels closure to reduce interface down time



Cap bit tis_tir_td_order=1 indicates that an old firmware requirement /
limitation no longer exists. When unset, the latency of several firmware
commands significantly increases with the presence of high number of
co-existing channels (both old and new sets). Hence, we used to close
unneeded old channels before invoking those firmware commands.

Today, on capable devices, this is no longer the case. Minimize the
interface down time by deferring the old channels closure, after the
activation of the new ones.

Perf numbers:
Measured the number of dropped packets in a simple ping flood test,
during a configuration change operation, that switches the number of
channels from 247 to 248.

Before: 71 packets lost
After:  15 packets lost, ~80% saving.

Signed-off-by: default avatarTariq Toukan <tariqt@nvidia.com>
Reviewed-by: default avatarCarolina Jubran <cjubran@nvidia.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Link: https://patch.msgid.link/1761831159-1013140-8-git-send-email-tariqt@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 911e3a37
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -3383,6 +3383,7 @@ static int mlx5e_switch_priv_channels(struct mlx5e_priv *priv,
		}
	}

	if (!MLX5_CAP_GEN(priv->mdev, tis_tir_td_order))
		mlx5e_close_channels(old_chs);
	priv->profile->update_rx(priv);

@@ -3431,6 +3432,9 @@ int mlx5e_safe_switch_params(struct mlx5e_priv *priv,
	if (err)
		goto err_close;

	if (MLX5_CAP_GEN(priv->mdev, tis_tir_td_order))
		mlx5e_close_channels(old_chs);

	kfree(new_chs);
	kfree(old_chs);
	return 0;