module: add MODULE_STATE_GOING notifier call
Provide module unload callback. Required by the gcov profiling infrastructure to keep track of profiling data structures. Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
b211104d11
commit
df4b565e1f
1 changed files with 7 additions and 4 deletions
|
@ -745,12 +745,13 @@ sys_delete_module(const char __user *name_user, unsigned int flags)
|
||||||
if (!forced && module_refcount(mod) != 0)
|
if (!forced && module_refcount(mod) != 0)
|
||||||
wait_for_zero_refcount(mod);
|
wait_for_zero_refcount(mod);
|
||||||
|
|
||||||
|
mutex_unlock(&module_mutex);
|
||||||
/* Final destruction now noone is using it. */
|
/* Final destruction now noone is using it. */
|
||||||
if (mod->exit != NULL) {
|
if (mod->exit != NULL)
|
||||||
mutex_unlock(&module_mutex);
|
|
||||||
mod->exit();
|
mod->exit();
|
||||||
mutex_lock(&module_mutex);
|
blocking_notifier_call_chain(&module_notify_list,
|
||||||
}
|
MODULE_STATE_GOING, mod);
|
||||||
|
mutex_lock(&module_mutex);
|
||||||
/* Store the name of the last unloaded module for diagnostic purposes */
|
/* Store the name of the last unloaded module for diagnostic purposes */
|
||||||
strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module));
|
strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module));
|
||||||
free_module(mod);
|
free_module(mod);
|
||||||
|
@ -2191,6 +2192,8 @@ sys_init_module(void __user *umod,
|
||||||
mod->state = MODULE_STATE_GOING;
|
mod->state = MODULE_STATE_GOING;
|
||||||
synchronize_sched();
|
synchronize_sched();
|
||||||
module_put(mod);
|
module_put(mod);
|
||||||
|
blocking_notifier_call_chain(&module_notify_list,
|
||||||
|
MODULE_STATE_GOING, mod);
|
||||||
mutex_lock(&module_mutex);
|
mutex_lock(&module_mutex);
|
||||||
free_module(mod);
|
free_module(mod);
|
||||||
mutex_unlock(&module_mutex);
|
mutex_unlock(&module_mutex);
|
||||||
|
|
Loading…
Reference in a new issue