summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>2014-11-09 23:58:29 +0100
committerRusty Russell <rusty@rustcorp.com.au>2014-11-11 07:37:46 +0100
commit0286b5ea125e58b4797747f688949c05394412e8 (patch)
treedef974e29b25f8a7a00da7b39f5b18bac93af98d /kernel
parentmodule: Unlink module with RCU synchronizing instead of stop_machine (diff)
downloadlinux-0286b5ea125e58b4797747f688949c05394412e8.tar.xz
linux-0286b5ea125e58b4797747f688949c05394412e8.zip
lib/bug: Use RCU list ops for module_bug_list
Actually since module_bug_list should be used in BUG context, we may not need this. But for someone who want to use this from normal context, this makes module_bug_list an RCU list. Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/module.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/kernel/module.c b/kernel/module.c
index bed608b8c8a6..d596a306b0a1 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1850,9 +1850,10 @@ static void free_module(struct module *mod)
mutex_lock(&module_mutex);
/* Unlink carefully: kallsyms could be walking list. */
list_del_rcu(&mod->list);
- /* Wait for RCU synchronizing before releasing mod->list. */
- synchronize_rcu();
+ /* Remove this module from bug list, this uses list_del_rcu */
module_bug_cleanup(mod);
+ /* Wait for RCU synchronizing before releasing mod->list and buglist. */
+ synchronize_rcu();
mutex_unlock(&module_mutex);
/* This may be NULL, but that's OK */