summaryrefslogtreecommitdiffstats
path: root/kernel/module.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-12-26 16:07:19 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-12-26 16:07:19 -0500
commit792bf4d871dea8b69be2aaabdd320d7c6ed15985 (patch)
tree8cec3755ff6df5f82b12420fb6ad6a4d531ebfd1 /kernel/module.c
parenteed9688f8513189295887e5a27ec7f576754b60e (diff)
parent4bbfd7467cfc7d42e18d3008fa6a28ffd56e901a (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.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() */