Messages in this thread | | | Date | Wed, 22 Sep 2010 10:03:11 -0400 | From | Mathieu Desnoyers <> | Subject | Re: [PATCH 1/2] Add for_each_module iterator function |
| |
* Thomas Gleixner (tglx@linutronix.de) wrote: > > > On Wed, 22 Sep 2010, Andi Kleen wrote: > > > From: Andi Kleen <ak@linux.intel.com> > > > > This is a generic function to iterate over all modules. > > To be used in the next patch. > > > > Signed-off-by: Andi Kleen <ak@linux.intel.com> > > --- > > include/linux/module.h | 1 + > > kernel/module.c | 10 ++++++++++ > > 2 files changed, 11 insertions(+), 0 deletions(-) > > > > diff --git a/include/linux/module.h b/include/linux/module.h > > index 403ac26..809b6db 100644 > > --- a/include/linux/module.h > > +++ b/include/linux/module.h > > @@ -410,6 +410,7 @@ struct module *__module_address(unsigned long addr); > > bool is_module_address(unsigned long addr); > > bool is_module_percpu_address(unsigned long addr); > > bool is_module_text_address(unsigned long addr); > > +void for_each_module(void (*op)(struct module *, void *arg), void *arg); > > > > static inline int within_module_core(unsigned long addr, struct module *mod) > > { > > diff --git a/kernel/module.c b/kernel/module.c > > index eba1341..b8fb3e6 100644 > > --- a/kernel/module.c > > +++ b/kernel/module.c > > @@ -384,6 +384,16 @@ struct module *find_module(const char *name) > > } > > EXPORT_SYMBOL_GPL(find_module); > > > > +void for_each_module(void (*op)(struct module *, void *arg), void *arg) > > +{ > > + struct module *mod; > > + > > + preempt_disable(); > > That wants rcu_read_lock()
Then we might need to add synchronize_rcu() call when modules are unloaded. For now, there is only synchronize_sched().
Mathieu
> > > + list_for_each_entry_rcu(mod, &modules, list) > > + op(mod, arg); > > + preempt_enable(); > > Thanks, > > tglx
-- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com
| |