diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-07-05 13:13:03 -0400 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-07-05 13:13:03 -0400 |
| commit | 5e66dd6d66ffe758b39b6dcadf2330753ee1159b (patch) | |
| tree | a72cdcff4448e4af9425cc213ddf56ab23e697fe /kernel/module.c | |
| parent | 026477c1141b67e98e3bd8bdedb7d4b88a3ecd09 (diff) | |
| parent | ca78f6baca863afe2e6a244a0fe94b3a70211d46 (diff) | |
Merge branch 'master' of /home/trondmy/kernel/linux-2.6/
Diffstat (limited to 'kernel/module.c')
| -rw-r--r-- | kernel/module.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/kernel/module.c b/kernel/module.c index 281172f01e9a..35e1b1f859d7 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
| @@ -1121,6 +1121,9 @@ static void free_module(struct module *mod) | |||
| 1121 | if (mod->percpu) | 1121 | if (mod->percpu) |
| 1122 | percpu_modfree(mod->percpu); | 1122 | percpu_modfree(mod->percpu); |
| 1123 | 1123 | ||
| 1124 | /* Free lock-classes: */ | ||
| 1125 | lockdep_free_key_range(mod->module_core, mod->core_size); | ||
| 1126 | |||
| 1124 | /* Finally, free the core (containing the module structure) */ | 1127 | /* Finally, free the core (containing the module structure) */ |
| 1125 | module_free(mod, mod->module_core); | 1128 | module_free(mod, mod->module_core); |
| 1126 | } | 1129 | } |
| @@ -2159,6 +2162,29 @@ const struct exception_table_entry *search_module_extables(unsigned long addr) | |||
| 2159 | return e; | 2162 | return e; |
| 2160 | } | 2163 | } |
| 2161 | 2164 | ||
| 2165 | /* | ||
| 2166 | * Is this a valid module address? | ||
| 2167 | */ | ||
| 2168 | int is_module_address(unsigned long addr) | ||
| 2169 | { | ||
| 2170 | unsigned long flags; | ||
| 2171 | struct module *mod; | ||
| 2172 | |||
| 2173 | spin_lock_irqsave(&modlist_lock, flags); | ||
| 2174 | |||
| 2175 | list_for_each_entry(mod, &modules, list) { | ||
| 2176 | if (within(addr, mod->module_core, mod->core_size)) { | ||
| 2177 | spin_unlock_irqrestore(&modlist_lock, flags); | ||
| 2178 | return 1; | ||
| 2179 | } | ||
| 2180 | } | ||
| 2181 | |||
| 2182 | spin_unlock_irqrestore(&modlist_lock, flags); | ||
| 2183 | |||
| 2184 | return 0; | ||
| 2185 | } | ||
| 2186 | |||
| 2187 | |||
| 2162 | /* Is this a valid kernel address? We don't grab the lock: we are oopsing. */ | 2188 | /* Is this a valid kernel address? We don't grab the lock: we are oopsing. */ |
| 2163 | struct module *__module_text_address(unsigned long addr) | 2189 | struct module *__module_text_address(unsigned long addr) |
| 2164 | { | 2190 | { |
