Merge branch 'mlxsw-various-fixes'
Ido Schimmel says: ==================== mlxsw: Various fixes This patchset contains various fixes for mlxsw. Patch #1 fixes a race condition in a selftest. The race and fix are explained in detail in the changelog. Patch #2 re-adds a link mode that was wrongly removed, resulting in a regression in some setups. Patch #3 fixes a race condition in route installation with nexthop objects. Please consider patches #2 and #3 for stable. ==================== Link: https://lore.kernel.org/r/20210225165721.1322424-1-idosch@idosch.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
82adc457ac
@ -4430,6 +4430,7 @@ MLXSW_ITEM32(reg, ptys, ext_eth_proto_cap, 0x08, 0, 32);
|
||||
#define MLXSW_REG_PTYS_ETH_SPEED_100GBASE_CR4 BIT(20)
|
||||
#define MLXSW_REG_PTYS_ETH_SPEED_100GBASE_SR4 BIT(21)
|
||||
#define MLXSW_REG_PTYS_ETH_SPEED_100GBASE_KR4 BIT(22)
|
||||
#define MLXSW_REG_PTYS_ETH_SPEED_100GBASE_LR4_ER4 BIT(23)
|
||||
#define MLXSW_REG_PTYS_ETH_SPEED_25GBASE_CR BIT(27)
|
||||
#define MLXSW_REG_PTYS_ETH_SPEED_25GBASE_KR BIT(28)
|
||||
#define MLXSW_REG_PTYS_ETH_SPEED_25GBASE_SR BIT(29)
|
||||
|
@ -1169,6 +1169,11 @@ static const struct mlxsw_sp1_port_link_mode mlxsw_sp1_port_link_mode[] = {
|
||||
.mask_ethtool = ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT,
|
||||
.speed = SPEED_100000,
|
||||
},
|
||||
{
|
||||
.mask = MLXSW_REG_PTYS_ETH_SPEED_100GBASE_LR4_ER4,
|
||||
.mask_ethtool = ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT,
|
||||
.speed = SPEED_100000,
|
||||
},
|
||||
};
|
||||
|
||||
#define MLXSW_SP1_PORT_LINK_MODE_LEN ARRAY_SIZE(mlxsw_sp1_port_link_mode)
|
||||
|
@ -5951,6 +5951,10 @@ mlxsw_sp_router_fib4_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
if (mlxsw_sp->router->aborted)
|
||||
return 0;
|
||||
|
||||
if (fen_info->fi->nh &&
|
||||
!mlxsw_sp_nexthop_obj_group_lookup(mlxsw_sp, fen_info->fi->nh->id))
|
||||
return 0;
|
||||
|
||||
fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, fen_info->tb_id,
|
||||
&fen_info->dst, sizeof(fen_info->dst),
|
||||
fen_info->dst_len,
|
||||
@ -6601,6 +6605,9 @@ static int mlxsw_sp_router_fib6_replace(struct mlxsw_sp *mlxsw_sp,
|
||||
if (mlxsw_sp_fib6_rt_should_ignore(rt))
|
||||
return 0;
|
||||
|
||||
if (rt->nh && !mlxsw_sp_nexthop_obj_group_lookup(mlxsw_sp, rt->nh->id))
|
||||
return 0;
|
||||
|
||||
fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, rt->fib6_table->tb6_id,
|
||||
&rt->fib6_dst.addr,
|
||||
sizeof(rt->fib6_dst.addr),
|
||||
|
@ -613,7 +613,8 @@ static const struct mlxsw_sx_port_link_mode mlxsw_sx_port_link_mode[] = {
|
||||
{
|
||||
.mask = MLXSW_REG_PTYS_ETH_SPEED_100GBASE_CR4 |
|
||||
MLXSW_REG_PTYS_ETH_SPEED_100GBASE_SR4 |
|
||||
MLXSW_REG_PTYS_ETH_SPEED_100GBASE_KR4,
|
||||
MLXSW_REG_PTYS_ETH_SPEED_100GBASE_KR4 |
|
||||
MLXSW_REG_PTYS_ETH_SPEED_100GBASE_LR4_ER4,
|
||||
.speed = 100000,
|
||||
},
|
||||
};
|
||||
|
@ -86,11 +86,20 @@ test_ip6gretap()
|
||||
|
||||
test_gretap_stp()
|
||||
{
|
||||
# Sometimes after mirror installation, the neighbor's state is not valid.
|
||||
# The reason is that there is no SW datapath activity related to the
|
||||
# neighbor for the remote GRE address. Therefore whether the corresponding
|
||||
# neighbor will be valid is a matter of luck, and the test is thus racy.
|
||||
# Set the neighbor's state to permanent, so it would be always valid.
|
||||
ip neigh replace 192.0.2.130 lladdr $(mac_get $h3) \
|
||||
nud permanent dev br2
|
||||
full_test_span_gre_stp gt4 $swp3.555 "mirror to gretap"
|
||||
}
|
||||
|
||||
test_ip6gretap_stp()
|
||||
{
|
||||
ip neigh replace 2001:db8:2::2 lladdr $(mac_get $h3) \
|
||||
nud permanent dev br2
|
||||
full_test_span_gre_stp gt6 $swp3.555 "mirror to ip6gretap"
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user