From: Jianbo Liu <jian...@mellanox.com>

If bond tx type is not active-backup or hash, LAG offload can't be
enabled. When CHANGEUPPER event is received, and both PFs (and only
them) under the same lag master are about to be enslaved, a warning
is returned for user to know the offload failure, otherwise PFs are
enslaved silently without LAG offload activated.

Signed-off-by: Jianbo Liu <jian...@mellanox.com>
Reviewed-by: Raed Salem <ra...@mellanox.com>
Reviewed-by: Roi Dayan <r...@mellanox.com>
Reviewed-by: Jiri Pirko <j...@nvidia.com>
Reviewed-by: Raed Salem <ra...@nvidia.com>
Reviewed-by: Roi Dayan <r...@nvidia.com>
Signed-off-by: Saeed Mahameed <sae...@nvidia.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/lag.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag.c 
b/drivers/net/ethernet/mellanox/mlx5/core/lag.c
index 8b6e2aae2783..191d3d5be46d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lag.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lag.c
@@ -355,7 +355,7 @@ static int mlx5_handle_changeupper_event(struct mlx5_lag 
*ldev,
 {
        struct net_device *upper = info->upper_dev, *ndev_tmp;
        struct netdev_lag_upper_info *lag_upper_info = NULL;
-       bool is_bonded;
+       bool is_bonded, is_in_lag, mode_supported;
        int bond_status = 0;
        int num_slaves = 0;
        int idx;
@@ -391,13 +391,18 @@ static int mlx5_handle_changeupper_event(struct mlx5_lag 
*ldev,
        /* Determine bonding status:
         * A device is considered bonded if both its physical ports are slaves
         * of the same lag master, and only them.
-        * Lag mode must be activebackup or hash.
         */
-       is_bonded = (num_slaves == MLX5_MAX_PORTS) &&
-                   (bond_status == 0x3) &&
-                   ((tracker->tx_type == NETDEV_LAG_TX_TYPE_ACTIVEBACKUP) ||
-                    (tracker->tx_type == NETDEV_LAG_TX_TYPE_HASH));
+       is_in_lag = num_slaves == MLX5_MAX_PORTS && bond_status == 0x3;
 
+       /* Lag mode must be activebackup or hash. */
+       mode_supported = tracker->tx_type == NETDEV_LAG_TX_TYPE_ACTIVEBACKUP ||
+                        tracker->tx_type == NETDEV_LAG_TX_TYPE_HASH;
+
+       if (is_in_lag && !mode_supported)
+               NL_SET_ERR_MSG_MOD(info->info.extack,
+                                  "Can't activate LAG offload, TX type isn't 
supported");
+
+       is_bonded = is_in_lag && mode_supported;
        if (tracker->is_bonded != is_bonded) {
                tracker->is_bonded = is_bonded;
                return 1;
-- 
2.26.2

Reply via email to