|
@@ -3571,6 +3571,12 @@ static int load_module(struct load_info *info, const char __user *uargs,
|
|
synchronize_sched();
|
|
synchronize_sched();
|
|
mutex_unlock(&module_mutex);
|
|
mutex_unlock(&module_mutex);
|
|
free_module:
|
|
free_module:
|
|
|
|
+ /*
|
|
|
|
+ * Ftrace needs to clean up what it initialized.
|
|
|
|
+ * This does nothing if ftrace_module_init() wasn't called,
|
|
|
|
+ * but it must be called outside of module_mutex.
|
|
|
|
+ */
|
|
|
|
+ ftrace_release_mod(mod);
|
|
/* Free lock-classes; relies on the preceding sync_rcu() */
|
|
/* Free lock-classes; relies on the preceding sync_rcu() */
|
|
lockdep_free_key_range(mod->module_core, mod->core_size);
|
|
lockdep_free_key_range(mod->module_core, mod->core_size);
|
|
|
|
|