fix via-velocity oopses]
PATCH 1/1 fix via-velocity oopses]
FYI (since there are other via-velocity changes floating about)
- Don't register the inet_addr notifier if the hardware is absent. It oopses when other interfaces are being upped.
- Mark velocity_remove1() as __devexit_p in the pci_driver table.
- c99ification.
Signed-off-by Andrew Morton <[email protected]>
---
25-akpm/drivers/net/via-velocity.c | 29 ++++++++++++++++++----------- 1 files changed, 18 insertions(+), 11 deletions(-)
drivers/net/via-velocity.c renamed from drivers/net/via-velocity.c~via-velocity-oops-fix +18 -11
@@ -269,8 +269,9 @@ static int velocity_resume(struct pci_destatic int velocity_netdev_event (struct notifier_block *nb,unsigned long notification,void *ptr);static struct notifier_block velocity_inetaddr_notifier = { - notifier_call:velocity_netdev_event, + .notifier_call = velocity_netdev_event, }; +static int velocity_notifier_registered;#endif /* CONFIG_PM */
@@ -776,6 +777,12 @@ static int __devinit velocity_found1(strpci_set_power_state (pdev,3 ); out: +#ifdef CONFIG_PM +if (ret ==0 && !velocity_notifier_registered) { + velocity_notifier_registered =1 ; +register_inetaddr_notifier (&velocity_inetaddr_notifier); + } +#endif return ret; err_iounmap:
@@ -2123,13 +2130,13 @@ static int velocity_ioctl(struct net_dev*/ static struct pci_driver velocity_driver = { - name:VELOCITY_NAME , - id_table:velocity_id_table, - probe:velocity_found1, - remove:velocity_remove1, + .name =VELOCITY_NAME , + .id_table = velocity_id_table, + .probe = velocity_found1, + .remove =__devexit_p (velocity_remove1), #ifdef CONFIG_PM - suspend:velocity_suspend, - resume:velocity_resume, + .suspend = velocity_suspend, + .resume = velocity_resume, #endif };
@@ -2147,9 +2154,6 @@ static int __init velocity_init_module(vint ret; ret =pci_module_init (&velocity_driver); -#ifdef CONFIG_PM -register_inetaddr_notifier (&velocity_inetaddr_notifier); -#endif return ret; }
@@ -2165,7 +2169,10 @@ static int __init velocity_init_module(v static void __exit velocity_cleanup_module(void) {#ifdef CONFIG_PM -unregister_inetaddr_notifier (&velocity_inetaddr_notifier); +if (velocity_notifier_registered) { +unregister_inetaddr_notifier (&velocity_inetaddr_notifier); + velocity_notifier_registered =0 ; + }#endif pci_unregister_driver (&velocity_driver); }
_