OSDN Git Service

net: ethernet: adi: adin1110: Add check in netdev_event
authorAlexandru Tachici <alexandru.tachici@analog.com>
Mon, 3 Oct 2022 11:16:36 +0000 (14:16 +0300)
committerJakub Kicinski <kuba@kernel.org>
Thu, 6 Oct 2022 03:32:52 +0000 (20:32 -0700)
Check whether this driver actually is the intended recipient of
upper change event.

Fixes: bc93e19d088b ("net: ethernet: adi: Add ADIN1110 support")
Signed-off-by: Alexandru Tachici <alexandru.tachici@analog.com>
Link: https://lore.kernel.org/r/20221003111636.54973-1-alexandru.tachici@analog.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/adi/adin1110.c

index aaee7c4..1744d62 100644 (file)
@@ -1169,6 +1169,11 @@ static int adin1110_port_bridge_leave(struct adin1110_port_priv *port_priv,
        return ret;
 }
 
+static bool adin1110_port_dev_check(const struct net_device *dev)
+{
+       return dev->netdev_ops == &adin1110_netdev_ops;
+}
+
 static int adin1110_netdevice_event(struct notifier_block *unused,
                                    unsigned long event, void *ptr)
 {
@@ -1177,6 +1182,9 @@ static int adin1110_netdevice_event(struct notifier_block *unused,
        struct netdev_notifier_changeupper_info *info = ptr;
        int ret = 0;
 
+       if (!adin1110_port_dev_check(dev))
+               return NOTIFY_DONE;
+
        switch (event) {
        case NETDEV_CHANGEUPPER:
                if (netif_is_bridge_master(info->upper_dev)) {
@@ -1202,11 +1210,6 @@ static void adin1110_disconnect_phy(void *data)
        phy_disconnect(data);
 }
 
-static bool adin1110_port_dev_check(const struct net_device *dev)
-{
-       return dev->netdev_ops == &adin1110_netdev_ops;
-}
-
 static int adin1110_port_set_forwarding_state(struct adin1110_port_priv *port_priv)
 {
        struct adin1110_priv *priv = port_priv->priv;