Skip to content

Commit 9be99f2

Browse files
HoratiuVulturdavem330
authored andcommitted
net: lan966x: Extend FDB to support also lag
Offload FDB entries when the original device is a lag interface. Because all the ports under the lag have the same chip id, which is the chip id of first port, then add the entries only for the first port. Signed-off-by: Horatiu Vultur <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent cabc9d4 commit 9be99f2

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

drivers/net/ethernet/microchip/lan966x/lan966x_fdb.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,34 @@ static void lan966x_fdb_bridge_event_work(struct lan966x_fdb_event_work *fdb_wor
199199
}
200200
}
201201

202+
static void lan966x_fdb_lag_event_work(struct lan966x_fdb_event_work *fdb_work)
203+
{
204+
struct switchdev_notifier_fdb_info *fdb_info;
205+
struct lan966x_port *port;
206+
struct lan966x *lan966x;
207+
208+
if (!lan966x_lag_first_port(fdb_work->orig_dev, fdb_work->dev))
209+
return;
210+
211+
lan966x = fdb_work->lan966x;
212+
port = netdev_priv(fdb_work->dev);
213+
fdb_info = &fdb_work->fdb_info;
214+
215+
switch (fdb_work->event) {
216+
case SWITCHDEV_FDB_ADD_TO_DEVICE:
217+
if (!fdb_info->added_by_user)
218+
break;
219+
lan966x_mac_add_entry(lan966x, port, fdb_info->addr,
220+
fdb_info->vid);
221+
break;
222+
case SWITCHDEV_FDB_DEL_TO_DEVICE:
223+
if (!fdb_info->added_by_user)
224+
break;
225+
lan966x_mac_del_entry(lan966x, fdb_info->addr, fdb_info->vid);
226+
break;
227+
}
228+
}
229+
202230
static void lan966x_fdb_event_work(struct work_struct *work)
203231
{
204232
struct lan966x_fdb_event_work *fdb_work =
@@ -208,6 +236,8 @@ static void lan966x_fdb_event_work(struct work_struct *work)
208236
lan966x_fdb_port_event_work(fdb_work);
209237
else if (netif_is_bridge_master(fdb_work->orig_dev))
210238
lan966x_fdb_bridge_event_work(fdb_work);
239+
else if (netif_is_lag_master(fdb_work->orig_dev))
240+
lan966x_fdb_lag_event_work(fdb_work);
211241

212242
kfree(fdb_work->fdb_info.addr);
213243
kfree(fdb_work);

drivers/net/ethernet/microchip/lan966x/lan966x_switchdev.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ int lan966x_port_prechangeupper(struct net_device *dev,
348348
return err;
349349

350350
switchdev_bridge_port_unoffload(brport_dev, port, NULL, NULL);
351+
lan966x_fdb_flush_workqueue(port->lan966x);
351352
}
352353

353354
return err;

0 commit comments

Comments
 (0)