aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/module.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/module.c')
-rw-r--r--kernel/module.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/kernel/module.c b/kernel/module.c
index 49a405891587..99b46c32d579 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2159,7 +2159,7 @@ static void free_module(struct module *mod)
2159 /* Remove this module from bug list, this uses list_del_rcu */ 2159 /* Remove this module from bug list, this uses list_del_rcu */
2160 module_bug_cleanup(mod); 2160 module_bug_cleanup(mod);
2161 /* Wait for RCU-sched synchronizing before releasing mod->list and buglist. */ 2161 /* Wait for RCU-sched synchronizing before releasing mod->list and buglist. */
2162 synchronize_sched(); 2162 synchronize_rcu();
2163 mutex_unlock(&module_mutex); 2163 mutex_unlock(&module_mutex);
2164 2164
2165 /* This may be empty, but that's OK */ 2165 /* This may be empty, but that's OK */
@@ -3507,15 +3507,15 @@ static noinline int do_init_module(struct module *mod)
3507 /* 3507 /*
3508 * We want to free module_init, but be aware that kallsyms may be 3508 * We want to free module_init, but be aware that kallsyms may be
3509 * walking this with preempt disabled. In all the failure paths, we 3509 * walking this with preempt disabled. In all the failure paths, we
3510 * call synchronize_sched(), but we don't want to slow down the success 3510 * call synchronize_rcu(), but we don't want to slow down the success
3511 * path, so use actual RCU here. 3511 * path, so use actual RCU here.
3512 * Note that module_alloc() on most architectures creates W+X page 3512 * Note that module_alloc() on most architectures creates W+X page
3513 * mappings which won't be cleaned up until do_free_init() runs. Any 3513 * mappings which won't be cleaned up until do_free_init() runs. Any
3514 * code such as mark_rodata_ro() which depends on those mappings to 3514 * code such as mark_rodata_ro() which depends on those mappings to
3515 * be cleaned up needs to sync with the queued work - ie 3515 * be cleaned up needs to sync with the queued work - ie
3516 * rcu_barrier_sched() 3516 * rcu_barrier()
3517 */ 3517 */
3518 call_rcu_sched(&freeinit->rcu, do_free_init); 3518 call_rcu(&freeinit->rcu, do_free_init);
3519 mutex_unlock(&module_mutex); 3519 mutex_unlock(&module_mutex);
3520 wake_up_all(&module_wq); 3520 wake_up_all(&module_wq);
3521 3521
@@ -3526,7 +3526,7 @@ fail_free_freeinit:
3526fail: 3526fail:
3527 /* Try to protect us from buggy refcounters. */ 3527 /* Try to protect us from buggy refcounters. */
3528 mod->state = MODULE_STATE_GOING; 3528 mod->state = MODULE_STATE_GOING;
3529 synchronize_sched(); 3529 synchronize_rcu();
3530 module_put(mod); 3530 module_put(mod);
3531 blocking_notifier_call_chain(&module_notify_list, 3531 blocking_notifier_call_chain(&module_notify_list,
3532 MODULE_STATE_GOING, mod); 3532 MODULE_STATE_GOING, mod);
@@ -3819,7 +3819,7 @@ static int load_module(struct load_info *info, const char __user *uargs,
3819 ddebug_cleanup: 3819 ddebug_cleanup:
3820 ftrace_release_mod(mod); 3820 ftrace_release_mod(mod);
3821 dynamic_debug_remove(mod, info->debug); 3821 dynamic_debug_remove(mod, info->debug);
3822 synchronize_sched(); 3822 synchronize_rcu();
3823 kfree(mod->args); 3823 kfree(mod->args);
3824 free_arch_cleanup: 3824 free_arch_cleanup:
3825 module_arch_cleanup(mod); 3825 module_arch_cleanup(mod);
@@ -3834,7 +3834,7 @@ static int load_module(struct load_info *info, const char __user *uargs,
3834 mod_tree_remove(mod); 3834 mod_tree_remove(mod);
3835 wake_up_all(&module_wq); 3835 wake_up_all(&module_wq);
3836 /* Wait for RCU-sched synchronizing before releasing mod->list. */ 3836 /* Wait for RCU-sched synchronizing before releasing mod->list. */
3837 synchronize_sched(); 3837 synchronize_rcu();
3838 mutex_unlock(&module_mutex); 3838 mutex_unlock(&module_mutex);
3839 free_module: 3839 free_module:
3840 /* Free lock-classes; relies on the preceding sync_rcu() */ 3840 /* Free lock-classes; relies on the preceding sync_rcu() */