|
@@ -1172,7 +1172,8 @@ static int mlxsw_sp_nexthop_mac_update(struct mlxsw_sp *mlxsw_sp, u32 adj_index,
|
|
|
|
|
|
static int
|
|
|
mlxsw_sp_nexthop_group_mac_update(struct mlxsw_sp *mlxsw_sp,
|
|
|
- struct mlxsw_sp_nexthop_group *nh_grp)
|
|
|
+ struct mlxsw_sp_nexthop_group *nh_grp,
|
|
|
+ bool reallocate)
|
|
|
{
|
|
|
u32 adj_index = nh_grp->adj_index; /* base */
|
|
|
struct mlxsw_sp_nexthop *nh;
|
|
@@ -1187,7 +1188,7 @@ mlxsw_sp_nexthop_group_mac_update(struct mlxsw_sp *mlxsw_sp,
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (nh->update) {
|
|
|
+ if (nh->update || reallocate) {
|
|
|
err = mlxsw_sp_nexthop_mac_update(mlxsw_sp,
|
|
|
adj_index, nh);
|
|
|
if (err)
|
|
@@ -1248,7 +1249,8 @@ mlxsw_sp_nexthop_group_refresh(struct mlxsw_sp *mlxsw_sp,
|
|
|
/* Nothing was added or removed, so no need to reallocate. Just
|
|
|
* update MAC on existing adjacency indexes.
|
|
|
*/
|
|
|
- err = mlxsw_sp_nexthop_group_mac_update(mlxsw_sp, nh_grp);
|
|
|
+ err = mlxsw_sp_nexthop_group_mac_update(mlxsw_sp, nh_grp,
|
|
|
+ false);
|
|
|
if (err) {
|
|
|
dev_warn(mlxsw_sp->bus_info->dev, "Failed to update neigh MAC in adjacency table.\n");
|
|
|
goto set_trap;
|
|
@@ -1276,7 +1278,7 @@ mlxsw_sp_nexthop_group_refresh(struct mlxsw_sp *mlxsw_sp,
|
|
|
nh_grp->adj_index_valid = 1;
|
|
|
nh_grp->adj_index = adj_index;
|
|
|
nh_grp->ecmp_size = ecmp_size;
|
|
|
- err = mlxsw_sp_nexthop_group_mac_update(mlxsw_sp, nh_grp);
|
|
|
+ err = mlxsw_sp_nexthop_group_mac_update(mlxsw_sp, nh_grp, true);
|
|
|
if (err) {
|
|
|
dev_warn(mlxsw_sp->bus_info->dev, "Failed to update neigh MAC in adjacency table.\n");
|
|
|
goto set_trap;
|