]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
staging: fsl-dpaa2/ethsw: notify switchdev of offloaded entry
authorIoana Ciornei <ioana.ciornei@nxp.com>
Mon, 29 Jul 2019 16:11:49 +0000 (19:11 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 30 Jul 2019 16:46:53 +0000 (18:46 +0200)
Notify switchdev in case the FDB entry was successfully offloaded.
This will help users to make the distinction between entries known to
the HW switch and those that are held only on the software bridge.

Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Link: https://lore.kernel.org/r/1564416712-16946-3-git-send-email-ioana.ciornei@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/fsl-dpaa2/ethsw/ethsw.c

index 341c36b3a76d398b391149bd1652837db6f2a046..d6953ac427b1b9cf5b99d221bce8bab9c7f74ec4 100644 (file)
@@ -1039,6 +1039,7 @@ static void ethsw_switchdev_event_work(struct work_struct *work)
                container_of(work, struct ethsw_switchdev_event_work, work);
        struct net_device *dev = switchdev_work->dev;
        struct switchdev_notifier_fdb_info *fdb_info;
+       int err;
 
        rtnl_lock();
        fdb_info = &switchdev_work->fdb_info;
@@ -1046,9 +1047,16 @@ static void ethsw_switchdev_event_work(struct work_struct *work)
        switch (switchdev_work->event) {
        case SWITCHDEV_FDB_ADD_TO_DEVICE:
                if (is_unicast_ether_addr(fdb_info->addr))
-                       ethsw_port_fdb_add_uc(netdev_priv(dev), fdb_info->addr);
+                       err = ethsw_port_fdb_add_uc(netdev_priv(dev),
+                                                   fdb_info->addr);
                else
-                       ethsw_port_fdb_add_mc(netdev_priv(dev), fdb_info->addr);
+                       err = ethsw_port_fdb_add_mc(netdev_priv(dev),
+                                                   fdb_info->addr);
+               if (err)
+                       break;
+               fdb_info->offloaded = true;
+               call_switchdev_notifiers(SWITCHDEV_FDB_OFFLOADED, dev,
+                                        &fdb_info->info, NULL);
                break;
        case SWITCHDEV_FDB_DEL_TO_DEVICE:
                if (is_unicast_ether_addr(fdb_info->addr))