mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 20:48:49 +08:00
Merge branch 'mlxsw-Several-updates'
Ido Schimmel says: ==================== mlxsw: Several updates Patches #1-#3 contain misc updates for the mlxsw driver, one of which is a fix following recent introduction of flow_rule infrastructure. Patch #4 avoids double sourcing of lib.sh in forwarding selftests. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
99e1311475
@ -4771,9 +4771,6 @@ static int mlxsw_sp_port_lag_join(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
err = mlxsw_sp_lag_col_port_add(mlxsw_sp_port, lag_id, port_index);
|
||||
if (err)
|
||||
goto err_col_port_add;
|
||||
err = mlxsw_sp_lag_col_port_enable(mlxsw_sp_port, lag_id);
|
||||
if (err)
|
||||
goto err_col_port_enable;
|
||||
|
||||
mlxsw_core_lag_mapping_set(mlxsw_sp->core, lag_id, port_index,
|
||||
mlxsw_sp_port->local_port);
|
||||
@ -4787,8 +4784,6 @@ static int mlxsw_sp_port_lag_join(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
|
||||
return 0;
|
||||
|
||||
err_col_port_enable:
|
||||
mlxsw_sp_lag_col_port_remove(mlxsw_sp_port, lag_id);
|
||||
err_col_port_add:
|
||||
if (!lag->ref_count)
|
||||
mlxsw_sp_lag_destroy(mlxsw_sp, lag_id);
|
||||
@ -4807,7 +4802,6 @@ static void mlxsw_sp_port_lag_leave(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
lag = mlxsw_sp_lag_get(mlxsw_sp, lag_id);
|
||||
WARN_ON(lag->ref_count == 0);
|
||||
|
||||
mlxsw_sp_lag_col_port_disable(mlxsw_sp_port, lag_id);
|
||||
mlxsw_sp_lag_col_port_remove(mlxsw_sp_port, lag_id);
|
||||
|
||||
/* Any VLANs configured on the port are no longer valid */
|
||||
@ -4852,21 +4846,56 @@ static int mlxsw_sp_lag_dist_port_remove(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sldr), sldr_pl);
|
||||
}
|
||||
|
||||
static int mlxsw_sp_port_lag_tx_en_set(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
bool lag_tx_enabled)
|
||||
static int
|
||||
mlxsw_sp_port_lag_col_dist_enable(struct mlxsw_sp_port *mlxsw_sp_port)
|
||||
{
|
||||
if (lag_tx_enabled)
|
||||
return mlxsw_sp_lag_dist_port_add(mlxsw_sp_port,
|
||||
int err;
|
||||
|
||||
err = mlxsw_sp_lag_col_port_enable(mlxsw_sp_port,
|
||||
mlxsw_sp_port->lag_id);
|
||||
else
|
||||
return mlxsw_sp_lag_dist_port_remove(mlxsw_sp_port,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mlxsw_sp_lag_dist_port_add(mlxsw_sp_port, mlxsw_sp_port->lag_id);
|
||||
if (err)
|
||||
goto err_dist_port_add;
|
||||
|
||||
return 0;
|
||||
|
||||
err_dist_port_add:
|
||||
mlxsw_sp_lag_col_port_disable(mlxsw_sp_port, mlxsw_sp_port->lag_id);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int
|
||||
mlxsw_sp_port_lag_col_dist_disable(struct mlxsw_sp_port *mlxsw_sp_port)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = mlxsw_sp_lag_dist_port_remove(mlxsw_sp_port,
|
||||
mlxsw_sp_port->lag_id);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mlxsw_sp_lag_col_port_disable(mlxsw_sp_port,
|
||||
mlxsw_sp_port->lag_id);
|
||||
if (err)
|
||||
goto err_col_port_disable;
|
||||
|
||||
return 0;
|
||||
|
||||
err_col_port_disable:
|
||||
mlxsw_sp_lag_dist_port_add(mlxsw_sp_port, mlxsw_sp_port->lag_id);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int mlxsw_sp_port_lag_changed(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
struct netdev_lag_lower_state_info *info)
|
||||
{
|
||||
return mlxsw_sp_port_lag_tx_en_set(mlxsw_sp_port, info->tx_enabled);
|
||||
if (info->tx_enabled)
|
||||
return mlxsw_sp_port_lag_col_dist_enable(mlxsw_sp_port);
|
||||
else
|
||||
return mlxsw_sp_port_lag_col_dist_disable(mlxsw_sp_port);
|
||||
}
|
||||
|
||||
static int mlxsw_sp_port_stp_set(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
@ -5089,8 +5118,7 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev,
|
||||
err = mlxsw_sp_port_lag_join(mlxsw_sp_port,
|
||||
upper_dev);
|
||||
} else {
|
||||
mlxsw_sp_port_lag_tx_en_set(mlxsw_sp_port,
|
||||
false);
|
||||
mlxsw_sp_port_lag_col_dist_disable(mlxsw_sp_port);
|
||||
mlxsw_sp_port_lag_leave(mlxsw_sp_port,
|
||||
upper_dev);
|
||||
}
|
||||
|
@ -102,8 +102,7 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
|
||||
return err;
|
||||
}
|
||||
break;
|
||||
case FLOW_ACTION_VLAN_PUSH:
|
||||
case FLOW_ACTION_VLAN_POP: {
|
||||
case FLOW_ACTION_VLAN_MANGLE: {
|
||||
u16 proto = be16_to_cpu(act->vlan.proto);
|
||||
u8 prio = act->vlan.prio;
|
||||
u16 vid = act->vlan.vid;
|
||||
|
@ -6142,7 +6142,7 @@ static int mlxsw_sp_router_rif_disable(struct mlxsw_sp *mlxsw_sp, u16 rif)
|
||||
|
||||
mlxsw_reg_ritr_rif_pack(ritr_pl, rif);
|
||||
err = mlxsw_reg_query(mlxsw_sp->core, MLXSW_REG(ritr), ritr_pl);
|
||||
if (WARN_ON_ONCE(err))
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
mlxsw_reg_ritr_enable_set(ritr_pl, false);
|
||||
|
@ -2,7 +2,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
NUM_NETIFS=6
|
||||
source ../../../../net/forwarding/lib.sh
|
||||
source ../../../../net/forwarding/tc_common.sh
|
||||
source devlink_lib_spectrum.sh
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user