net: marvell: prestera: do not propagate netdev events to prestera_switchdev.c
authorVadym Kochan <vkochan@marvell.com>
Thu, 10 Jun 2021 15:43:10 +0000 (18:43 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 10 Jun 2021 21:20:44 +0000 (14:20 -0700)
Replace prestera_bridge_port_event(...) by
prestera_bridge_port_join(...) and prestera_bridge_port_leave().

It simplifies the code by reading netdev event specific handling only
once in prestera_main.c

Signed-off-by: Vadym Kochan <vkochan@marvell.com>
CC: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/prestera/prestera_main.c
drivers/net/ethernet/marvell/prestera/prestera_switchdev.c
drivers/net/ethernet/marvell/prestera/prestera_switchdev.h

index 767a068..bee477f 100644 (file)
@@ -509,6 +509,7 @@ static int prestera_netdev_port_event(struct net_device *dev,
                                      unsigned long event, void *ptr)
 {
        struct netdev_notifier_changeupper_info *info = ptr;
+       struct prestera_port *port = netdev_priv(dev);
        struct netlink_ext_ack *extack;
        struct net_device *upper;
 
@@ -532,8 +533,12 @@ static int prestera_netdev_port_event(struct net_device *dev,
                break;
 
        case NETDEV_CHANGEUPPER:
-               if (netif_is_bridge_master(upper))
-                       return prestera_bridge_port_event(dev, event, ptr);
+               if (netif_is_bridge_master(upper)) {
+                       if (info->linking)
+                               return prestera_bridge_port_join(upper, port);
+                       else
+                               prestera_bridge_port_leave(upper, port);
+               }
                break;
        }
 
index 8e29cbb..0afbd48 100644 (file)
@@ -422,17 +422,17 @@ err_port_flood_set:
        return err;
 }
 
-static int prestera_port_bridge_join(struct prestera_port *port,
-                                    struct net_device *upper)
+int prestera_bridge_port_join(struct net_device *br_dev,
+                             struct prestera_port *port)
 {
        struct prestera_switchdev *swdev = port->sw->swdev;
        struct prestera_bridge_port *br_port;
        struct prestera_bridge *bridge;
        int err;
 
-       bridge = prestera_bridge_by_dev(swdev, upper);
+       bridge = prestera_bridge_by_dev(swdev, br_dev);
        if (!bridge) {
-               bridge = prestera_bridge_create(swdev, upper);
+               bridge = prestera_bridge_create(swdev, br_dev);
                if (IS_ERR(bridge))
                        return PTR_ERR(bridge);
        }
@@ -505,14 +505,14 @@ static int prestera_port_vid_stp_set(struct prestera_port *port, u16 vid,
        return prestera_hw_vlan_port_stp_set(port, vid, hw_state);
 }
 
-static void prestera_port_bridge_leave(struct prestera_port *port,
-                                      struct net_device *upper)
+void prestera_bridge_port_leave(struct net_device *br_dev,
+                               struct prestera_port *port)
 {
        struct prestera_switchdev *swdev = port->sw->swdev;
        struct prestera_bridge_port *br_port;
        struct prestera_bridge *bridge;
 
-       bridge = prestera_bridge_by_dev(swdev, upper);
+       bridge = prestera_bridge_by_dev(swdev, br_dev);
        if (!bridge)
                return;
 
@@ -533,32 +533,6 @@ static void prestera_port_bridge_leave(struct prestera_port *port,
        prestera_bridge_port_put(br_port);
 }
 
-int prestera_bridge_port_event(struct net_device *dev, unsigned long event,
-                              void *ptr)
-{
-       struct netdev_notifier_changeupper_info *info = ptr;
-       struct prestera_port *port;
-       struct net_device *upper;
-       int err;
-
-       port = netdev_priv(dev);
-       upper = info->upper_dev;
-
-       switch (event) {
-       case NETDEV_CHANGEUPPER:
-               if (info->linking) {
-                       err = prestera_port_bridge_join(port, upper);
-                       if (err)
-                               return err;
-               } else {
-                       prestera_port_bridge_leave(port, upper);
-               }
-               break;
-       }
-
-       return 0;
-}
-
 static int prestera_port_attr_br_flags_set(struct prestera_port *port,
                                           struct net_device *dev,
                                           struct switchdev_brport_flags flags)
index 606e21d..a91bc35 100644 (file)
@@ -7,7 +7,10 @@
 int prestera_switchdev_init(struct prestera_switch *sw);
 void prestera_switchdev_fini(struct prestera_switch *sw);
 
-int prestera_bridge_port_event(struct net_device *dev, unsigned long event,
-                              void *ptr);
+int prestera_bridge_port_join(struct net_device *br_dev,
+                             struct prestera_port *port);
+
+void prestera_bridge_port_leave(struct net_device *br_dev,
+                               struct prestera_port *port);
 
 #endif /* _PRESTERA_SWITCHDEV_H_ */