diff options
Diffstat (limited to 'kernel/module.c')
| -rw-r--r-- | kernel/module.c | 20 | 
1 files changed, 5 insertions, 15 deletions
diff --git a/kernel/module.c b/kernel/module.c index ddfe45ac2fd1..4fafd58038a0 100644 --- a/kernel/module.c +++ b/kernel/module.c  | |||
| @@ -64,26 +64,17 @@ static DEFINE_SPINLOCK(modlist_lock); | |||
| 64 | static DEFINE_MUTEX(module_mutex); | 64 | static DEFINE_MUTEX(module_mutex); | 
| 65 | static LIST_HEAD(modules); | 65 | static LIST_HEAD(modules); | 
| 66 | 66 | ||
| 67 | static DEFINE_MUTEX(notify_mutex); | 67 | static BLOCKING_NOTIFIER_HEAD(module_notify_list); | 
| 68 | static struct notifier_block * module_notify_list; | ||
| 69 | 68 | ||
| 70 | int register_module_notifier(struct notifier_block * nb) | 69 | int register_module_notifier(struct notifier_block * nb) | 
| 71 | { | 70 | { | 
| 72 | int err; | 71 | return blocking_notifier_chain_register(&module_notify_list, nb); | 
| 73 | mutex_lock(¬ify_mutex); | ||
| 74 | err = notifier_chain_register(&module_notify_list, nb); | ||
| 75 | mutex_unlock(¬ify_mutex); | ||
| 76 | return err; | ||
| 77 | } | 72 | } | 
| 78 | EXPORT_SYMBOL(register_module_notifier); | 73 | EXPORT_SYMBOL(register_module_notifier); | 
| 79 | 74 | ||
| 80 | int unregister_module_notifier(struct notifier_block * nb) | 75 | int unregister_module_notifier(struct notifier_block * nb) | 
| 81 | { | 76 | { | 
| 82 | int err; | 77 | return blocking_notifier_chain_unregister(&module_notify_list, nb); | 
| 83 | mutex_lock(¬ify_mutex); | ||
| 84 | err = notifier_chain_unregister(&module_notify_list, nb); | ||
| 85 | mutex_unlock(¬ify_mutex); | ||
| 86 | return err; | ||
| 87 | } | 78 | } | 
| 88 | EXPORT_SYMBOL(unregister_module_notifier); | 79 | EXPORT_SYMBOL(unregister_module_notifier); | 
| 89 | 80 | ||
| @@ -1816,9 +1807,8 @@ sys_init_module(void __user *umod, | |||
| 1816 | /* Drop lock so they can recurse */ | 1807 | /* Drop lock so they can recurse */ | 
| 1817 | mutex_unlock(&module_mutex); | 1808 | mutex_unlock(&module_mutex); | 
| 1818 | 1809 | ||
| 1819 | mutex_lock(¬ify_mutex); | 1810 | blocking_notifier_call_chain(&module_notify_list, | 
| 1820 | notifier_call_chain(&module_notify_list, MODULE_STATE_COMING, mod); | 1811 | MODULE_STATE_COMING, mod); | 
| 1821 | mutex_unlock(¬ify_mutex); | ||
| 1822 | 1812 | ||
| 1823 | /* Start the module */ | 1813 | /* Start the module */ | 
| 1824 | if (mod->init != NULL) | 1814 | if (mod->init != NULL) | 
