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