mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
jump_label: Use RCU in all users of __module_address().
__module_address() can be invoked within a RCU section, there is no requirement to have preemption disabled. Replace the preempt_disable() section around __module_address() with RCU. Cc: Ard Biesheuvel <ardb@kernel.org> Cc: Jason Baron <jbaron@akamai.com> Cc: Josh Poimboeuf <jpoimboe@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20250108090457.512198-24-bigeasy@linutronix.de Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>
This commit is contained in:
committed by
Petr Pavlu
parent
14daa3bca2
commit
4038131fdf
@@ -746,9 +746,9 @@ static int jump_label_add_module(struct module *mod)
|
||||
kfree(jlm);
|
||||
return -ENOMEM;
|
||||
}
|
||||
preempt_disable();
|
||||
jlm2->mod = __module_address((unsigned long)key);
|
||||
preempt_enable();
|
||||
scoped_guard(rcu)
|
||||
jlm2->mod = __module_address((unsigned long)key);
|
||||
|
||||
jlm2->entries = static_key_entries(key);
|
||||
jlm2->next = NULL;
|
||||
static_key_set_mod(key, jlm2);
|
||||
@@ -906,13 +906,13 @@ static void jump_label_update(struct static_key *key)
|
||||
return;
|
||||
}
|
||||
|
||||
preempt_disable();
|
||||
mod = __module_address((unsigned long)key);
|
||||
if (mod) {
|
||||
stop = mod->jump_entries + mod->num_jump_entries;
|
||||
init = mod->state == MODULE_STATE_COMING;
|
||||
scoped_guard(rcu) {
|
||||
mod = __module_address((unsigned long)key);
|
||||
if (mod) {
|
||||
stop = mod->jump_entries + mod->num_jump_entries;
|
||||
init = mod->state == MODULE_STATE_COMING;
|
||||
}
|
||||
}
|
||||
preempt_enable();
|
||||
#endif
|
||||
entry = static_key_entries(key);
|
||||
/* if there are no users, entry can be NULL */
|
||||
|
||||
Reference in New Issue
Block a user