From: Maxim Mikityanskiy Date: Tue, 25 Jan 2022 10:52:49 +0000 (+0200) Subject: net/mlx5e: Use a barrier after updating txq2sq X-Git-Tag: v5.18-rc1~136^2~348^2~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6ce204eac38723d3a24c7bf148221de933bba54d;p=thirdparty%2Fkernel%2Flinux.git net/mlx5e: Use a barrier after updating txq2sq mlx5e_build_txq_maps updates txq2sq while TX queues are stopped. Add a barrier to ensure that these changes are visible before the queues are started and mlx5e_xmit reads from txq2sq. This commit handles regular TX queues. Synchronization between HTB TX queues and mlx5e_xmit is handled in the following commit. Signed-off-by: Maxim Mikityanskiy Reviewed-by: Tariq Toukan Signed-off-by: Saeed Mahameed --- diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c index d84d9cdbdbd41..e64c3cb15ef6d 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -2688,10 +2688,10 @@ static void mlx5e_build_txq_maps(struct mlx5e_priv *priv) } if (!priv->channels.ptp) - return; + goto out; if (!test_bit(MLX5E_PTP_STATE_TX, priv->channels.ptp->state)) - return; + goto out; for (tc = 0; tc < num_tc; tc++) { struct mlx5e_ptp *c = priv->channels.ptp; @@ -2700,6 +2700,13 @@ static void mlx5e_build_txq_maps(struct mlx5e_priv *priv) priv->txq2sq[sq->txq_ix] = sq; priv->port_ptp_tc2realtxq[tc] = priv->num_tc_x_num_ch + tc; } + +out: + /* Make the change to txq2sq visible before the queue is started. + * As mlx5e_xmit runs under a spinlock, there is an implicit ACQUIRE, + * which pairs with this barrier. + */ + smp_wmb(); } static void mlx5e_update_num_tc_x_num_ch(struct mlx5e_priv *priv)