From: Ingo Molnar Add __module_address() method - to be used by lockdep. Signed-off-by: Ingo Molnar Signed-off-by: Arjan van de Ven Signed-off-by: Andrew Morton --- include/linux/module.h | 6 ++++++ kernel/module.c | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff -puN include/linux/module.h~lock-validator-add-__module_address-method include/linux/module.h --- devel/include/linux/module.h~lock-validator-add-__module_address-method 2006-05-29 18:12:32.000000000 -0700 +++ devel-akpm/include/linux/module.h 2006-05-29 18:12:32.000000000 -0700 @@ -358,6 +358,7 @@ static inline int module_is_live(struct /* Is this address in a module? (second is with no locks, for oops) */ struct module *module_text_address(unsigned long addr); struct module *__module_text_address(unsigned long addr); +int __module_address(unsigned long addr); /* Returns module and fills in value, defined and namebuf, or NULL if symnum out of range. */ @@ -496,6 +497,11 @@ static inline struct module *__module_te return NULL; } +static inline int __module_address(unsigned long addr) +{ + return 0; +} + /* Get/put a kernel symbol (calls should be symmetric) */ #define symbol_get(x) ({ extern typeof(x) x __attribute__((weak)); &(x); }) #define symbol_put(x) do { } while(0) diff -puN kernel/module.c~lock-validator-add-__module_address-method kernel/module.c --- devel/kernel/module.c~lock-validator-add-__module_address-method 2006-05-29 18:12:32.000000000 -0700 +++ devel-akpm/kernel/module.c 2006-05-29 18:12:32.000000000 -0700 @@ -2186,6 +2186,20 @@ const struct exception_table_entry *sear return e; } +/* + * Is this a valid module address? We don't grab the lock. + */ +int __module_address(unsigned long addr) +{ + struct module *mod; + + list_for_each_entry(mod, &modules, list) + if (within(addr, mod->module_core, mod->core_size)) + return 1; + return 0; +} + + /* Is this a valid kernel address? We don't grab the lock: we are oopsing. */ struct module *__module_text_address(unsigned long addr) { _