The list module_bug_list relies on module_mutex for writer
synchronisation. The list is already RCU style.
The list removal is synchronized with modules' synchronize_rcu() in
free_module().

Use RCU read lock protection instead of RCU-sched.

Cc: Andrew Morton <a...@linux-foundation.org>
Acked-by: Peter Zijlstra (Intel) <pet...@infradead.org>
Signed-off-by: Sebastian Andrzej Siewior <bige...@linutronix.de>
---
 lib/bug.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/lib/bug.c b/lib/bug.c
index e0ff219899902..b1f07459c2ee3 100644
--- a/lib/bug.c
+++ b/lib/bug.c
@@ -66,23 +66,19 @@ static LIST_HEAD(module_bug_list);
 
 static struct bug_entry *module_find_bug(unsigned long bugaddr)
 {
+       struct bug_entry *bug;
        struct module *mod;
-       struct bug_entry *bug = NULL;
 
-       rcu_read_lock_sched();
+       guard(rcu)();
        list_for_each_entry_rcu(mod, &module_bug_list, bug_list) {
                unsigned i;
 
                bug = mod->bug_table;
                for (i = 0; i < mod->num_bugs; ++i, ++bug)
                        if (bugaddr == bug_addr(bug))
-                               goto out;
+                               return bug;
        }
-       bug = NULL;
-out:
-       rcu_read_unlock_sched();
-
-       return bug;
+       return NULL;
 }
 
 void module_bug_finalize(const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs,
@@ -235,11 +231,11 @@ void generic_bug_clear_once(void)
 #ifdef CONFIG_MODULES
        struct module *mod;
 
-       rcu_read_lock_sched();
-       list_for_each_entry_rcu(mod, &module_bug_list, bug_list)
-               clear_once_table(mod->bug_table,
-                                mod->bug_table + mod->num_bugs);
-       rcu_read_unlock_sched();
+       scoped_guard(rcu) {
+               list_for_each_entry_rcu(mod, &module_bug_list, bug_list)
+                       clear_once_table(mod->bug_table,
+                                        mod->bug_table + mod->num_bugs);
+       }
 #endif
 
        clear_once_table(__start___bug_table, __stop___bug_table);
-- 
2.47.1


Reply via email to