br2684: fix scheduling while atomic

You can't call atomic_notifier_chain_unregister() while in atomic context.

Fix, call un/register_atmdevice_notifier in module __init and __exit.

Bug report:
http://comments.gmane.org/gmane.linux.network/172603

Reported-by: Mikko Vinni <mmvinni@yahoo.com>
Tested-by: Mikko Vinni <mmvinni@yahoo.com>
Signed-off-by: Karl Hiramoto <karl@hiramoto.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by Karl Hiramoto and committed by David S. Miller a3d6713f ca9a7835

+2 -10
+2 -10
net/atm/br2684.c
··· 399 unregister_netdev(net_dev); 400 free_netdev(net_dev); 401 } 402 - read_lock_irq(&devs_lock); 403 - if (list_empty(&br2684_devs)) { 404 - /* last br2684 device */ 405 - unregister_atmdevice_notifier(&atm_dev_notifier); 406 - } 407 - read_unlock_irq(&devs_lock); 408 return; 409 } 410 ··· 669 670 if (list_empty(&br2684_devs)) { 671 /* 1st br2684 device */ 672 - register_atmdevice_notifier(&atm_dev_notifier); 673 brdev->number = 1; 674 } else 675 brdev->number = BRPRIV(list_entry_brdev(br2684_devs.prev))->number + 1; ··· 808 return -ENOMEM; 809 #endif 810 register_atm_ioctl(&br2684_ioctl_ops); 811 return 0; 812 } 813 ··· 824 #endif 825 826 827 - /* if not already empty */ 828 - if (!list_empty(&br2684_devs)) 829 - unregister_atmdevice_notifier(&atm_dev_notifier); 830 831 while (!list_empty(&br2684_devs)) { 832 net_dev = list_entry_brdev(br2684_devs.next);
··· 399 unregister_netdev(net_dev); 400 free_netdev(net_dev); 401 } 402 return; 403 } 404 ··· 675 676 if (list_empty(&br2684_devs)) { 677 /* 1st br2684 device */ 678 brdev->number = 1; 679 } else 680 brdev->number = BRPRIV(list_entry_brdev(br2684_devs.prev))->number + 1; ··· 815 return -ENOMEM; 816 #endif 817 register_atm_ioctl(&br2684_ioctl_ops); 818 + register_atmdevice_notifier(&atm_dev_notifier); 819 return 0; 820 } 821 ··· 830 #endif 831 832 833 + unregister_atmdevice_notifier(&atm_dev_notifier); 834 835 while (!list_empty(&br2684_devs)) { 836 net_dev = list_entry_brdev(br2684_devs.next);