X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;ds=sidebyside;f=target%2Flinux%2Flayerscape%2Fpatches-5.4%2F701-net-0343-staging-dpaa2-ethsw-move-port-notifier-per-ethsw.patch;fp=target%2Flinux%2Flayerscape%2Fpatches-5.4%2F701-net-0343-staging-dpaa2-ethsw-move-port-notifier-per-ethsw.patch;h=5024e9822126e036c5d89453b86772c801ac4c5a;hb=cddd4591404fb4c53dc0b3c0b15b942cdbed4356;hp=0000000000000000000000000000000000000000;hpb=d1d2c0b5579ea4f69a42246c9318539d61ba1999;p=openwrt%2Fstaging%2Fwigyori.git diff --git a/target/linux/layerscape/patches-5.4/701-net-0343-staging-dpaa2-ethsw-move-port-notifier-per-ethsw.patch b/target/linux/layerscape/patches-5.4/701-net-0343-staging-dpaa2-ethsw-move-port-notifier-per-ethsw.patch new file mode 100644 index 0000000000..5024e98221 --- /dev/null +++ b/target/linux/layerscape/patches-5.4/701-net-0343-staging-dpaa2-ethsw-move-port-notifier-per-ethsw.patch @@ -0,0 +1,80 @@ +From daaa4e77f9bc9e67fa3fd973d4455631d59fb898 Mon Sep 17 00:00:00 2001 +From: Ioana Ciornei +Date: Mon, 11 Nov 2019 18:50:55 +0200 +Subject: [PATCH] staging: dpaa2-ethsw: move port notifier per ethsw + +Register a different net_device notifier block per ethsw instance. +When probing multiple dpaa2-ethsw instances, without this the register +will fail. + +Signed-off-by: Ioana Ciornei +Link: https://lore.kernel.org/r/1573491058-24766-2-git-send-email-ioana.ciornei@nxp.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/fsl-dpaa2/ethsw/ethsw.c | 13 ++++++------- + drivers/staging/fsl-dpaa2/ethsw/ethsw.h | 2 ++ + 2 files changed, 8 insertions(+), 7 deletions(-) + +--- a/drivers/staging/fsl-dpaa2/ethsw/ethsw.c ++++ b/drivers/staging/fsl-dpaa2/ethsw/ethsw.c +@@ -1174,10 +1174,6 @@ static int port_netdevice_event(struct n + return notifier_from_errno(err); + } + +-static struct notifier_block port_nb __read_mostly = { +- .notifier_call = port_netdevice_event, +-}; +- + struct ethsw_switchdev_event_work { + struct work_struct work; + struct switchdev_notifier_fdb_info fdb_info; +@@ -1328,9 +1324,11 @@ static struct notifier_block port_switch + + static int ethsw_register_notifier(struct device *dev) + { ++ struct ethsw_core *ethsw = dev_get_drvdata(dev); + int err; + +- err = register_netdevice_notifier(&port_nb); ++ ethsw->port_nb.notifier_call = port_netdevice_event; ++ err = register_netdevice_notifier(ðsw->port_nb); + if (err) { + dev_err(dev, "Failed to register netdev notifier\n"); + return err; +@@ -1353,7 +1351,7 @@ static int ethsw_register_notifier(struc + err_switchdev_blocking_nb: + unregister_switchdev_notifier(&port_switchdev_nb); + err_switchdev_nb: +- unregister_netdevice_notifier(&port_nb); ++ unregister_netdevice_notifier(ðsw->port_nb); + return err; + } + +@@ -1491,6 +1489,7 @@ static int ethsw_port_init(struct ethsw_ + + static void ethsw_unregister_notifier(struct device *dev) + { ++ struct ethsw_core *ethsw = dev_get_drvdata(dev); + struct notifier_block *nb; + int err; + +@@ -1505,7 +1504,7 @@ static void ethsw_unregister_notifier(st + dev_err(dev, + "Failed to unregister switchdev notifier (%d)\n", err); + +- err = unregister_netdevice_notifier(&port_nb); ++ err = unregister_netdevice_notifier(ðsw->port_nb); + if (err) + dev_err(dev, + "Failed to unregister netdev notifier (%d)\n", err); +--- a/drivers/staging/fsl-dpaa2/ethsw/ethsw.h ++++ b/drivers/staging/fsl-dpaa2/ethsw/ethsw.h +@@ -66,6 +66,8 @@ struct ethsw_core { + + u8 vlans[VLAN_VID_MASK + 1]; + bool learning; ++ ++ struct notifier_block port_nb; + }; + + #endif /* __ETHSW_H */