mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-12 01:20:14 +00:00
module: Use RCU in all users of __module_text_address().
__module_text_address() can be invoked within a RCU section, there is no requirement to have preemption disabled. Replace the preempt_disable() section around __module_text_address() with RCU. 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-16-bigeasy@linutronix.de Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>
This commit is contained in:
parent
6593a2c990
commit
d593e0cabd
@ -823,13 +823,12 @@ void symbol_put_addr(void *addr)
|
||||
|
||||
/*
|
||||
* Even though we hold a reference on the module; we still need to
|
||||
* disable preemption in order to safely traverse the data structure.
|
||||
* RCU read section in order to safely traverse the data structure.
|
||||
*/
|
||||
preempt_disable();
|
||||
guard(rcu)();
|
||||
modaddr = __module_text_address(a);
|
||||
BUG_ON(!modaddr);
|
||||
module_put(modaddr);
|
||||
preempt_enable();
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(symbol_put_addr);
|
||||
|
||||
@ -3776,20 +3775,15 @@ lookup:
|
||||
*/
|
||||
bool is_module_text_address(unsigned long addr)
|
||||
{
|
||||
bool ret;
|
||||
|
||||
preempt_disable();
|
||||
ret = __module_text_address(addr) != NULL;
|
||||
preempt_enable();
|
||||
|
||||
return ret;
|
||||
guard(rcu)();
|
||||
return __module_text_address(addr) != NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* __module_text_address() - get the module whose code contains an address.
|
||||
* @addr: the address.
|
||||
*
|
||||
* Must be called with preempt disabled or module mutex held so that
|
||||
* Must be called within RCU read section or module mutex held so that
|
||||
* module doesn't get freed during this.
|
||||
*/
|
||||
struct module *__module_text_address(unsigned long addr)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user