Patch "net/mlx5: E-Switch, rebuild lag only when needed" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net/mlx5: E-Switch, rebuild lag only when needed

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-mlx5-e-switch-rebuild-lag-only-when-needed.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 3d28261670ae5cc99741372a8b177ce6cc35481f
Author: Mark Bloch <mbloch@xxxxxxxxxx>
Date:   Wed Nov 10 15:19:12 2021 +0000

    net/mlx5: E-Switch, rebuild lag only when needed
    
    [ Upstream commit 2eb0cb31bc4ce2ede5460cf3ef433b40cf5f040d ]
    
    A user can enable VFs without changing E-Switch mode, this can happen
    when a user moves straight to switchdev mode and only once in switchdev
    VFs are enabled via the sysfs interface.
    
    The cited commit assumed this isn't possible and exposed a single
    API function where the E-switch calls into the lag code, breaks the lag
    and prevents any other lag operations to take place until the
    E-switch update has ended.
    
    Breaking the hardware lag when it isn't needed can make it such that
    hardware lag can't be enabled again.
    
    In the sysfs call path check if the current E-Switch mode is NONE,
    in the context of the function it can only mean the E-Switch is moving
    out of NONE mode and the hardware lag should be disabled and enabled
    once the mode change has ended. If the mode isn't NONE it means
    VFs are about to be enabled and such operation doesn't require
    toggling the hardware lag.
    
    Fixes: cac1eb2cf2e3 ("net/mlx5: Lag, properly lock eswitch if needed")
    Signed-off-by: Mark Bloch <mbloch@xxxxxxxxxx>
    Signed-off-by: Saeed Mahameed <saeedm@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
index 5872cc8bf9532..51a8cecc4a7ce 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
@@ -1305,12 +1305,17 @@ int mlx5_eswitch_enable_locked(struct mlx5_eswitch *esw, int mode, int num_vfs)
  */
 int mlx5_eswitch_enable(struct mlx5_eswitch *esw, int num_vfs)
 {
+	bool toggle_lag;
 	int ret;
 
 	if (!mlx5_esw_allowed(esw))
 		return 0;
 
-	mlx5_lag_disable_change(esw->dev);
+	toggle_lag = esw->mode == MLX5_ESWITCH_NONE;
+
+	if (toggle_lag)
+		mlx5_lag_disable_change(esw->dev);
+
 	down_write(&esw->mode_lock);
 	if (esw->mode == MLX5_ESWITCH_NONE) {
 		ret = mlx5_eswitch_enable_locked(esw, MLX5_ESWITCH_LEGACY, num_vfs);
@@ -1324,7 +1329,10 @@ int mlx5_eswitch_enable(struct mlx5_eswitch *esw, int num_vfs)
 			esw->esw_funcs.num_vfs = num_vfs;
 	}
 	up_write(&esw->mode_lock);
-	mlx5_lag_enable_change(esw->dev);
+
+	if (toggle_lag)
+		mlx5_lag_enable_change(esw->dev);
+
 	return ret;
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux