summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2018-05-03 20:46:48 +0300
committerDavid S. Miller <davem@davemloft.net>2018-05-03 20:46:48 +0300
commit62264f99fbea555af5cd4d012bc5bb63e6d8fece (patch)
treee502263bda06c2ca20ae238414773447c015ef93 /drivers
parent0e913f28ba56d29c65a95ac5d46f25c42f876db0 (diff)
parent161d82de1ff8430ef96d90d0da0e3643979791d2 (diff)
downloadlinux-62264f99fbea555af5cd4d012bc5bb63e6d8fece.tar.xz
Merge branch 'bridge-FDB-Notify-about-removal-of-non-user-added-entries'
Petr Machata says: ==================== bridge: FDB: Notify about removal of non-user-added entries Device drivers may generally need to keep in sync with bridge's FDB. In particular, for its offload of tc mirror action where the mirrored-to device is a gretap device, mlxsw needs to listen to a number of events, FDB events among the others. SWITCHDEV_FDB_{ADD,DEL}_TO_DEVICE would be a natural notification in that case. However, for removal of FDB entries added due to device activity (as opposed to explicit addition through "bridge fdb add" or similar), there are no notifications. Thus in patch #1, add the "added_by_user" field to switchdev notifications sent for FDB activity. Adapt drivers to ignore activity on non-user-added entries, to maintain the current behavior. Specifically in case of mlxsw, allow mlxsw_sp_span_respin() call for any and all FDB updates. In patch #2, change the bridge driver to actually emit notifications for these FDB entries. Take care not to send notification for bridge updates that itself originate in SWITCHDEV_FDB_*_TO_BRIDGE events. Changes from v1 to v2: - Instead of introducing a new variant of fdb_delete(), add a new parameter to the existing function. - Name the parameter swdev_notify, not notify. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c4
-rw-r--r--drivers/net/ethernet/rocker/rocker_main.c2
2 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
index 1af99fe5fd32..3973d90cc908 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
@@ -2270,6 +2270,8 @@ static void mlxsw_sp_switchdev_event_work(struct work_struct *work)
switch (switchdev_work->event) {
case SWITCHDEV_FDB_ADD_TO_DEVICE:
fdb_info = &switchdev_work->fdb_info;
+ if (!fdb_info->added_by_user)
+ break;
err = mlxsw_sp_port_fdb_set(mlxsw_sp_port, fdb_info, true);
if (err)
break;
@@ -2279,6 +2281,8 @@ static void mlxsw_sp_switchdev_event_work(struct work_struct *work)
break;
case SWITCHDEV_FDB_DEL_TO_DEVICE:
fdb_info = &switchdev_work->fdb_info;
+ if (!fdb_info->added_by_user)
+ break;
mlxsw_sp_port_fdb_set(mlxsw_sp_port, fdb_info, false);
break;
case SWITCHDEV_FDB_ADD_TO_BRIDGE: /* fall through */
diff --git a/drivers/net/ethernet/rocker/rocker_main.c b/drivers/net/ethernet/rocker/rocker_main.c
index 056cb6093630..152d6948611c 100644
--- a/drivers/net/ethernet/rocker/rocker_main.c
+++ b/drivers/net/ethernet/rocker/rocker_main.c
@@ -2783,6 +2783,8 @@ static int rocker_switchdev_event(struct notifier_block *unused,
switch (event) {
case SWITCHDEV_FDB_ADD_TO_DEVICE: /* fall through */
case SWITCHDEV_FDB_DEL_TO_DEVICE:
+ if (!fdb_info->added_by_user)
+ break;
memcpy(&switchdev_work->fdb_info, ptr,
sizeof(switchdev_work->fdb_info));
switchdev_work->fdb_info.addr = kzalloc(ETH_ALEN, GFP_ATOMIC);