提交 88e4f0ca 编写于 作者: V Vivien Didelot 提交者: David S. Miller

net: dsa: move netdevice notifier registration

Move the netdevice notifier block register code in slave.c and provide
helpers for dsa.c to register and unregister it.

At the same time, check for errors since (un)register_netdevice_notifier
may fail.
Signed-off-by: NVivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 321fa4ff
...@@ -903,10 +903,6 @@ static struct packet_type dsa_pack_type __read_mostly = { ...@@ -903,10 +903,6 @@ static struct packet_type dsa_pack_type __read_mostly = {
.func = dsa_switch_rcv, .func = dsa_switch_rcv,
}; };
static struct notifier_block dsa_netdevice_nb __read_mostly = {
.notifier_call = dsa_slave_netdevice_event,
};
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
static int dsa_suspend(struct device *d) static int dsa_suspend(struct device *d)
{ {
...@@ -964,7 +960,9 @@ static int __init dsa_init_module(void) ...@@ -964,7 +960,9 @@ static int __init dsa_init_module(void)
{ {
int rc; int rc;
register_netdevice_notifier(&dsa_netdevice_nb); rc = dsa_slave_register_notifier();
if (rc)
return rc;
rc = platform_driver_register(&dsa_driver); rc = platform_driver_register(&dsa_driver);
if (rc) if (rc)
...@@ -978,7 +976,7 @@ module_init(dsa_init_module); ...@@ -978,7 +976,7 @@ module_init(dsa_init_module);
static void __exit dsa_cleanup_module(void) static void __exit dsa_cleanup_module(void)
{ {
unregister_netdevice_notifier(&dsa_netdevice_nb); dsa_slave_unregister_notifier();
dev_remove_pack(&dsa_pack_type); dev_remove_pack(&dsa_pack_type);
platform_driver_unregister(&dsa_driver); platform_driver_unregister(&dsa_driver);
} }
......
...@@ -63,8 +63,8 @@ int dsa_slave_create(struct dsa_switch *ds, struct device *parent, ...@@ -63,8 +63,8 @@ int dsa_slave_create(struct dsa_switch *ds, struct device *parent,
void dsa_slave_destroy(struct net_device *slave_dev); void dsa_slave_destroy(struct net_device *slave_dev);
int dsa_slave_suspend(struct net_device *slave_dev); int dsa_slave_suspend(struct net_device *slave_dev);
int dsa_slave_resume(struct net_device *slave_dev); int dsa_slave_resume(struct net_device *slave_dev);
int dsa_slave_netdevice_event(struct notifier_block *unused, int dsa_slave_register_notifier(void);
unsigned long event, void *ptr); void dsa_slave_unregister_notifier(void);
/* tag_dsa.c */ /* tag_dsa.c */
extern const struct dsa_device_ops dsa_netdev_ops; extern const struct dsa_device_ops dsa_netdev_ops;
......
...@@ -1524,8 +1524,8 @@ static int dsa_slave_port_event(struct net_device *dev, unsigned long event, ...@@ -1524,8 +1524,8 @@ static int dsa_slave_port_event(struct net_device *dev, unsigned long event,
return NOTIFY_DONE; return NOTIFY_DONE;
} }
int dsa_slave_netdevice_event(struct notifier_block *unused, static int dsa_slave_netdevice_event(struct notifier_block *nb,
unsigned long event, void *ptr) unsigned long event, void *ptr)
{ {
struct net_device *dev = netdev_notifier_info_to_dev(ptr); struct net_device *dev = netdev_notifier_info_to_dev(ptr);
...@@ -1534,3 +1534,21 @@ int dsa_slave_netdevice_event(struct notifier_block *unused, ...@@ -1534,3 +1534,21 @@ int dsa_slave_netdevice_event(struct notifier_block *unused,
return NOTIFY_DONE; return NOTIFY_DONE;
} }
static struct notifier_block dsa_slave_nb __read_mostly = {
.notifier_call = dsa_slave_netdevice_event,
};
int dsa_slave_register_notifier(void)
{
return register_netdevice_notifier(&dsa_slave_nb);
}
void dsa_slave_unregister_notifier(void)
{
int err;
err = unregister_netdevice_notifier(&dsa_slave_nb);
if (err)
pr_err("DSA: failed to unregister slave notifier (%d)\n", err);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册