diff options
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c index 0d8444aaba01..db715da7bab7 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | |||
@@ -127,6 +127,24 @@ bool mlxsw_sp_bridge_device_is_offloaded(const struct mlxsw_sp *mlxsw_sp, | |||
127 | return !!mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); | 127 | return !!mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); |
128 | } | 128 | } |
129 | 129 | ||
130 | static int mlxsw_sp_bridge_device_upper_rif_destroy(struct net_device *dev, | ||
131 | void *data) | ||
132 | { | ||
133 | struct mlxsw_sp *mlxsw_sp = data; | ||
134 | |||
135 | mlxsw_sp_rif_destroy_by_dev(mlxsw_sp, dev); | ||
136 | return 0; | ||
137 | } | ||
138 | |||
139 | static void mlxsw_sp_bridge_device_rifs_destroy(struct mlxsw_sp *mlxsw_sp, | ||
140 | struct net_device *dev) | ||
141 | { | ||
142 | mlxsw_sp_rif_destroy_by_dev(mlxsw_sp, dev); | ||
143 | netdev_walk_all_upper_dev_rcu(dev, | ||
144 | mlxsw_sp_bridge_device_upper_rif_destroy, | ||
145 | mlxsw_sp); | ||
146 | } | ||
147 | |||
130 | static struct mlxsw_sp_bridge_device * | 148 | static struct mlxsw_sp_bridge_device * |
131 | mlxsw_sp_bridge_device_create(struct mlxsw_sp_bridge *bridge, | 149 | mlxsw_sp_bridge_device_create(struct mlxsw_sp_bridge *bridge, |
132 | struct net_device *br_dev) | 150 | struct net_device *br_dev) |
@@ -165,6 +183,8 @@ static void | |||
165 | mlxsw_sp_bridge_device_destroy(struct mlxsw_sp_bridge *bridge, | 183 | mlxsw_sp_bridge_device_destroy(struct mlxsw_sp_bridge *bridge, |
166 | struct mlxsw_sp_bridge_device *bridge_device) | 184 | struct mlxsw_sp_bridge_device *bridge_device) |
167 | { | 185 | { |
186 | mlxsw_sp_bridge_device_rifs_destroy(bridge->mlxsw_sp, | ||
187 | bridge_device->dev); | ||
168 | list_del(&bridge_device->list); | 188 | list_del(&bridge_device->list); |
169 | if (bridge_device->vlan_enabled) | 189 | if (bridge_device->vlan_enabled) |
170 | bridge->vlan_enabled_exists = false; | 190 | bridge->vlan_enabled_exists = false; |