diff options
Diffstat (limited to 'kernel/module.c')
-rw-r--r-- | kernel/module.c | 14 |
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: | |||
3526 | fail: | 3526 | fail: |
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() */ |