2020-02-25 12:09:43

by Aaro Koskinen

[permalink] [raw]
Subject: [PATCH] net: stmmac: move notifier block to private data

From: Aaro Koskinen <[email protected]>

Move notifier block to private data. Otherwise notifier code will complain
about double register with multiple stmmac instances.

Fixes: 481a7d154cbb ("stmmac: debugfs entry name is not be changed when udev rename device name.")
Signed-off-by: Aaro Koskinen <[email protected]>
---
drivers/net/ethernet/stmicro/stmmac/stmmac.h | 1 +
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 9 +++------
2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
index 9c02fc754bf1..20621b964e6a 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
@@ -222,6 +222,7 @@ struct stmmac_priv {

#ifdef CONFIG_DEBUG_FS
struct dentry *dbgfs_dir;
+ struct notifier_block nb;
#endif

unsigned long state;
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 5836b21edd7e..bf0ce8e4424b 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -4397,10 +4397,6 @@ static int stmmac_device_event(struct notifier_block *unused,
return NOTIFY_DONE;
}

-static struct notifier_block stmmac_notifier = {
- .notifier_call = stmmac_device_event,
-};
-
static void stmmac_init_fs(struct net_device *dev)
{
struct stmmac_priv *priv = netdev_priv(dev);
@@ -4416,14 +4412,15 @@ 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);
+ priv->nb.notifier_call = stmmac_device_event;
+ register_netdevice_notifier(&priv->nb);
}

static void stmmac_exit_fs(struct net_device *dev)
{
struct stmmac_priv *priv = netdev_priv(dev);

- unregister_netdevice_notifier(&stmmac_notifier);
+ unregister_netdevice_notifier(&priv->nb);
debugfs_remove_recursive(priv->dbgfs_dir);
}
#endif /* CONFIG_DEBUG_FS */
--
2.11.0


2020-02-25 19:34:29

by David Miller

[permalink] [raw]
Subject: Re: [PATCH] net: stmmac: move notifier block to private data

From: [email protected]
Date: Tue, 25 Feb 2020 13:16:15 +0200

> From: Aaro Koskinen <[email protected]>
>
> Move notifier block to private data. Otherwise notifier code will complain
> about double register with multiple stmmac instances.
>
> Fixes: 481a7d154cbb ("stmmac: debugfs entry name is not be changed when udev rename device name.")
> Signed-off-by: Aaro Koskinen <[email protected]>

This doesn't make any sense.

We need only one instance of the stmmac notifier registered, no matter how many
stmmac devices are probed.

Please change it such that we only call register_notifier() once (when the first
stmmac device is probed) and only unregister_notifier() when the last one is
removed.