mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 02:36:21 +00:00
net: stmmac: fix notifier registration
commit 474a31e13a4e9749fb3ee55794d69d0f17ee0998 upstream. We cannot register the same netdev notifier multiple times when probing stmmac devices. Register the notifier only once in module init, and also make debugfs creation/deletion safe against simultaneous notifier call. Fixes: 481a7d154cbb ("stmmac: debugfs entry name is not be changed when udev rename device name.") Signed-off-by: Aaro Koskinen <aaro.koskinen@nokia.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Hugo SIMELIERE <hsimeliere.opensource@witekio.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
fdd2e36e8c
commit
95418cd617
@ -4067,6 +4067,8 @@ static void stmmac_init_fs(struct net_device *dev)
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
|
||||
rtnl_lock();
|
||||
|
||||
/* Create per netdev entries */
|
||||
priv->dbgfs_dir = debugfs_create_dir(dev->name, stmmac_fs_dir);
|
||||
|
||||
@ -4078,14 +4080,13 @@ static void stmmac_init_fs(struct net_device *dev)
|
||||
debugfs_create_file("dma_cap", 0444, priv->dbgfs_dir, dev,
|
||||
&stmmac_dma_cap_fops);
|
||||
|
||||
register_netdevice_notifier(&stmmac_notifier);
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
||||
static void stmmac_exit_fs(struct net_device *dev)
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
|
||||
unregister_netdevice_notifier(&stmmac_notifier);
|
||||
debugfs_remove_recursive(priv->dbgfs_dir);
|
||||
}
|
||||
#endif /* CONFIG_DEBUG_FS */
|
||||
@ -4455,14 +4456,14 @@ int stmmac_dvr_remove(struct device *dev)
|
||||
|
||||
netdev_info(priv->dev, "%s: removing driver", __func__);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
stmmac_exit_fs(ndev);
|
||||
#endif
|
||||
stmmac_stop_all_dma(priv);
|
||||
|
||||
stmmac_mac_set(priv, priv->ioaddr, false);
|
||||
netif_carrier_off(ndev);
|
||||
unregister_netdev(ndev);
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
stmmac_exit_fs(ndev);
|
||||
#endif
|
||||
if (priv->plat->stmmac_rst)
|
||||
reset_control_assert(priv->plat->stmmac_rst);
|
||||
clk_disable_unprepare(priv->plat->pclk);
|
||||
@ -4679,6 +4680,7 @@ static int __init stmmac_init(void)
|
||||
/* Create debugfs main directory if it doesn't exist yet */
|
||||
if (!stmmac_fs_dir)
|
||||
stmmac_fs_dir = debugfs_create_dir(STMMAC_RESOURCE_NAME, NULL);
|
||||
register_netdevice_notifier(&stmmac_notifier);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
@ -4687,6 +4689,7 @@ static int __init stmmac_init(void)
|
||||
static void __exit stmmac_exit(void)
|
||||
{
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
unregister_netdevice_notifier(&stmmac_notifier);
|
||||
debugfs_remove_recursive(stmmac_fs_dir);
|
||||
#endif
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user