diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-12-26 16:07:19 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-12-26 16:07:19 -0500 |
commit | 792bf4d871dea8b69be2aaabdd320d7c6ed15985 (patch) | |
tree | 8cec3755ff6df5f82b12420fb6ad6a4d531ebfd1 /kernel/module.c | |
parent | eed9688f8513189295887e5a27ec7f576754b60e (diff) | |
parent | 4bbfd7467cfc7d42e18d3008fa6a28ffd56e901a (diff) |
Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull RCU updates from Ingo Molnar:
"The biggest RCU changes in this cycle were:
- Convert RCU's BUG_ON() and similar calls to WARN_ON() and similar.
- Replace calls of RCU-bh and RCU-sched update-side functions to
their vanilla RCU counterparts. This series is a step towards
complete removal of the RCU-bh and RCU-sched update-side functions.
( Note that some of these conversions are going upstream via their
respective maintainers. )
- Documentation updates, including a number of flavor-consolidation
updates from Joel Fernandes.
- Miscellaneous fixes.
- Automate generation of the initrd filesystem used for rcutorture
testing.
- Convert spin_is_locked() assertions to instead use lockdep.
( Note that some of these conversions are going upstream via their
respective maintainers. )
- SRCU updates, especially including a fix from Dennis Krein for a
bag-on-head-class bug.
- RCU torture-test updates"
* 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (112 commits)
rcutorture: Don't do busted forward-progress testing
rcutorture: Use 100ms buckets for forward-progress callback histograms
rcutorture: Recover from OOM during forward-progress tests
rcutorture: Print forward-progress test age upon failure
rcutorture: Print time since GP end upon forward-progress failure
rcutorture: Print histogram of CB invocation at OOM time
rcutorture: Print GP age upon forward-progress failure
rcu: Print per-CPU callback counts for forward-progress failures
rcu: Account for nocb-CPU callback counts in RCU CPU stall warnings
rcutorture: Dump grace-period diagnostics upon forward-progress OOM
rcutorture: Prepare for asynchronous access to rcu_fwd_startat
torture: Remove unnecessary "ret" variables
rcutorture: Affinity forward-progress test to avoid housekeeping CPUs
rcutorture: Break up too-long rcu_torture_fwd_prog() function
rcutorture: Remove cbflood facility
torture: Bring any extra CPUs online during kernel startup
rcutorture: Add call_rcu() flooding forward-progress tests
rcutorture/formal: Replace synchronize_sched() with synchronize_rcu()
tools/kernel.h: Replace synchronize_sched() with synchronize_rcu()
net/decnet: Replace rcu_barrier_bh() with rcu_barrier()
...
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() */ |